我正在用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,则某些镜像会在其对应的回调执行之前返回到系统
有没有人能解释一下什么时候会发生这种情况,以及可能的解决方案。
发布于 2021-10-28 14:17:21
如果已经将多个图像捕获到AImageReader中,则调用AImageReader_acquireLatestImage将丢弃除最新图像之外的所有图像,然后返回最新图像。
所以你会得到一个类似这样的序列:
onImageAvailable()
onImageAvailable()
onImageAvailable()
acquireLatestImage() -> OK
acquireLatestImage() -> NO_BUFFER_AVAILABLE
acquireLatestImage() -> NO_BUFFER_AVAILABLE
onImageAvailable()
acquireLatestImage() -> OK第二次调用acquireLatestImage()将获得NO_BUFFER_AVAILABLE,因为前一次调用丢弃了所有其他缓冲区,并且在第二次调用之前没有新图像到达。
如果您希望始终看到所有图像缓冲区,则使用acquireNextImage(),它不会丢弃较旧的缓冲区,而只返回队列中的下一个缓冲区。
onImageAvailable()
onImageAvailable()
onImageAvailable()
acquireNextImage() -> OK
acquireNextImage() -> OK
acquireNextImage() -> OK
acquireNextImage() -> NO_BUFFER_AVAILABLE
onImageAvailable()
acquireNextImage() -> OKhttps://stackoverflow.com/questions/69718611
复制相似问题