/// <summary> /// オブジェクトのクローンの生成 /// </summary> /// <returns> /// 新しく生成したオブジェクトに自身の内容を複製して返します。 /// </returns> public virtual CxDSPinInfo Clone() { DSLab.CxDSPinInfo clone = new CxDSPinInfo(); clone.Name = this.Name; clone.Direction = this.Direction; return(clone); }
/// <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)); }
/// <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; }
/// <summary> /// オブジェクトのクローンの生成 /// </summary> /// <returns> /// 新しく生成したオブジェクトに自身の内容を複製して返します。 /// </returns> public virtual CxDSPinInfo Clone() { DSLab.CxDSPinInfo clone = new CxDSPinInfo(); clone.Name = this.Name; clone.Direction = this.Direction; return clone; }
/// <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; }
/// <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; } }