- 締切済み
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
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- yosumura
- ベストアンサー率0% (0/1)
VideroRendererではなく、VMRに接続していませんか? 適当な中間フィルタをEnum、そのPinをEnum、ConnectToしてみたらどうでしょうか?
補足
一応RendererはVideroRendererとDefaultSoundです。 Sourceから一番初めにつながるべきSplitterのPinにつながらなくて 困ってます。 GraphEditでは普通につながるのでなんで? っといった感じです。