/// <summary> /// サンプルグラバを作成する /// </summary> private DirectShow.IBaseFilter CreateSampleGrabber() { var filter = DirectShow.CreateFilter(DirectShow.DsGuid.CLSID_SampleGrabber); var ismp = filter as DirectShow.ISampleGrabber; // サンプル グラバを最初に作成したときは、優先メディア タイプは設定されていない。 // これは、グラフ内のほぼすべてのフィルタに接続はできるが、受け取るデータ タイプを制御できないとうことである。 // したがって、残りのグラフを作成する前に、ISampleGrabber::SetMediaType メソッドを呼び出して、 // サンプル グラバに対してメディア タイプを設定すること。 // サンプル グラバは、接続した時に他のフィルタが提供するメディア タイプとこの設定されたメディア タイプとを比較する。 // 調べるフィールドは、メジャー タイプ、サブタイプ、フォーマット タイプだけである。 // これらのフィールドでは、値 GUID_NULL は "あらゆる値を受け付ける" という意味である。 // 通常は、メジャー タイプとサブタイプを設定する。 // https://msdn.microsoft.com/ja-jp/library/cc370616.aspx // https://msdn.microsoft.com/ja-jp/library/cc369546.aspx // サンプル グラバ フィルタはトップダウン方向 (負の biHeight) のビデオ タイプ、または // FORMAT_VideoInfo2 のフォーマット タイプのビデオ タイプはすべて拒否する。 var mt = new DirectShow.AM_MEDIA_TYPE(); mt.MajorType = DirectShow.DsGuid.MEDIATYPE_Video; mt.SubType = DirectShow.DsGuid.MEDIASUBTYPE_RGB24; ismp.SetMediaType(mt); return(filter); }
/// <summary> /// Get video formats. /// </summary> public static VideoFormat[] GetVideoFormat(int cameraIndex) { var filter = DirectShow.CreateFilter(DirectShow.DsGuid.CLSID_VideoInputDeviceCategory, cameraIndex); var pin = DirectShow.FindPin(filter, 0, DirectShow.PIN_DIRECTION.PINDIR_OUTPUT); return(GetVideoOutputFormat(pin)); }
/// <summary> /// Video Capture Sourceフィルタを作成する /// </summary> private DirectShow.IBaseFilter CreateVideoCaptureSource(int index, VideoFormat format) { var filter = DirectShow.CreateFilter(DirectShow.DsGuid.CLSID_VideoInputDeviceCategory, index); var pin = DirectShow.FindPin(filter, 0, DirectShow.PIN_DIRECTION.PINDIR_OUTPUT); SetVideoOutputFormat(pin, format); return(filter); }