【发布时间】:2014-12-28 06:50:19
【问题描述】:
我遇到了关注 Nexus 6 缓慢的问题。 我开发相机应用程序,现在我正在使用 camera2 API。
针对应用需求,我们创建具有 2 个表面的预览请求 - SurfaceView(取景器) - YUV ImageReader 表面(在直方图计算中使用数据)
还有一个关键点!如果仅添加取景器表面,则对焦会正常进行。但是对于 2,随着镜头移动的视觉步骤,这些表面聚焦发生得非常缓慢!
代码非常标准,根据谷歌文档编写:
mImageReaderPreviewYUV = ImageReader.newInstance(previewWidth, previewHeight, ImageFormat.YUV_420_888, 2);
previewRequestBuilder = camDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
previewRequestBuilder.addTarget(getCameraSurface()); //Add surface of SurfaceView
previewRequestBuilder.addTarget(mImageReaderPreviewYUV); //Add ImageReader
mCaptureSession.setRepeatingRequest(previewRequestBuilder.build(), captureCallback null);
【问题讨论】:
-
如何计算直方图?如果回调需要很长时间,您可能会减慢相机速度。我看到您为
mImageReaderPreviewYUV指定了 2 个缓冲区 - 也许在您持有这两个图像时焦点卡住了? -
直方图不影响相机 - 出于测试目的已禁用。并且对所有其他操作进行了注释,以使捕获回调绝对为空。缓冲区的数量也减少到 1。
-
当缓冲区计数为 1 时,您实质上是在告诉 Android 相机在捕获回调时不要带来新帧。您可以记录回调并尝试查看它们与自动对焦慢步之间是否存在相关性。
标签: android android-camera android-5.0-lollipop