录制时更改ISO值-Android Camera2
我正试图实现以下示例中的视频捕获应用程序 我可以更改ISO值,更新预览并使用该值制作视频,但我也想让我的用户在录制时更改ISO值,而不中断视频,但我无法找到方法。录制时更改ISO值-Android Camera2,android,android-camera,android-mediarecorder,android-camera2,Android,Android Camera,Android Mediarecorder,Android Camera2,我正试图实现以下示例中的视频捕获应用程序 我可以更改ISO值,更新预览并使用该值制作视频,但我也想让我的用户在录制时更改ISO值,而不中断视频,但我无法找到方法。 这是我用来开始录制的代码: private void startRecording() { final Camera2Controller me = this; try { this.mediaRecorder = this.prepareMediaRecorder(); // Nothing spec
这是我用来开始录制的代码:
private void startRecording() {
final Camera2Controller me = this;
try {
this.mediaRecorder = this.prepareMediaRecorder(); // Nothing special about it
final CaptureRequest.Builder requestBuilder = this.getCameraDevice().createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
this.updateRequestForCapture(requestBuilder);
ArrayList<Surface> surfaces = new ArrayList<>();
surfaces.add(this.surfaceHolder.getSurface());
surfaces.add(this.mediaRecorder.getSurface());
for (Surface target : surfaces) {
requestBuilder.addTarget(target);
}
this.captureRequest = requestBuilder.build();
this.getCameraDevice().createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession session) {
try {
me.setCaptureSession(session);
session.setRepeatingRequest(me.captureRequest, null, null);
me.mediaRecorder.start();
me._isRecording = true;
}
catch (Exception e) {
try {
me._isRecording = false;
me.getCaptureSession().stopRepeating();
me.getCaptureSession().abortCaptures();
me.getCaptureSession().close();
}
catch (CameraAccessException cae) {
cae.printStackTrace();
}
finally {
me.mediaRecorder.reset();
me.mediaRecorder.release();
me.mediaRecorder = null;
}
}
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession session) {
me._isRecording = false;
}
}, this);
}
catch (CameraAccessException e) {
me._isRecording = false;
}
}
public void updateRequestForCapture(CaptureRequest.Builder requestBuilder) {
requestBuilder.set(CaptureRequest.CONTROL_MODE, this.ControlMode);
requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, this.AEMode);
requestBuilder.set(CaptureRequest.CONTROL_AWB_LOCK, this.WhiteBalanceLock);
requestBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, this.ISO);
requestBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, this.ExposureTime);
requestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, this.WhiteBalanceMode);
requestBuilder.set(CaptureRequest.CONTROL_SCENE_MODE, this.SceneMode);
requestBuilder.set(CaptureRequest.CONTROL_AF_MODE, this.AFMode);
requestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, this.AFTrigger);
requestBuilder.set(CaptureRequest.COLOR_CORRECTION_MODE, this.ColorCorrectionMode);
requestBuilder.set(CaptureRequest.COLOR_CORRECTION_TRANSFORM, this.ColorSpaceTransform);
requestBuilder.set(CaptureRequest.COLOR_CORRECTION_GAINS, this.ColorCorrectionGain);
}
private void startRecording(){
最终摄像机2控制器me=此;
试一试{
this.mediaRecorder=this.prepareMediaRecorder();//没什么特别的
final CaptureRequest.Builder requestBuilder=this.getCameraDevice().createCaptureRequest(CameraDevice.TEMPLATE\u记录);
此.updateRequestForCapture(requestBuilder);
ArrayList曲面=新的ArrayList();
添加(this.surfaceHolder.getSurface());
添加(this.mediaRecorder.getSurface());
用于(曲面目标:曲面){
requestBuilder.addTarget(目标);
}
this.captureRequest=requestBuilder.build();
this.getCameraDevice().createCaptureSession(曲面,新的CameraCaptureSession.StateCallback()){
@凌驾
未配置公共void(@NonNull CameraCaptureSession会话){
试一试{
me.setCaptureSession(会话);
session.setRepeatingRequest(me.captureRequest,null,null);
me.mediaRecorder.start();
我.\u isRecording=true;
}
捕获(例外e){
试一试{
me.\u isRecording=false;
me.getCaptureSession().stopRepeating();
me.getCaptureSession().abortCaptures();
me.getCaptureSession().close();
}
捕捉(CameraAccessException cae){
printStackTrace();
}
最后{
me.mediaRecorder.reset();
me.mediaRecorder.release();
me.mediaRecorder=null;
}
}
}
@凌驾
已配置公用void onconfig(@NonNull CameraCaptureSession会话){
me.\u isRecording=false;
}
},这个);
}
捕获(CameraAccessE异常){
me.\u isRecording=false;
}
}
public void updateRequestForCapture(CaptureRequest.Builder-requestBuilder){
set(CaptureRequest.CONTROL\u模式,this.ControlMode);
set(CaptureRequest.CONTROL_AE_模式,this.AEMode);
requestBuilder.set(CaptureRequest.CONTROL\u AWB\u LOCK,this.WhiteBalanceLock);
requestBuilder.set(CaptureRequest.SENSOR\u灵敏度,this.ISO);
requestBuilder.set(CaptureRequest.SENSOR\u EXPOSURE\u TIME,this.ExposureTime);
requestBuilder.set(CaptureRequest.CONTROL\u AWB\u模式,this.WhiteBalanceMode);
set(CaptureRequest.CONTROL\u SCENE\u模式,this.SceneMode);
set(CaptureRequest.CONTROL\u AF\u模式,this.AFMode);
set(CaptureRequest.CONTROL\u AF\u触发器,this.AFTrigger);
set(CaptureRequest.COLOR\u CORRECTION\u模式,this.ColorCorrectionMode);
set(CaptureRequest.COLOR\u CORRECTION\u TRANSFORM,this.colorspace TRANSFORM);
requestBuilder.set(CaptureRequest.COLOR\u CORRECTION\u增益,this.ColorCorrectionGain);
}
有人能给我建议如何解决这个问题吗