Android摄像头获取队列的回调缓冲区长度

时间:2016-07-30 03:33:19

标签: java android callback android-camera

如何知道队列中当前的回调量?

有时计数会降至1回调,而我每秒只能得到2帧。

设置:

private void setupCallback(int bufferSize)
{
    mCamera.setPreviewCallbackWithBuffer(this);
    for (int i = 0; i <= NUM_BUFFERS; ++i)
    {
        byte[] cameraBuffer = new byte[bufferSize];
        mCamera.addCallbackBuffer(cameraBuffer);
    }
}

@Override
public void onPreviewFrame(byte[] data, Camera camera)
{
    processFrame(data);
    camera.addCallbackBuffer(data);
}

日志说:

  

D / Camera-JNI:使用长度为4的队列的回调缓冲区

但有时用相同的代码说:

  

D / Camera-JNI:使用长度为1的队列中的回调缓冲区

我怎么知道出错了并重置那些缓冲区?

1 个答案:

答案 0 :(得分:0)

在Android API中无法做到这一点。您可以将processFrame移动到另一个线程,以便onPreviewFrame基本上不会阻塞。这样,大部分队列都将在您的流程中,并且您将能够跟踪它。

您还应该注意,onPreviewFrame在您调用Camera.open()的同一个线程上调用。如果该线程忙于执行某些操作,则不会调用onPreviewFrame,并且相应的缓冲区将从缓冲池中退出。因此,我建议您使用专用线程来处理Camera