Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
录制时更改ISO值-Android Camera2_Android_Android Camera_Android Mediarecorder_Android Camera2 - Fatal编程技术网

录制时更改ISO值-Android Camera2

录制时更改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

我正试图实现以下示例中的视频捕获应用程序

我可以更改ISO值,更新预览并使用该值制作视频,但我也想让我的用户在录制时更改ISO值,而不中断视频,但我无法找到方法。
这是我用来开始录制的代码:

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);
}
有人能给我建议如何解决这个问题吗