Example #1
0
        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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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);
        }
Example #4
0
        /// <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);
            }
        }
Example #6
0
 public void SetBrightness(int val, VideoProcAmpFlags flags = VideoProcAmpFlags.Manual)
 {
     if (_values["Brightness"] != val)
     {
         _videoSource.SetVideoProperty(VideoProcAmpProperty.Brightness, val, flags);
         _values["Brightness"] = val;
     }
 }
Example #7
0
        /// <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);
        }
Example #8
0
        /// <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);
        }
Example #9
0
        /// <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);
        }
Example #10
0
 /// <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);
        }
Example #14
0
        /// <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);
            }
        }
Example #15
0
        /// <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;
        }
Example #16
0
        /// <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;
        }
Example #17
0
 public void SetBrightness(int val, VideoProcAmpFlags flags = VideoProcAmpFlags.Manual)
 {
     if (_values["Brightness"] != val) {
         _videoSource.SetVideoProperty(VideoProcAmpProperty.Brightness, val, flags);
         _values["Brightness"] = val;
     }
 }
Example #18
0
        /// <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);
        }
Example #21
0
        /// <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);
        }
Example #22
0
        /// <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;
        }