【问题标题】:How does Camera addCallbackBuffer mechanism works?Camera addCallbackBuffer 机制是如何工作的?
【发布时间】:2015-07-14 21:37:27
【问题描述】:

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

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

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

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

调用 addCallbackBuffer 时会出现丢帧吗?

【问题讨论】:

  • 在解释文档时,它建议在您添加 10 个缓冲区的示例中,每个缓冲区按顺序填充并从队列中删除(它说“队列”,所以是 FIFO)。我认为您要了解的是要知道您要返回哪个缓冲区。我自己没有玩过这个,但也许你可以提供一个太大的字节数组,并用一些标识符预先填充这些额外的字节?
  • 嗨,Paul,我会按照您的说法深入研究这个 API。

标签: android camera buffer frame


【解决方案1】:

同时使用 setPreviewCallbackWithBuffer 和 addCallbackBuffer。

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

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

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

如果有什么我错过解释的地方,请告诉我。

【讨论】:

    猜你喜欢
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2021-04-10
    • 2021-05-11
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多