Camera addCallbackBuffer机制如何工作?

时间:2015-07-14 21:37:28

标签: android camera buffer frame

以下是addCallbackBuffer的解释: http://developer.android.com/reference/android/hardware/Camera.html#addCallbackBuffer(byte[])

我无法理解这种机制以及如何使用它。我们可以添加一个或多个缓冲区。假设我们添加了10个缓冲区。填充10个缓冲区时是否调用OnPreviewFrame方法?

假设从缓冲区队列中删除了缓冲区,并使用该缓冲区调用OnPreviewFrame。当我们使用到达的缓冲区调用addCallbackBuffer方法时,是否将缓冲区添加到队列的头部,然后使用该缓冲区调用下一个OnPreviewFrame?

当我们调用addCallbackBuffer时,我们如何获取帧的时间戳?

调用addCallbackBuffer时是否有帧丢失?

1 个答案:

答案 0 :(得分:8)

将setPreviewCallbackWithBuffer和addCallbackBuffer一起使用。

首先,您应该在调用setPreviewCallbackWithBuffer之前调用addCallbackBuffer。您可以通过调用addCallbackBuffer 4-5帧来添加缓冲区。这取决于你的项目。帧需要多少字节expains here.

每次调用onPreviewFrame时,都会使用addCallbackBuffer添加的缓冲区。只要addCallbackBuffer添加了足够的缓冲区,就会调用onPreviewFrame。如果onPreviewFrame没有剩余缓冲区,则会开始丢弃帧并且不会调用onPreviewFrame。

因此,您应该在执行期间继续调用addCallbackBuffer。处理完数据后,可以在onPreviewFrame上使用字节数组参数调用addCallbackBuffer。通过这种方式,您始终可以重用相同的缓冲区。

如果有一点我错过了解释,请告诉我。