dポイントプレゼントキャンペーン実施中!

少し特殊なフォーマットをサードパーティ製のフィルターを通して
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

A 回答 (1件)

VideroRendererではなく、VMRに接続していませんか?


適当な中間フィルタをEnum、そのPinをEnum、ConnectToしてみたらどうでしょうか?

この回答への補足

一応RendererはVideroRendererとDefaultSoundです。
Sourceから一番初めにつながるべきSplitterのPinにつながらなくて
困ってます。
GraphEditでは普通につながるのでなんで?
っといった感じです。

補足日時:2008/08/14 14:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!