GraphEditではつながるのに、DirectShowだとConnectできない
少し特殊なフォーマットをサードパーティ製のフィルターを通して
DirectShowを使用して再生します。
該当素材はGraphEditにDnDすると普通にFilterが接続され再生も可能です。
あまり詳しくかけませんので概略のみ
該当素材をAddSourceFilter()して、Splitter/Renderなど必要な
FilterをAddFilter()で全て加えます。
SourceのOutpinとSplitterのInpinを
HRESULT hr = IGraphBuilder->Connect(Outpin, Inpin);
この際 hr = 0x80040207 (VFW_E_NO_ACCEPTABLE_TYPES)
となりPinの接続ができません。
Render()でも 0x80040218(VFW_E_CANNOT_RENDER) です。
Source を Mpeg1、Splitter を Mpeg-1 Stream Splitter
に変更しますと普通に接続できますので、Programの
構造としてはあっていると思います。
文字通りMediaTypeが異なるから? と
QueryAccept()で確認しましたが問題はないようです。
さらにMSDNのサンプルを参考にして上記のProgramで作ったフィルタグラフを
.grfファイルに書き出しました。
GraphEditで開きますと必要なFilterはすべて追加されているが、
つながってはいない状態です。これは上記の現象から理解できます。
しかし解せないことに、このGraphEditでSourceFileのPinから
Render Pinを行うと完璧にフィルターが接続されます。
もちろんPin同士だけをつなげることも可能です。
基本的にGraphEditでできることはProgramでも出来ると思うのですが、
今回のケースは理解できません。
GraphEditでつながるにも関わらず、直接Pinの接続が出来ないというのは
なぜなのでしょうか。
以下に環境を記載します。
Windows XP SP2
DirectX 9.0C
Microsoft DirectX SDK (March 2008)
Microsoft Platform SDK for Windows Server 2003 SP1
お礼
回答ありがとうございます。 自己解決してました(^^; 締め切るのを忘れてました。すみません。 DirectShowは、C#では、搭載されていないようです。 対応するのには、フリーのソースを使うしかないようです。 サイトはここです。 http://www.codeproject.com/cs/media/directshownet.asp 以上。