void ChangeCaptureMode (UISegmentedControl captureModeControl)
{
if (captureModeControl.SelectedSegment == (int)CaptureMode.Photo) {
RecordButton.Enabled = false;
// Remove the AVCaptureMovieFileOutput from the session because movie recording is not supported with AVCaptureSessionPresetPhoto. Additionally, Live Photo
// capture is not supported when an AVCaptureMovieFileOutput is connected to the session.
sessionQueue.DispatchAsync (() => {
Session.BeginConfiguration ();
Session.RemoveOutput (movieFileOutput);
Session.SessionPreset = AVCaptureSession.PresetPhoto;
Session.CommitConfiguration ();
movieFileOutput = null;
});
} else if (captureModeControl.SelectedSegment == (int)CaptureMode.Movie) {
sessionQueue.DispatchAsync (() => {
var mfo = new AVCaptureMovieFileOutput ();
if (Session.CanAddOutput (mfo)) {
Session.BeginConfiguration ();
Session.AddOutput (mfo);
Session.SessionPreset = AVCaptureSession.PresetHigh;
AVCaptureConnection connection = mfo.ConnectionFromMediaType (AVMediaType.Video);
if (connection.SupportsVideoStabilization)
connection.PreferredVideoStabilizationMode = AVCaptureVideoStabilizationMode.Auto;
Session.CommitConfiguration ();
movieFileOutput = mfo;
DispatchQueue.MainQueue.DispatchAsync (() => {
RecordButton.Enabled = true;
});
}
});
}
}