Camera addCallbackBuffer 机制是如何工作的?

How does Camera addCallbackBuffer mechanism works?

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

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

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

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

调用addCallbackBuffer时有没有掉帧?

同时使用 setPreviewCallbackWithBuffer 和 addCallbackBuffer。

首先,您应该调用addCallbackBuffer before calling setPreviewCallbackWithBuffer. You can add buffer by calling addCallbackBuffer for 4-5 frames. It depends on your project. How many bytes a frame requires expains here.

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

所以你应该在执行过程中一直调用addCallbackBuffer。您可以在处理完数据后在 onPreviewFrame 上调用带有字节数组参数的 addCallbackBuffer。这样,您总是可以重复使用相同的缓冲区。

如果有什么地方我没有解释清楚,请告诉我。