2013-03-04 131 views
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的緩衝區。所以......你會如何解決這個問題?

+0

我加了一些信息,以@Aegonis'後,它描述的Android 4.3(API 18)的新功能。 – fadden 2013-07-24 19:49:40

回答

1

試試這個

Parameters camParams = camera.getParameters(); 
int size = imageWidth * imageHeight; 
size = size * ImageFormat.getBitsPerPixel(camParams.getPreviewFormat())/8; 
mBuffer = new byte[size]; // class variable 
camera.addCallbackBuffer(mBuffer); 
相關問題