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

お世話になります。

現在x64版のDirect Showを利用して、aviファイルから任意のフレーム画像を取得する
プログラムを作成しております。

Direct Showは今まで使ったことが無かったのですが、ネットにあるサンプルなどを
参考に手探りで作業を進めております。最終的にはx64版を作る必要があるのですが、
メインで作業しているPCが32bit環境であるため、とりあえずx86版で作業を進め、
なんとか期待する動作をするものが出来ました。

最終的に処理する動画ファイルは1440x810のものと、3840x2160の2つがあり、
x86版ではどちらも期待する動作をしてくれるのですが、x64にてコンパイルし64bit環境で
動作させると1440x810の方は問題ないのですが、3840x2160の方はうまく動作しません。

なお、プログラムは以下のような流れでDirectShowを利用しております。

CoInitialize
CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, &pIGB);
pIGB->QueryInterface( IID_IMediaControl, &pIMC );
pIGB->QueryInterface( IID_IID_IMediaSeeking, &pIMS );
CoCreateInstance( CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, &pIBF );
pIBF->QueryInterface( IID_ISampleGrabber, &pISG );
pIGB->AddFilter( pIBF, NULL );
pISG->SetMediaType(&stMT); // stMTはMEDIATYPE_Video,MEDIASUBTYPE_RGB24,FORMAT_VideoInfoを設定
pIGB->RenderFile( ファイル名, NULL );
:

調べてみると、RenderFileのところでx64の場合はVFW_E_NO_TRANSPORTが帰ってきているようです。なお、その64bit環境でx86コンパイルしたものを動かすと問題なく動作します。

なお、もともとDirect X SDK 9.0を使っていましたが、念のため最新版のものをダウンロードして
試してみましたが、症状は変わりませんでした。また、Videoドライバも変えてみましたが、同様に
変化なしです。

どんな原因が考えられるか、どなたかご助言頂ければ助かります。

なお、開発環境・動作環境は以下の通りです。

Windows 7 Pro 64bit版
VisualStudio 2010 Pro
Direct X SDK 9.0 or Direct X Jun_2010
C++ (純粋なネィティブプログラム)

A 回答 (1件)

↓あたりを参考に調べてみてはいかがでしょうか。



VFW_E_NO_TRANSPORTについてのQ&A
http://social.msdn.microsoft.com/Forums/en-US/wi …

DirectShowのフィルタについて(ちょっと古い情報みたいです。)
http://www.geocities.co.jp/SiliconValley/7406/ti …

grapheditについて
http://blogs.msdn.com/b/windows_multimedia_jp/ar …

この回答への補足

grapheditを使ってフィルタを自動生成してみたところ、
x64版では同じ様にピン関係のエラーが表示され、うまくいきませんでした。
ただしx86版では問題なく自動生成されたので、x86版の結果を頼りに
x64版で手動でフィルタを追加していったところ、AVI SplitterからAVI Decompressorへの
入力で失敗していることがわかりました。

結局のところ64bit版のコーデックが無いために、このようなエラーになっていたようです。
(考えてみれば当然な気がしますが、全然気づきませんでした^^;)

なにぶん動画関係とか疎かったので、頂いた情報は大変参考になりました。
ありがとうございました!!

補足日時:2011/04/14 11:40
    • good
    • 0
この回答へのお礼

情報ありがとうございます!
さっそく確認してみます^^

お礼日時:2011/04/14 09:29

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