private static void WriteProperty(VideoCaptureDevice device, VideoProcAmpProperty property, CameraProperty value) { VideoProcAmpFlags flags = value.Automatic ? VideoProcAmpFlags.Auto : VideoProcAmpFlags.Manual; int v = int.Parse(value.CurrentValue, CultureInfo.InvariantCulture); device.SetVideoProperty(property, v, flags); }
/// <summary> /// 设置饱和度 /// </summary> /// <param name="SaturationValue">饱和度 0到 100</param> /// <returns></returns> public int SetSaturationValue(int SaturationValue) { int iResult = 0; IAMVideoProcAmp videoProcAmp = theDevice as IAMVideoProcAmp; if (videoProcAmp == null) { iResult = -1; return(iResult); } int val; int min; int max; int step; int defaultValue; VideoProcAmpFlags flags = VideoProcAmpFlags.Manual; //设置饱和度 if (SaturationValue != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Saturation, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * SaturationValue / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.Saturation, SaturationValue, flags); } } return(iResult); }
/// <summary> /// /// </summary> /// <param name="dsDevice"></param> /// <param name="prop"></param> /// <returns></returns> public int GetVideoControl(DsDevice dsDevice, VideoProcAmpProperty prop) { IFilterGraph2 filterGraph = new FilterGraph() as IFilterGraph2; IBaseFilter capFilter = null; int retVal = 0; try { // add the video input device int hr = filterGraph.AddSourceFilterForMoniker(dsDevice.Mon, null, "Source Filter", out capFilter); DsError.ThrowExceptionForHR(hr); IAMVideoProcAmp videoControl = capFilter as IAMVideoProcAmp; int min, max, step, default_val; VideoProcAmpFlags flag = 0; videoControl.GetRange(prop, out min, out max, out step, out default_val, out flag); videoControl.Get(prop, out retVal, out flag); } catch (Exception ex) { Console.WriteLine(ex.Message); } return(retVal); }
/// <summary> /// 设置亮度 /// </summary> /// <param name="lightValue">亮度值0 到 100</param> /// <returns></returns> public int SetLightValue(int lightValue) { int iResult = 0; IAMVideoProcAmp videoProcAmp = theDevice as IAMVideoProcAmp; if (videoProcAmp == null) { iResult = -1; return(iResult); } int val; int min; int max; int step; int defaultValue; VideoProcAmpFlags flags = VideoProcAmpFlags.Manual; // 设置亮度 if (lightValue != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Brightness, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Brightness, out val, out flags); //val = min + (max - min) * lightValue / 255; iResult = videoProcAmp.Set(VideoProcAmpProperty.Brightness, lightValue, flags); } } return(iResult); }
private static void WriteProperty(VideoCaptureDevice device, VideoProcAmpProperty property, CameraProperty value) { if (!value.Supported) { return; } try { VideoProcAmpFlags flags = value.Automatic ? VideoProcAmpFlags.Auto : VideoProcAmpFlags.Manual; int v; bool parsed = int.TryParse(value.CurrentValue, NumberStyles.Any, CultureInfo.InvariantCulture, out v); if (parsed) { device.SetVideoProperty(property, v, flags); } else { log.ErrorFormat("Could not parse property {0}, value: {1}.", value.Identifier, value.CurrentValue); } } catch (Exception e) { log.ErrorFormat("Could not write property {0}. {1}.", value.Identifier, e.Message); } }
public void SetBrightness(int val, VideoProcAmpFlags flags = VideoProcAmpFlags.Manual) { if (_values["Brightness"] != val) { _videoSource.SetVideoProperty(VideoProcAmpProperty.Brightness, val, flags); _values["Brightness"] = val; } }
/// <summary> /// 获取当前对比度值 /// </summary> /// <returns></returns> public int GetContrastValue() { int ContrastValue = 0; IAMVideoProcAmp videoProcAmp = theDevice as IAMVideoProcAmp; VideoProcAmpFlags flags = VideoProcAmpFlags.Manual; videoProcAmp.Get(VideoProcAmpProperty.Contrast, out ContrastValue, out flags); return(ContrastValue); }
/// <summary> /// 获取当前饱和度值 /// </summary> /// <returns></returns> public int GetSaturationValue() { int SaturationValue = 0; IAMVideoProcAmp videoProcAmp = theDevice as IAMVideoProcAmp; VideoProcAmpFlags flags = VideoProcAmpFlags.Manual; videoProcAmp.Get(VideoProcAmpProperty.Saturation, out SaturationValue, out flags); return(SaturationValue); }
/// <summary> /// 获取当前亮度值 /// </summary> /// <returns></returns> public int GetLightValue() { int LightValue = 0; IAMVideoProcAmp videoProcAmp = theDevice as IAMVideoProcAmp; VideoProcAmpFlags flags = VideoProcAmpFlags.Manual; videoProcAmp.Get(VideoProcAmpProperty.Brightness, out LightValue, out flags); return(LightValue); }
/// <summary> /// Writes the Capture part of the graph to the configuration /// </summary> /// <param name="writer">Writer</param> public void WriteGraph(XmlWriter writer) { writer.WriteStartElement("capture"); //<capture> writer.WriteStartElement("videoCapture"); //<videoCapture> writer.WriteElementString("name", _name ?? ""); writer.WriteElementString("videoIn", _videoIn.ToString()); if (_name != null && _name.Equals(_audioCaptureName)) { writer.WriteElementString("audioIn", _audioIn.ToString()); } writer.WriteStartElement("videoStandard"); //<videoStandard> writer.WriteElementString("available", ((Int32)_availableVideoStandard).ToString()); writer.WriteElementString("selected", ((Int32)_currentVideoStandard).ToString()); writer.WriteEndElement(); //</videoStandard> writer.WriteStartElement("videoProcAmp"); //<videoProcAmp> foreach (VideoProcAmpProperty property in _videoProcAmpValues.Keys) { writer.WriteStartElement("videoQuality"); //<videoQuality> writer.WriteAttributeString("minValue", _videoProcAmpValues[property].MinValue.ToString()); writer.WriteAttributeString("maxValue", _videoProcAmpValues[property].MaxValue.ToString()); writer.WriteAttributeString("defaultValue", _videoProcAmpValues[property].DefaultValue.ToString()); writer.WriteAttributeString("delta", _videoProcAmpValues[property].SteppingDelta.ToString()); VideoProcAmpFlags prop = _videoProcAmpValues[property].IsManual ? VideoProcAmpFlags.Manual : VideoProcAmpFlags.Auto; writer.WriteAttributeString("flags", ((Int32)prop).ToString()); writer.WriteAttributeString("value", _videoProcAmpValues[property].Value.ToString()); writer.WriteValue((Int32)property); writer.WriteEndElement(); //<</videoQuality> } writer.WriteEndElement(); //</videoProcAmp> writer.WriteElementString("imageResolution", _imageWidth + "x" + _imageHeight); writer.WriteElementString("frameRate", _frameRate.ToString(CultureInfo.GetCultureInfo("en-GB"))); writer.WriteElementString("teletextPin", _teletextPin.ToString()); writer.WriteEndElement(); //</videoCapture> if (_name != null && !_name.Equals(_audioCaptureName)) { writer.WriteStartElement("audioCapture"); //<audioCapture> writer.WriteElementString("name", _audioCaptureName); writer.WriteElementString("audioIn", _audioIn.ToString()); writer.WriteEndElement(); //</audioCapture> } writer.WriteEndElement(); //</capture> }
void UpdateRange() { int min = 0, max = 0, stepping = 0, defaultValue = 0; VideoProcAmpFlags flags = VideoProcAmpFlags.None; if (_videoAmpControl == null) { Supported = false; } else { Supported = _videoAmpControl.GetRange(_videoAmpProperty, out min, out max, out stepping, out defaultValue, out flags) == 0; } Min = min; Max = max; Default = defaultValue; MinimumStepSize = stepping; Capabilities = (CameraPropertyFlags)flags; }
/// <summary> /// Gets the current setting of a camera property. /// </summary> /// /// <param name="property">Specifies the property to retrieve.</param> /// <param name="value">Receives the value of the property.</param> /// <param name="controlFlags">Receives the value indicating whether the setting is controlled manually or automatically</param> /// /// <returns>Returns true on success or false otherwise.</returns> /// /// <exception cref="ArgumentException">Video source is not specified - device moniker is not set.</exception> /// <exception cref="ApplicationException">Failed creating device object for moniker.</exception> /// <exception cref="NotSupportedException">The video source does not support camera control.</exception> /// public bool GetVideoProperty(VideoProcAmpProperty property, out int value, out VideoProcAmpFlags controlFlags) { bool ret = true; // check if source was set if ((deviceMoniker == null) || (string.IsNullOrEmpty(deviceMoniker))) { throw new ArgumentException("Video source is not specified."); } lock (sync) { object tempSourceObject = null; // create source device's object try { tempSourceObject = FilterInfo.CreateFilter(deviceMoniker); } catch { throw new ApplicationException("Failed creating device object for moniker."); } if (!(tempSourceObject is IAMVideoProcAmp)) { throw new NotSupportedException("The video source does not support camera control."); } IAMVideoProcAmp pCamControl = (IAMVideoProcAmp)tempSourceObject; int hr = pCamControl.Get(property, out value, out controlFlags); ret = (hr >= 0); Marshal.ReleaseComObject(tempSourceObject); } return(ret); }
/// <summary> /// 读取当前摄像头配置并保存到方案中 /// </summary> /// <param name="VideoSettingName">当前配置的方案名</param> /// <param name="AsDefault">是否设为摄像头默认设置</param> public bool SaveCameraConfigToSetting(string VideoSettingName, bool AsDefault) { IAMVideoProcAmp videoProcAmp = _theCamera as IAMVideoProcAmp; VideoProcAmpFlags flags = VideoProcAmpFlags.Manual; //亮度值 0到255 int LightValue = 0; videoProcAmp.Get(VideoProcAmpProperty.Brightness, out LightValue, out flags); //对比度 0到255 int ContrastValue = 0; videoProcAmp.Get(VideoProcAmpProperty.Contrast, out ContrastValue, out flags); //饱和度 0到255 int SaturationValue = 0; videoProcAmp.Get(VideoProcAmpProperty.Saturation, out SaturationValue, out flags); //色调 -127 到127 int HueValue = 0; videoProcAmp.Get(VideoProcAmpProperty.Hue, out HueValue, out flags); //清晰度 0到15 int SharpnessValue = 0; videoProcAmp.Get(VideoProcAmpProperty.Sharpness, out SharpnessValue, out flags); //伽玛 1到8 int GammaValue = 0; videoProcAmp.Get(VideoProcAmpProperty.Gamma, out GammaValue, out flags); //启用颜色 不支持 int ColorEnable = 0; videoProcAmp.Get(VideoProcAmpProperty.ColorEnable, out ColorEnable, out flags); //白平衡 不支持 int WhiteBalanceValue = 0; videoProcAmp.Get(VideoProcAmpProperty.WhiteBalance, out WhiteBalanceValue, out flags); //背光补偿 1 到 5 int BacklightCompensation = 0; videoProcAmp.Get(VideoProcAmpProperty.BacklightCompensation, out BacklightCompensation, out flags); //增益 不支持 int Gain = 0; videoProcAmp.Get(VideoProcAmpProperty.Gain, out Gain, out flags); CameraParamPlanEntity setting = new CameraParamPlanEntity(); setting.PrimaryKey = Guid.NewGuid().ToString(); setting.CameraName = this._bindCameraName; setting.Brightness = LightValue; setting.ParamPlanName = VideoSettingName; setting.ContrastRatio = ContrastValue; setting.Saturation = SaturationValue; setting.Hue = HueValue; setting.Sharpness = SharpnessValue; setting.Gamma = GammaValue; setting.ColorEnable = Convert.ToBoolean(ColorEnable); setting.WhiteBalance = WhiteBalanceValue; setting.BacklightCompensation = BacklightCompensation; setting.Gain = Gain; setting.DefaultSetting = AsDefault; if (AsDefault) { List <CameraParamPlanEntity> list = XmlHelper.XmlHelper.FindAll <CameraParamPlanEntity>(); if (list == null) { list = new List <CameraParamPlanEntity>(); } list.ForEach(m => m.DefaultSetting = false); list.Add(setting); XmlHelper.XmlHelper.SaveList <CameraParamPlanEntity>(list); } else { setting.Save(); } return(true); }
/// <summary> /// /// </summary> /// <param name="dsDevice"></param> /// <param name="prop"></param> /// <param name="value"></param> /// <param name="flag"></param> public void SetVideoControl(DsDevice dsDevice, VideoProcAmpProperty prop, int value = 0, VideoProcAmpFlags flag = VideoProcAmpFlags.Auto) { IFilterGraph2 filterGraph = new FilterGraph() as IFilterGraph2; IBaseFilter capFilter = null; try { // add the video input device int hr = filterGraph.AddSourceFilterForMoniker(dsDevice.Mon, null, "Source Filter", out capFilter); DsError.ThrowExceptionForHR(hr); IAMVideoProcAmp videoControl = capFilter as IAMVideoProcAmp; videoControl.Set(prop, value, flag); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
/// <summary> /// Returns property of camera (brightness/gamma etc) /// </summary> /// <param name="prop"></param> /// <param name="setting"></param> /// <param name="flags"></param> /// <returns></returns> /// <exception cref="ArgumentException"></exception> /// <exception cref="ApplicationException"></exception> /// <exception cref="NotSupportedException"></exception> public bool GetProperty(VideoProcAmpProperty prop, out int setting, out VideoProcAmpFlags flags) { setting = Int32.MinValue; flags = VideoProcAmpFlags.None; bool ret = false; // check if source was set if (string.IsNullOrEmpty(_deviceMoniker)) { return false; } lock (_sync) { object tempSourceObject; // create source device's object try { tempSourceObject = FilterInfo.CreateFilter(_deviceMoniker); } catch { return false; } if (!(tempSourceObject is IAMVideoProcAmp)) { return false; } var pCamControl = (IAMVideoProcAmp)tempSourceObject; try { int hr = pCamControl.Get(prop, out setting, out flags); ret = (hr >= 0); } catch { // ignored } Marshal.FinalReleaseComObject(tempSourceObject); } return ret; }
/// <summary> /// Returns possible range of values for given property /// </summary> /// <param name="prop"></param> /// <param name="min"></param> /// <param name="max"></param> /// <param name="steppingData"></param> /// <param name="defaultValue"></param> /// <param name="flags"></param> /// <returns></returns> /// <exception cref="ArgumentException"></exception> /// <exception cref="ApplicationException"></exception> /// <exception cref="NotSupportedException"></exception> public bool GetPropertyRange(VideoProcAmpProperty prop, out int min, out int max, out int steppingData, out int defaultValue, out VideoProcAmpFlags flags) { min = Int32.MinValue; max = Int32.MinValue; steppingData = Int32.MinValue; defaultValue = Int32.MinValue; flags = VideoProcAmpFlags.None; bool ret; // check if source was set if (string.IsNullOrEmpty(_deviceMoniker)) { throw new ArgumentException("Video source is not specified."); } lock (_sync) { object tempSourceObject; // create source device's object try { tempSourceObject = FilterInfo.CreateFilter(_deviceMoniker); } catch { throw new ApplicationException("Failed creating device object for moniker."); } if (!(tempSourceObject is IAMVideoProcAmp)) { throw new NotSupportedException("The video source does not support properties."); } var pCamControl = (IAMVideoProcAmp)tempSourceObject; int hr = pCamControl.GetRange(prop, out min, out max, out steppingData, out defaultValue, out flags); ret = (hr >= 0); Marshal.FinalReleaseComObject(tempSourceObject); } return ret; }
/// <summary> /// 设置摄像头为此配置 /// </summary> /// <param name="setting">摄像头的配置</param> /// <param name="asDefault">是否并设为默认</param> /// <returns></returns> public int SetSettingValue(VideoSetting setting, bool asDefault = false) { if (asDefault) { VideoSettingUtils.Instance.SetDefaultSettings(setting); } int iResult = 0; IAMVideoProcAmp videoProcAmp = theDevice as IAMVideoProcAmp; if (videoProcAmp == null) { iResult = -1; return(iResult); } int val; int min; int max; int step; int defaultValue; VideoProcAmpFlags flags = VideoProcAmpFlags.Manual; // 设置亮度 if (setting.Brightness != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Brightness, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Brightness, out val, out flags); //val = min + (max - min) * setting.Brightness / 255; iResult = videoProcAmp.Set(VideoProcAmpProperty.Brightness, setting.Brightness, flags); } } //设置对比度 if (setting.ContrastRatio != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Contrast, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Contrast, out val, out flags); //val = min + (max - min) * setting.ContrastRatio / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.Contrast, setting.ContrastRatio, flags); } }//设置饱和度 if (setting.Saturation != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Saturation, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.Saturation, setting.Saturation, flags); } } //设置色调 if (setting.Hue != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Hue, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.Hue, setting.Hue, flags); } } //设置清晰度 if (setting.Sharpness != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Sharpness, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.Sharpness, setting.Sharpness, flags); } } //设置伽玛 if (setting.Gamma != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Gamma, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.Gamma, setting.Gamma, flags); } } //设置启用颜色 if (setting.Gamma != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.ColorEnable, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.ColorEnable, Convert.ToInt32(setting.ColorEnable), flags); } } //白平衡 if (setting.WhiteBalance != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.WhiteBalance, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.WhiteBalance, setting.WhiteBalance, flags); } } //背光补偿 if (setting.WhiteBalance != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.BacklightCompensation, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.BacklightCompensation, setting.BacklightCompensation, flags); } } //增益 if (setting.Gain != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Gain, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.Gain, setting.Gain, flags); } } return(iResult); }
private void SetParameterValue(VideoProcAmpProperty i_prop, int value) { DsDevice[] capDevices; // Get the collection of video devices capDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice); DsDevice dev = capDevices[0]; // TODO: Almacenar en la clase el ID del dispositivo (no usar este 0) object o; Guid IID_IBaseFilter = new Guid("56a86895-0ad4-11ce-b03a-0020af0ba770"); dev.Mon.BindToObject(null, null, ref IID_IBaseFilter, out o); IAMVideoProcAmp vProps = (IAMVideoProcAmp)o; VideoProcAmpFlags pFlags = new VideoProcAmpFlags(); vProps.Set(i_prop, value, pFlags); }
/// <summary> /// 切换摄像头配置为指定配置方案 /// 配置方案可以由GetAllCameraSettings进行传参 /// </summary> /// <param name="setting">摄像头配置方案</param> /// <param name="asDefault">是否将此配置设为默认配置</param> /// <returns></returns> public int ChangeCameraConfigToSetting(CameraParamPlanEntity setting, bool asDefault = false) { if (asDefault) { List <CameraParamPlanEntity> list = XmlHelper.XmlHelper.FindAll <CameraParamPlanEntity>(); list.ForEach(m => m.DefaultSetting = false); var oldPlan = list.Find(m => m.CameraName == this._bindCameraName && m.ParamPlanName == setting.ParamPlanName); oldPlan.DefaultSetting = true; XmlHelper.XmlHelper.SaveList <CameraParamPlanEntity>(list); } int iResult = 0; IAMVideoProcAmp videoProcAmp = _theCamera as IAMVideoProcAmp; if (videoProcAmp == null) { iResult = -1; return(iResult); } int val; int min; int max; int step; int defaultValue; VideoProcAmpFlags flags = VideoProcAmpFlags.Manual; // 设置亮度 if (setting.Brightness != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Brightness, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Brightness, out val, out flags); //val = min + (max - min) * setting.Brightness / 255; iResult = videoProcAmp.Set(VideoProcAmpProperty.Brightness, setting.Brightness, flags); } } //设置对比度 if (setting.ContrastRatio != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Contrast, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Contrast, out val, out flags); //val = min + (max - min) * setting.ContrastRatio / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.Contrast, setting.ContrastRatio, flags); } }//设置饱和度 if (setting.Saturation != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Saturation, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.Saturation, setting.Saturation, flags); } } //设置色调 if (setting.Hue != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Hue, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.Hue, setting.Hue, flags); } } //设置清晰度 if (setting.Sharpness != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Sharpness, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.Sharpness, setting.Sharpness, flags); } } //设置伽玛 if (setting.Gamma != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Gamma, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.Gamma, setting.Gamma, flags); } } //设置启用颜色 if (setting.Gamma != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.ColorEnable, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.ColorEnable, Convert.ToInt32(setting.ColorEnable), flags); } } //白平衡 if (setting.WhiteBalance != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.WhiteBalance, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.WhiteBalance, setting.WhiteBalance, flags); } } //背光补偿 if (setting.WhiteBalance != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.BacklightCompensation, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.BacklightCompensation, setting.BacklightCompensation, flags); } } //增益 if (setting.Gain != -1) { int hr = videoProcAmp.GetRange(VideoProcAmpProperty.Gain, out min, out max, out step, out defaultValue, out flags); if (0 == hr) { //videoProcAmp.Get(VideoProcAmpProperty.Saturation, out val, out flags); //val = min + (max - min) * setting.Saturation / 100; iResult = videoProcAmp.Set(VideoProcAmpProperty.Gain, setting.Gain, flags); } } return(iResult); }
/// <summary> /// Creates the instance by parsing the Capture node in the configuration file /// </summary> /// <param name="xmlNode">The TvAudio xml node</param> /// <returns>TvAudio instance</returns> public static Capture CreateInstance(XmlNode xmlNode) { Capture capture = new Capture(); Dictionary <VideoProcAmpProperty, VideoQuality> videoProcAmpValues = new Dictionary <VideoProcAmpProperty, VideoQuality>(); capture.VideoProcAmpValues = videoProcAmpValues; if (xmlNode != null) { XmlNode viceoCaptureNode = xmlNode.SelectSingleNode("videoCapture"); XmlNode nameNode = viceoCaptureNode.SelectSingleNode("name"); XmlNode videoInNode = viceoCaptureNode.SelectSingleNode("videoIn"); XmlNode audioInNode = viceoCaptureNode.SelectSingleNode("audioIn"); XmlNode teletextPinNode = viceoCaptureNode.SelectSingleNode("teletextPin"); XmlNode frameRateNode = viceoCaptureNode.SelectSingleNode("frameRate"); XmlNode imageResolutionNode = viceoCaptureNode.SelectSingleNode("imageResolution"); XmlNode availableVideoStandardNode = viceoCaptureNode.SelectSingleNode("videoStandard/available"); XmlNode currentVideoStandardNode = viceoCaptureNode.SelectSingleNode("videoStandard/selected"); string resolution = imageResolutionNode.InnerText; try { capture.TeletextPin = Int32.Parse(teletextPinNode.InnerText); capture.FrameRate = Double.Parse(frameRateNode.InnerText, CultureInfo.GetCultureInfo("en-GB").NumberFormat); capture.VideoIn = Int32.Parse(videoInNode.InnerText); if (audioInNode != null) { capture.AudioCaptureName = nameNode.InnerText; } else { XmlNode audioCaptureNode = xmlNode.SelectSingleNode("audioCapture"); XmlNode audioCaptureNameNode = audioCaptureNode.SelectSingleNode("audioIn"); audioInNode = audioCaptureNameNode.SelectSingleNode("audioIn"); capture.AudioCaptureName = audioCaptureNameNode.InnerText; } capture.AudioIn = Int32.Parse(audioInNode.InnerText); if (resolution != null) { string[] imageResolutions = resolution.Split('x'); capture.ImageWidth = Int32.Parse(imageResolutions[0]); capture.ImageHeight = Int32.Parse(imageResolutions[1]); } capture.CurrentVideoStandard = (AnalogVideoStandard)Int32.Parse(currentVideoStandardNode.InnerText); capture.AvailableVideoStandard = (AnalogVideoStandard)Int32.Parse(availableVideoStandardNode.InnerText); XmlNodeList videoQualityList = viceoCaptureNode.SelectSingleNode("videoProcAmp").SelectNodes("videoQuality"); if (videoQualityList != null) { foreach (XmlNode pin in videoQualityList) { int minValue = Int32.Parse(pin.Attributes["minValue"].Value); int maxValue = Int32.Parse(pin.Attributes["maxValue"].Value); int defaultValue = Int32.Parse(pin.Attributes["defaultValue"].Value); int delta = Int32.Parse(pin.Attributes["delta"].Value); VideoProcAmpFlags flags = (VideoProcAmpFlags)Int32.Parse(pin.Attributes["flags"].Value); int value = Int32.Parse(pin.Attributes["value"].Value); VideoProcAmpProperty property = (VideoProcAmpProperty)Int32.Parse(pin.InnerText); VideoQuality quality = new VideoQuality(minValue, maxValue, delta, defaultValue, flags == VideoProcAmpFlags.Manual, value); videoProcAmpValues.Add(property, quality); } } } catch { return(capture); } capture.Name = nameNode.InnerText; } return(capture); }
/// <summary> /// 保存当前的相机设置 /// </summary> public void SaveCurrentOriginSetting(string VideoSettingName, bool AsDefault) { IAMVideoProcAmp videoProcAmp = theDevice as IAMVideoProcAmp; VideoProcAmpFlags flags = VideoProcAmpFlags.Manual; //亮度值 0到255 int LightValue = 0; videoProcAmp.Get(VideoProcAmpProperty.Brightness, out LightValue, out flags); //对比度 0到255 int ContrastValue = 0; videoProcAmp.Get(VideoProcAmpProperty.Contrast, out ContrastValue, out flags); //饱和度 0到255 int SaturationValue = 0; videoProcAmp.Get(VideoProcAmpProperty.Saturation, out SaturationValue, out flags); //色调 -127 到127 int HueValue = 0; videoProcAmp.Get(VideoProcAmpProperty.Hue, out HueValue, out flags); //清晰度 0到15 int SharpnessValue = 0; videoProcAmp.Get(VideoProcAmpProperty.Sharpness, out SharpnessValue, out flags); //伽玛 1到8 int GammaValue = 0; videoProcAmp.Get(VideoProcAmpProperty.Gamma, out GammaValue, out flags); //启用颜色 不支持 int ColorEnable = 0; videoProcAmp.Get(VideoProcAmpProperty.ColorEnable, out ColorEnable, out flags); //白平衡 不支持 int WhiteBalanceValue = 0; videoProcAmp.Get(VideoProcAmpProperty.WhiteBalance, out WhiteBalanceValue, out flags); //背光补偿 1 到 5 int BacklightCompensation = 0; videoProcAmp.Get(VideoProcAmpProperty.BacklightCompensation, out BacklightCompensation, out flags); //增益 不支持 int Gain = 0; videoProcAmp.Get(VideoProcAmpProperty.Gain, out Gain, out flags); VideoSetting setting = new VideoSetting(); setting.Brightness = LightValue; setting.VideoSettingName = VideoSettingName; setting.ContrastRatio = ContrastValue; setting.Saturation = SaturationValue; setting.Hue = HueValue; setting.Sharpness = SharpnessValue; setting.Gamma = GammaValue; setting.ColorEnable = Convert.ToBoolean(ColorEnable); setting.WhiteBalance = WhiteBalanceValue; setting.BacklightCompensation = BacklightCompensation; setting.Gain = Gain; setting.DefaultSetting = AsDefault; VideoSettingUtils.Instance.SaveVideoSetting(setting, AsDefault); }
/// <summary> /// Sets a specified property on the camera. /// </summary> /// /// <param name="property">Specifies the property to set.</param> /// <param name="value">Specifies the new value of the property.</param> /// <param name="controlFlags">Specifies the desired control setting.</param> /// /// <returns>Returns true on success or false otherwise.</returns> /// /// <exception cref="ArgumentException">Video source is not specified - device moniker is not set.</exception> /// <exception cref="ApplicationException">Failed creating device object for moniker.</exception> /// <exception cref="NotSupportedException">The video source does not support camera control.</exception> /// public bool SetVideoProperty(VideoProcAmpProperty property, int value, VideoProcAmpFlags controlFlags) { bool ret = true; // check if source was set if ((deviceMoniker == null) || (string.IsNullOrEmpty(deviceMoniker))) { throw new ArgumentException("Video source is not specified."); } lock (sync) { object tempSourceObject = null; // create source device's object try { tempSourceObject = FilterInfo.CreateFilter(deviceMoniker); } catch { throw new ApplicationException("Failed creating device object for moniker."); } if (!(tempSourceObject is IAMVideoProcAmp)) { throw new NotSupportedException("The video source does not support camera control."); } IAMVideoProcAmp pCamControl = (IAMVideoProcAmp)tempSourceObject; int hr = pCamControl.Set(property, value, controlFlags); ret = (hr >= 0); Marshal.ReleaseComObject(tempSourceObject); } return ret; }