Android camera2曝光问题。在使用YUV ImageReader的情况下,预览会曝光过度

时间:2016-04-26 08:41:42

标签: android image android-camera nexus-5 android-camera2

非常奇怪的问题建立在Nexus 5x上。

我有适用于相机应用的普通表面: - SurfaceHolder用于屏幕预览 - YUV格式的ImageReader,用于预览帧数据 - YUV或JPEG格式的ImageReader(取决于所选的内部应用程序模式),用于捕获静止图像。

当JPEG ImageReader用于配置captureSession时,一切正常,屏幕预览通常会曝光。 但是当使用YUV ImageReader时,屏幕预览可能会过度依赖于构图。 我必须注意,曝光测光区域设置为传感器的整个activeRect。

在此屏幕截图中查看:

  1. 正常曝光预览。使用JPEG ImageReader。 NORMAL EXPOSED PREVIEW. JPEG ImageReader is used

  2. 曝光过度的预览。使用YUV ImageReader。 enter image description here

  3. 3和4。 JPEG和YUV ImageReaders。一点点其他组成,现在预览通常暴露两种情况。 enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

最后我找到了那个错误的原因!

您会感到惊讶,但是捕获会话的表面列表会强制该错误。更具体地说,表面的添加顺序进入列表! 如果相机预览表面(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);

它引起了我的注意!