我开发相机应用程序,现在我正在使用camera2 API.
对于应用程序需求,我们使用2个曲面创建预览请
– SurfaceVIEw(取景器)
– YUV ImageReader表面(使用hstogram计算中的数据)
还有一个关键点!如果只添加取景器表面,则会正常进行对焦.但随着镜头移动的视觉步骤,这些表面聚焦发生得很慢!
代码非常标准,根据谷歌文档编写:
mImageReaderPrevIEwYUV = ImageReader.newInstance(prevIEwWIDth,prevIEwHeight,ImageFormat.YUV_420_888,2);prevIEwRequestBuilder = camDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);prevIEwRequestBuilder.addTarget(getCameraSurface()); //Add surface of SurfaceVIEwprevIEwRequestBuilder.addTarget(mImageReaderPrevIEwYUV); //Add ImageReadermCaptureSession.setRepeatingRequest(prevIEwRequestBuilder.build(),captureCallback null);解决方法 系统logcat是否显示有关缓冲区不可用的任何警告?
预览帧速率是慢还是平滑(~30fps)但是聚焦只是奇怪的工作?
如果是前者,您可能无法以30 fps的速度将Image对象返回到ImageReader(通过使用它们关闭它们),因此相机设备缺乏填充缓冲区,并且无法保持30fps预览.
要对此进行测试,请实现最小的ImageReaderListener.onImageAvailable(ImageReader reader)方法,该方法只是立即返回图像:
public class TestimageListener extends ImageReaderListener { public voID onImageAvailable(ImageReader reader) { Image img = reader.acquireNextimage(); img.close(); } } ... mImageReaderPrevIEwYUV.setonImageAvailableListener(new TestimageListener());
如果这样可以让您获得流畅的预览,那么您的图像处理速度太慢.作为一种解决方案,您应该增加ImageReader中缓冲区的数量,并使用reader.acquireLatestimage()来删除旧缓冲区,并且每次计算直方图时只处理最新的图像.
总结以上是内存溢出为你收集整理的android – 使用camera2 API慢慢关注Nexus 6全部内容,希望文章能够帮你解决android – 使用camera2 API慢慢关注Nexus 6所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)