我的Android应用程序捕获预览帧。框架必须不模糊。 这需要限制传感器的曝光时间。例如,我希望曝光时间小于10毫秒,白平衡调整器仅使用ISO。
我找到的唯一解决方案是修复SENSOR_EXPOSURE_TIME
和SENSOR_SENSITIVITY
:
public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result)
{
// measure ISO and exposure
mExposure = result.get(CaptureResult.SENSOR_EXPOSURE_TIME);
mSensitivity = result.get(CaptureResult.SENSOR_SENSITIVITY);
...
}
void prepareCapturing()
{
// setting the necessary values of ISO and exposure
if (mExposure > 10.0 * 1e+6)
{
double exposure = 10.0 * 1e+6;
double sens = mExposure * mSensitivity / exposure;
mPreviewRequestBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long)exposure);
mPreviewRequestBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, (int)sens);
}
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
setRepeatingRequest();
}
在运行预览帧分析算法之前,我调用方法prepareCapturing
。
此方法有效,但需要禁用android.control.aeMode
,因此白平衡将会关闭。
此外,我尝试使用标准场景模式,如CONTROL_SCENE_MODE_ACTION
和CONTROL_SCENE_MODE_SPORTS
,但曝光时间大约为40毫秒。
问题:是否可以使用camera2 intereace来限制传感器的曝光时间,s.t。白平衡是否活跃?
答案 0 :(得分:1)
要求自动曝光保持低于某个最大曝光时间的主要API是CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE控件。例如,如果将其设置为(30,30),则相机设备可能不会使用超过1/30秒的曝光时间。
设备的可用范围列表由CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES提供。
没有直接控制自己设置最大/最小曝光值,如果没有可用的目标FPS范围限制曝光时间,你唯一的另一个选择是使用手动曝光控制(如果支持)。
遗憾的是,禁用AWB是否取决于设备 - 在某些设备上,自动曝光例程的输出对于白平衡算法的工作至关重要。
答案 1 :(得分:0)
查看Camera参数的setExposureCompensation()方法。
答案 2 :(得分:0)
您可以使用密钥SENSOR_INFO_EXPOSURE_TIME_RANGE
查看下一个方法:
/**
* Get exposure time range.
*
* @param cameraCharacteristics The properties of the camera.
* @return Long exposure compensation range.
* @see <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#SENSOR_INFO_EXPOSURE_TIME_RANGE">
* CameraCharacteristics.SENSOR_INFO_EXPOSURE_TIME_RANGE</a>
*/
private static Range<Long> getExposureTimeRange(CameraCharacteristics cameraCharacteristics) {
return cameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_EXPOSURE_TIME_RANGE);
}