Camera 2 APIのsetRepeatingRequest()
モードを使用して1fpsのキャプチャを行いたいと思います。Androidカメラ2 API 1fps setRepeatingRequestを使用して
CONTROL_AE_MODE
をCONTROL_AE_MODE_OFF
とSENSOR_FRAME_DURATION
から1
に設定しました。しかし、私はまだ以下のコードで20fpsの非常に高いフレームレートを受け取ります。
キャプチャリクエストテンプレートをTEMPLATE_PREVIEW
からTEMPLATE_STILL_CAPTURE
に変更してみました。 setRepeatingRequest()を使用して1fpsを達成するにはどうすればよいですか?
CaptureRequest.Builder requestBuilder
= cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
requestBuilder.addTarget(imageReader.getSurface());
cameraDevice.createCaptureSession(Collections.singletonList(imageReader.getSurface()),
new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
// The camera is already closed
if (cameraDevice == null) {
return;
}
captureSession = cameraCaptureSession;
try {
requestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
requestBuilder.set(CaptureRequest.SENSOR_FRAME_DURATION, 1L);
CameraCaptureSession.CaptureCallback captureCallback
= new CameraCaptureSession.CaptureCallback() {
@Override
public void onCaptureCompleted(@NonNull CameraCaptureSession session,
@NonNull CaptureRequest request,
@NonNull TotalCaptureResult result) {
}
};
captureSession.setRepeatingRequest(
requestBuilder.build(), captureCallback, callbackHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onConfigureFailed(
@NonNull CameraCaptureSession cameraCaptureSession) {
}
}, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
残念ながら、setPreviewFpsRange()はサポートされている範囲の1つしか選択できないため、これを簡単にしません。ほとんどのデバイスでは、サポートされているフレームレートとして1fpsが表示されません。 –
@AlexCohnあなたはまったく正しいです。しかし、SENSOR_FRAME_DURATIONを正しく使用する簡単な方法では、トリックを行う必要があります – webo80
必ずしもそうではありません。 [SENSOR_INFO_MAX_FRAME_DURATION](https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#SENSOR_INFO_MAX_FRAME_DURATION)に何が伝えられるのかわかりません。フル機能のデバイスでは最低100ミリ秒になることが保証されていますが、他のデバイスに対する保証はありません。** null **でも可能です。 –