Example #1
0
 /// <summary>
 /// オブジェクトのクローンの生成
 /// </summary>
 /// <returns>
 ///		新しく生成したオブジェクトに自身の内容を複製して返します。
 /// </returns>
 public virtual CxDSPinInfo Clone()
 {
     DSLab.CxDSPinInfo clone = new CxDSPinInfo();
     clone.Name      = this.Name;
     clone.Direction = this.Direction;
     return(clone);
 }
Example #2
0
 /// <summary>
 /// 指定されたオブジェクトを指定した型に変換します。
 /// </summary>
 /// <param name="context"></param>
 /// <param name="culture"></param>
 /// <param name="value"></param>
 /// <param name="destinationType"></param>
 /// <returns>
 ///		インスタンスの内容を文字列に変換して返します。
 /// </returns>
 public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
 {
     if (destinationType == typeof(string) && value is CxDSPinInfo)
     {
         CxDSPinInfo _value = (CxDSPinInfo)value;
         return(string.Format("{0}", _value.Name));
     }
     return(base.ConvertTo(context, culture, value, destinationType));
 }
Example #3
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="filter_info">フィルタ情報</param>
 /// <param name="pin_info">ピン情報</param>
 /// <param name="format_info">フォーマット情報</param>
 public CxDSCameraParam(CxDSFilterInfo filter_info, CxDSPinInfo pin_info, CxDSFormatInfo format_info)
 {
     FilterInfo = filter_info;
     PinInfo    = pin_info;
     FormatInfo = format_info;
 }
Example #4
0
 /// <summary>
 /// オブジェクトのクローンの生成
 /// </summary>
 /// <returns>
 ///		新しく生成したオブジェクトに自身の内容を複製して返します。
 /// </returns>
 public virtual CxDSPinInfo Clone()
 {
     DSLab.CxDSPinInfo clone = new CxDSPinInfo();
     clone.Name = this.Name;
     clone.Direction = this.Direction;
     return clone;
 }
Example #5
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="filter_info">フィルタ情報</param>
 /// <param name="pin_info">ピン情報</param>
 /// <param name="format_info">フォーマット情報</param>
 public CxDSCameraParam(CxDSFilterInfo filter_info, CxDSPinInfo pin_info, CxDSFormatInfo format_info)
 {
     FilterInfo = filter_info;
     PinInfo = pin_info;
     FormatInfo = format_info;
 }
Example #6
0
        /// <summary>
        /// IxEquatable の実装: インスタンスの複製
        /// </summary>
        /// <param name="src">複製元</param>
        /// <returns>
        ///		複製後の自身への参照を返します。
        /// </returns>
        public virtual CxDSCameraParam CopyFrom(object src)
        {
            if (ReferenceEquals(this, src)) return this;

            var _src = (CxDSCameraParam)src;

            this.FilterInfo = _src.FilterInfo.Clone();
            this.PinInfo = _src.PinInfo.Clone();
            this.FormatInfo = _src.FormatInfo.Clone();

            return this;
        }
Example #7
0
        /// <summary>
        /// フィルタ情報の初期化
        /// </summary>
        void InitializeFilterPairs()
        {
            // [1] フィルタとピンのペア.
            List <FilterPair> filter_pairs = FilterPairs;

            // カテゴリ: GUID.CLSID_VideoInputDeviceCategory
            string category = GUID.CLSID_VideoInputDeviceCategory;

            // フィルタの一覧を取得する.
            List <CxDSFilterInfo> filters = Axi.GetFilterList(category);

            foreach (var filter in filters)
            {
                IBaseFilter capture = null;

                try
                {
                    #region フィルタを生成する.
                    capture = Axi.CreateFilter(category, filter.Name, filter.Index);
                    #endregion

                    #region ピンの一覧を取得する.
                    List <CxDSPinInfo> pins = new List <CxDSPinInfo>();
                    {
                        List <CxDSPinInfo> items = Axi.GetPinList(capture);
                        // 出力ピンのみ抽出する.
                        foreach (var item in items)
                        {
                            if (item.Direction == PIN_DIRECTION.PINDIR_OUTPUT)
                            {
                                pins.Add(item);
                            }
                        }
                    }
                    #endregion

                    #region フォーマットの一覧を取得する.
                    try
                    {
                        // [2] ピンとフォーマットのペア.
                        List <PinPair> pin_pairs = new List <PinPair>();

                        for (int i = 0; i < pins.Count; i++)
                        {
                            CxDSPinInfo pin = pins[i];

                            // 出力ピンを探す.
                            IPin outpin = Axi.FindPin(capture, i, PIN_DIRECTION.PINDIR_OUTPUT);

                            // フォーマットの色空間グループ分け.
                            Dictionary <string, List <CxDSFormatInfo> > groups = new Dictionary <string, List <CxDSFormatInfo> >();

                            // フォーマットの一覧を取得する.
                            List <CxDSFormatInfo> formats = Axi.GetFormatList(outpin);
                            foreach (var format in formats)
                            {
                                if (GUID.Compare(format.FormatType, GUID.FORMAT_VideoInfo) == false)
                                {
                                    continue;
                                }

                                List <CxDSFormatInfo> groups_value = null;
                                if (groups.TryGetValue(format.MediaSubType, out groups_value) == false)
                                {
                                    groups_value = new List <CxDSFormatInfo>();
                                    groups[format.MediaSubType] = (groups_value);
                                }
                                groups_value.Add(format);
                            }

                            // [3] 色空間とフォーマットのペア.
                            List <FormatPair> format_pairs = new List <FormatPair>();

                            // フォーマットを色空間グループ毎に列挙する.
                            foreach (var group in groups)
                            {
                                // 色空間のニックネーム.
                                string nickname = GUID.GetNickname(group.Key);                                  // Key=MediaSubType
                                if (string.IsNullOrEmpty(nickname))
                                {
                                    nickname = "(unknown)";
                                }

                                // [3] 色空間とフォーマットのペア.
                                format_pairs.Add(new FormatPair(nickname, group.Value));
                            }

                            // [2] ピンとフォーマットのペア.
                            pin_pairs.Add(new PinPair(pin, format_pairs));
                        }

                        // [1] フィルタとピンのペア.
                        filter_pairs.Add(new FilterPair(filter, pin_pairs));
                    }
                    catch (System.Exception ex)
                    {
                        Debug.WriteLine(ex.StackTrace);
                    }
                    finally
                    {
                        Axi.ReleaseInstance(capture);
                    }
                    #endregion
                }
                catch (System.Exception ex)
                {
                    Debug.WriteLine(ex.StackTrace);
                }
                finally
                {
                    #region フィルタを解放する.
                    Axi.ReleaseInstance(capture);
                    #endregion
                }
            }

            int index = -1;

            // コンボボックスへの追加.
            comboFilter.Items.Clear();
            for (int i = 0; i < filter_pairs.Count; i++)
            {
                var filter_pair = filter_pairs[i];
                comboFilter.Items.Add(filter_pair.Key.Name);

                if (filter_pair.Key.ContentEquals(this.Backup.FilterInfo))
                {
                    index = i;
                }
            }

            if (0 <= index && index < comboFilter.Items.Count)
            {
                comboFilter.SelectedIndex = index;
            }
        }