我正在开发一个android相机应用程序,我想在拍摄照片之前传递捕获大小以配置相机。
这是我的代码:
try {
mCaptureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
mCaptureRequestBuilder.addTarget(previewSurface);
InputConfiguration inputConfiguration = new InputConfiguration(1920, 1080, ImageFormat.JPEG); //error here.
cameraDevice.createReprocessableCaptureSession(inputConfiguration, Arrays.asList(previewSurface), new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
try {
cameraCaptureSession.setRepeatingRequest(mCaptureRequestBuilder.build(), null, handler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
Toast.makeText(getApplicationContext(), "Camera Preview Failed!!", Toast.LENGTH_SHORT).show();
}
}, null);
}
因此,我正在尝试将输入配置传递给此处的相机。
我的问题是我在InputConfiguration
行上遇到了错误。
这是我的错误:
java.lang.IllegalArgumentException: input format 256 is not valid
我尝试了很多不同的ImageFormat
,例如JPEG,UNKNOWN,NV21等。没用
可以帮助我解决此错误,并且如果我的方法在与相机交互时出错,也可以告诉我。
答案 0 :(得分:0)
您正在使用TEMPLATE_PREVIEW,它不支持 ImageFormat.JPEG 。
Camera2 的预览命令支持YUV 420,like this:
InputConfiguration inputConfiguration = new InputConfiguration(1920, 1080, ImageFormat.YUV_420_888);
答案 1 :(得分:0)
仅在reprocessing用例中使用输入配置,在这些用例中,您具有捕获部分处理的帧的应用程序级循环缓冲区。
当用户按下快门按钮时,您会将捕获的帧之一发送回相机设备进行最终处理。输入配置用于选择返回相机的路径的大小和格式。
对于简单的捕获应用程序,您只关心输出配置。
答案 2 :(得分:0)
这里描述了另一个可悲的情况:https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#REPROCESS_MAX_CAPTURE_STALL
检查相机是否支持后处理,否则您将根本不会通过“输入格式无效”,因为不允许进行后处理。
此外,如果缺少此键值,则可能表明Yuv重新处理不可用:https://developer.android.com/reference/android/hardware/camera2/CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING