如何知道队列中当前的回调量?
有时计数会降至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的队列中的回调缓冲区
我怎么知道出错了并重置那些缓冲区?
答案 0 :(得分:0)
在Android API中无法做到这一点。您可以将processFrame
移动到另一个线程,以便onPreviewFrame
基本上不会阻塞。这样,大部分队列都将在您的流程中,并且您将能够跟踪它。
您还应该注意,onPreviewFrame
在您调用Camera.open()
的同一个线程上调用。如果该线程忙于执行某些操作,则不会调用onPreviewFrame
,并且相应的缓冲区将从缓冲池中退出。因此,我建议您使用专用线程来处理Camera
。