Android Camera2 - CONTROL_AE_REGIONS无法在Samsung设备上运行

时间:2017-06-02 09:11:01

标签: android camera2 metering exposure

使用Android Camera2时,我想在计算曝光时使用区域忽略图像的前25%。我用这个:

// Compute the metering rectangle to ignore the top 25% of the picture:
Rect newRect = new Rect(mActiveArraySize.left, (int) (mActiveArraySize.height() * 0.25), mActiveArraySize.right, mActiveArraySize.bottom);
MeteringRectangle meteringRectangle = new MeteringRectangle(newRect, 1);
MeteringRectangle[] meteringRectangleArr = { meteringRectangle };

// Set the metering rectangle:
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_REGIONS, meteringRectangleArr);

// Set the request:
try { mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), null, mBackgroundHandler); }
catch (CameraAccessException e) { e.printStackTrace(); }

它正在使用我的Nexus 5X。但是在三星Galaxy Note 5上(而且,我想,在所有三星设备上),它不起作用,我的区域被忽略了。

我看到了这个问题:Android Camera2 API - Set AE-regions not working,操作说他通过使用Samsung SDK设法让它工作。我真的更愿意避免这种情况。

有人设法让AE区域与三星设备配合使用吗?

1 个答案:

答案 0 :(得分:0)

最近我遇到了同样的问题,终于找到了一个帮助我的解决方案。

我需要做的就是从活动传感器矩形的边缘开始步长1像素。在您的示例中,而不是此矩形:

Rect newRect = new Rect(mActiveArraySize.left,
                        (int) (mActiveArraySize.height() * 0.25),
                        mActiveArraySize.right,
                        mActiveArraySize.bottom);

我会用这个:

Rect newRect = new Rect(mActiveArraySize.left + 1,
                        (int)(mActiveArraySize.height() * 0.25),
                        mActiveArraySize.right + 1,
                        mActiveArraySize.bottom - 2);

我从底部减去2,因为有源数组的最底部像素为mActiveArraySize.height() - 1,我需要再减去一个像素。

似乎很多供应商都没有很好地实现documentation

的这一部分
  

如果计量区域位于捕获结果元数据中返回的已使用android.scaler.cropRegion之外,则摄像机设备将忽略裁剪区域外的部分,并仅将结果矩形输出为结果元数据中的计量区域。如果该区域完全位于裁剪区域之外,则该区域将被忽略,并且不会在结果元数据中报告。