void ToggleCaptureMode (UISegmentedControl captureModeControl)
{
if (captureModeControl.SelectedSegment == (int)CaptureMode.Photo) {
RecordButton.Enabled = false;
sessionQueue.DispatchAsync (() => {
// 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.
session.BeginConfiguration ();
session.RemoveOutput (MovieFileOutput);
session.SessionPreset = AVCaptureSession.PresetPhoto;
session.CommitConfiguration ();
MovieFileOutput = null;
if (photoOutput.IsLivePhotoCaptureSupported) {
photoOutput.IsLivePhotoCaptureEnabled = true;
DispatchQueue.MainQueue.DispatchAsync (() => {
LivePhotoModeButton.Enabled = true;
LivePhotoModeButton.Hidden = false;
});
}
});
} else if (captureModeControl.SelectedSegment == (int)CaptureMode.Movie) {
LivePhotoModeButton.Hidden = true;
sessionQueue.DispatchAsync (() => {
var output = new AVCaptureMovieFileOutput ();
if (session.CanAddOutput (output)) {
session.BeginConfiguration ();
session.AddOutput (output);
session.SessionPreset = AVCaptureSession.PresetHigh;
var connection = output.ConnectionFromMediaType (AVMediaType.Video);
if (connection != null) {
if (connection.SupportsVideoStabilization)
connection.PreferredVideoStabilizationMode = AVCaptureVideoStabilizationMode.Auto;
}
session.CommitConfiguration ();
MovieFileOutput = output;
DispatchQueue.MainQueue.DispatchAsync (() => {
RecordButton.Enabled = true;
});
}
});
}
}