Nexus 5x 上出现非常奇怪的问题。
我有一组用于相机应用程序的普通表面: - 用于屏幕预览的 SurfaceHolder - YUV 格式的 ImageReader 用于预览帧数据 - YUV 或 JPEG 格式的 ImageReader(取决于所选的内部应用程序模式)用于捕获静态图像。
当使用 JPEG ImageReader 配置 captureSession 时,一切正常,屏幕预览正常显示。 但是,当使用 YUV ImageReader 时,根据构图,屏幕预览可能会曝光过度。 我必须注意,曝光测光区域设置为传感器的整个 activeRect。
查看以下屏幕截图:
最佳答案
终于找到这个bug的原因了!
您会感到惊讶,但该错误是由捕获 session 的表面列表强制的。更具体地说,是表面到列表中的添加顺序! 如果首先添加相机预览表面 (SurfaceHolder),则一切正常:
// prepare list of surfaces to be used in capture requests
List<Surface> sfl = new ArrayList<Surface>();
sfl.add(mCameraSurface); // surface for viewfinder preview
sfl.add(mPreviewImageReader.getSurface()); //preview data
sfl.add(mImageReader.getSurface()); // surface for image capture
// configure camera with all the surfaces to be ever used
camDevice.createCaptureSession(sfl, new sessionListener(), null);
但是当它最后添加时,我们遇到了这个错误 - 预览曝光过度!
// prepare list of surfaces to be used in capture requests
List<Surface> sfl = new ArrayList<Surface>();
sfl.add(mPreviewImageReader.getSurface()); //preview data
sfl.add(mImageReader.getSurface()); // surface for image capture
sfl.add(mCameraSurface); // surface for viewfinder preview
// configure camera with all the surfaces to be ever used
camDevice.createCaptureSession(sfl, new sessionListener(), null);
这让我大吃一惊!
关于安卓camera2曝光问题。使用 YUV ImageReader 时预览会曝光过度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36859673/