1
由於@Aegonis問這個post連接MediaCodec帶攝像頭(setPreviewCallbackWithBuffers)
我試圖將相機與Android連接到編碼視頻幀。
的問題是,試圖做同樣的比他,在這部分,他的主題貼,它墜毀另外2個用戶:
// called from Camera.setPreviewCallbackWithBuffer(...) in other class
public void encoder(byte[] input) {
try {
ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers();
ByteBuffer[] outputBuffers = mediaCodec.getOutputBuffers();
int inputBufferIndex = mediaCodec.dequeueInputBuffer(-1);
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(input);
mediaCodec.queueInputBuffer(inputBufferIndex, 0, input.length, 0, 0);
}
...
呼叫我從setPreviewCallbackWithBuffer做的是這樣的:
int bufSize= 460800;
camera.addCallbackBuffer(new byte[bufSize]);
camera.setPreviewCallbackWithBuffer(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera arg1) {
codecs.encoder(data);
}
});
...
具有以下錯誤消息
03-04 20:30:46.762: E/AndroidRuntime(26196): java.nio.BufferOverflowException
03-04 20:30:46.762: E/AndroidRuntime(26196): at java.nio.Buffer.checkPutBounds(Buffer.java:189)
03-04 20:30:46.762: E/AndroidRuntime(26196): at java.nio.ReadWriteDirectByteBuffer.put(ReadWriteDirectByteBuffer.java:100)
03-04 20:30:46.762: E/AndroidRuntime(26196): at java.nio.ByteBuffer.put(ByteBuffer.java:712)
這麼好,字節的buff呃是如此之大,但是setPreviewCallbackWithBuffer說你至少要使用一個大小爲460800的緩衝區。所以......你會如何解決這個問題?
我加了一些信息,以@Aegonis'後,它描述的Android 4.3(API 18)的新功能。 – fadden 2013-07-24 19:49:40