Android アプリで camera2 API を使用しており、シャッター速度を手動で制御したいと考えています。これは私がシャッタースピードを設定する方法です:
protected void setShutterSpeed(long exposureTime) {
if (null == cameraDevice) {
Log.e(TAG, "updatePreview error, return");
}
captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
captureRequestBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, 100);
captureRequestBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, exposureTime);
try {
cameraCaptureSessions.setRepeatingRequest(captureRequestBuilder.build(), null, mBackgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
これは私が CaptureRequestBuilder を作成する方法です:
captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
captureRequestBuilder.addTarget(surface);
captureRequestBuilder.addTarget(imageReader.getSurface());
cameraDevice.createCaptureSession(Arrays.asList(surface, imageReader.getSurface()), new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
//The camera is already closed
if (null == cameraDevice) {
return;
}
// When the session is ready, we start displaying the preview.
cameraCaptureSessions = cameraCaptureSession;
updatePreview();
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
Toast.makeText(AndroidCameraApi.this, "Configuration change", Toast.LENGTH_SHORT).show();
}
}, null);
問題は、シャッター速度を設定すると、1 秒または 1 フレームのみに設定されてからリセットされることです。ただし、ImageReaders サーフェスを CaptureRequestBuilder ターゲット出力に追加しないと、TexturePreview サーフェスに対してのみうまく設定される場合があります。したがって、問題は ImageReader にあると思います。
この問題の解決策を知っている人はいますか?
PS ISO や露出補正などのその他の設定は、両方の面でうまく機能します。