void ConfigureManualHUD ()
{
// Manual focus controls
focusModes = new AVCaptureFocusMode [] { AVCaptureFocusMode.ContinuousAutoFocus, AVCaptureFocusMode.Locked };
FocusModeControl.Enabled = VideoDevice != null;
FocusModeControl.SelectedSegment = Array.IndexOf (focusModes, VideoDevice.FocusMode);
foreach (var mode in focusModes)
FocusModeControl.SetEnabled (VideoDevice.IsFocusModeSupported (mode), Array.IndexOf (focusModes, mode));
LensPositionSlider.MinValue = 0;
LensPositionSlider.MaxValue = 1;
LensPositionSlider.Value = VideoDevice.LensPosition;
LensPositionSlider.Enabled = (VideoDevice != null && VideoDevice.FocusMode == AVCaptureFocusMode.Locked && VideoDevice.IsFocusModeSupported (AVCaptureFocusMode.Locked));
// Manual exposure controls
exposureModes = new AVCaptureExposureMode [] {
AVCaptureExposureMode.AutoExpose,
AVCaptureExposureMode.Locked,
AVCaptureExposureMode.Custom
};
ExposureModeControl.Enabled = VideoDevice != null;
ExposureModeControl.SelectedSegment = Array.IndexOf (exposureModes, VideoDevice.ExposureMode);
foreach (var mode in exposureModes)
ExposureModeControl.SetEnabled (VideoDevice.IsExposureModeSupported (mode), Array.IndexOf (exposureModes, mode));
// Use 0-1 as the slider range and do a non-linear mapping from the slider value to the actual device exposure duration
ExposureDurationSlider.MinValue = 0;
ExposureDurationSlider.MaxValue = 1;
double exposureDurationSeconds = VideoDevice.ExposureDuration.Seconds;
double minExposureDurationSeconds = Math.Max (VideoDevice.ActiveFormat.MinExposureDuration.Seconds, ExposureMinDuration);
double maxExposureDurationSeconds = VideoDevice.ActiveFormat.MaxExposureDuration.Seconds;
// Map from duration to non-linear UI range 0-1
double p = (exposureDurationSeconds - minExposureDurationSeconds) / (maxExposureDurationSeconds - minExposureDurationSeconds); // Scale to 0-1
ExposureDurationSlider.Value = (float)Math.Pow (p, 1 / ExposureDurationPower); // Apply inverse power
ExposureDurationSlider.Enabled = (VideoDevice != null && VideoDevice.ExposureMode == AVCaptureExposureMode.Custom);
ISOSlider.MinValue = VideoDevice.ActiveFormat.MinISO;
ISOSlider.MaxValue = VideoDevice.ActiveFormat.MaxISO;
ISOSlider.Value = VideoDevice.ISO;
ISOSlider.Enabled = (VideoDevice.ExposureMode == AVCaptureExposureMode.Custom);
ExposureTargetBiasSlider.MinValue = VideoDevice.MinExposureTargetBias;
ExposureTargetBiasSlider.MaxValue = VideoDevice.MaxExposureTargetBias;
ExposureTargetBiasSlider.Value = VideoDevice.ExposureTargetBias;
ExposureTargetBiasSlider.Enabled = (VideoDevice != null);
ExposureTargetOffsetSlider.MinValue = VideoDevice.MinExposureTargetBias;
ExposureTargetOffsetSlider.MaxValue = VideoDevice.MaxExposureTargetBias;
ExposureTargetOffsetSlider.Value = VideoDevice.ExposureTargetOffset;
ExposureTargetOffsetSlider.Enabled = false;
// Manual white balance controls
whiteBalanceModes = new AVCaptureWhiteBalanceMode [] {
AVCaptureWhiteBalanceMode.ContinuousAutoWhiteBalance,
AVCaptureWhiteBalanceMode.Locked
};
WhiteBalanceModeControl.Enabled = (VideoDevice != null);
WhiteBalanceModeControl.SelectedSegment = Array.IndexOf (whiteBalanceModes, VideoDevice.WhiteBalanceMode);
foreach (var mode in whiteBalanceModes)
WhiteBalanceModeControl.SetEnabled (VideoDevice.IsWhiteBalanceModeSupported (mode), Array.IndexOf (whiteBalanceModes, mode));
AVCaptureWhiteBalanceGains whiteBalanceGains = VideoDevice.DeviceWhiteBalanceGains;
AVCaptureWhiteBalanceTemperatureAndTintValues whiteBalanceTemperatureAndTint = VideoDevice.GetTemperatureAndTintValues (whiteBalanceGains);
TemperatureSlider.MinValue = 3000;
TemperatureSlider.MaxValue = 8000;
TemperatureSlider.Value = whiteBalanceTemperatureAndTint.Temperature;
TemperatureSlider.Enabled = (VideoDevice != null && VideoDevice.WhiteBalanceMode == AVCaptureWhiteBalanceMode.Locked);
TintSlider.MinValue = -150;
TintSlider.MaxValue = 150;
TintSlider.Value = whiteBalanceTemperatureAndTint.Tint;
TintSlider.Enabled = (VideoDevice != null && VideoDevice.WhiteBalanceMode == AVCaptureWhiteBalanceMode.Locked);
LensStabilizationControl.Enabled = (VideoDevice != null);
LensStabilizationControl.SelectedSegment = 0;
LensStabilizationControl.SetEnabled (photoOutput.IsLensStabilizationDuringBracketedCaptureSupported, 1);
RawControl.Enabled = (VideoDevice != null);
RawControl.SelectedSegment = 0;
}