首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用了onImageAvailable回调,但acquireLatestImage返回NO_BUFFER_AVAILABLE

问调用了onImageAvailable回调,但acquireLatestImage返回NO_BUFFER_AVAILABLE
EN

Stack Overflow用户
提问于 2021-10-26 06:53:34
回答 1查看 61关注 0票数 0

我正在用C编写Camera2接口,以便在原生端连续拍照,它工作得很好,除了有时在收到onImageAvailable回调后,当调用acquireLatestImage时,返回是NO_BUFFER_AVAILABLE。根据安卓文档:https://developer.android.com/ndk/reference/struct/a-image-reader-image-listener#onimageavailable

请注意,在此回调中调用AImageReader_acquireNextImage或AImageReader_acquireLatestImage可能会返回AMEDIA_IMGREADER_NO_BUFFER_AVAILABLE。例如,当有多个镜像和回调排队时,如果应用程序调用AImageReader_acquireLatestImage,则某些镜像会在其对应的回调执行之前返回到系统

有没有人能解释一下什么时候会发生这种情况,以及可能的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2021-10-28 14:17:21

如果已经将多个图像捕获到AImageReader中,则调用AImageReader_acquireLatestImage将丢弃除最新图像之外的所有图像,然后返回最新图像。

所以你会得到一个类似这样的序列:

代码语言:javascript
复制
onImageAvailable()
onImageAvailable()
onImageAvailable()
acquireLatestImage() -> OK
acquireLatestImage() -> NO_BUFFER_AVAILABLE
acquireLatestImage() -> NO_BUFFER_AVAILABLE
onImageAvailable()
acquireLatestImage() -> OK

第二次调用acquireLatestImage()将获得NO_BUFFER_AVAILABLE,因为前一次调用丢弃了所有其他缓冲区,并且在第二次调用之前没有新图像到达。

如果您希望始终看到所有图像缓冲区,则使用acquireNextImage(),它不会丢弃较旧的缓冲区,而只返回队列中的下一个缓冲区。

代码语言:javascript
复制
onImageAvailable()
onImageAvailable()
onImageAvailable()
acquireNextImage() -> OK
acquireNextImage() -> OK
acquireNextImage() -> OK
acquireNextImage() -> NO_BUFFER_AVAILABLE
onImageAvailable()
acquireNextImage() -> OK
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69718611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档