//インスタンス変数 private IFilterGraph2 _filterGraph; private IMediaControl _mediaControl; private IPin _outputPin; private IPin _inputPin; ///グラフ作成 private void SetupGraph(Control control) { //デバイス取得 var capDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice); filterGraph = new FilterGraph() as IFilterGraph2; IBaseFilter capFilter; var hr = filterGraph.AddSourceFilterForMoniker(capDevices[0].Mon, null, capDevices[0].Name, out capFilter); DsError.ThrowExceptionForHR(hr); outputPin = DsFindPin.ByCategory(capFilter, PinCategory.Capture, 0); var pRender = new VideoRendererDefault() as IBaseFilter; hr = filterGraph.AddFilter(pRender, "Renderer"); DsError.ThrowExceptionForHR(hr); _inputPin = DsFindPin.ByDirection(pRender, PinDirection.Input, 0); hr = filterGraph.Connect(_outputPin, _inputPin); DsError.ThrowExceptionForHR(hr); //このメソッドでコントロールに描画する設定を行います。 ConfigVideoWindow(control); _mediaControl = _filterGraph as IMediaControl; _mediaControl.Run(); } //切断 public void Disconnect() { _mediaControl.Stop(); var hr= filterGraph.Disconnect(_outputPin); DsError.ThrowExceptionForHR(hr); _mediaControl.Run(); } ///再接続 public void Reconnect() { _mediaControl.Stop(); var hr= filterGraph.Connect(_outputPin, inputPin); DsError.ThrowExceptionForHR(hr); _mediaControl.Run(); }