※ ChatGPTを利用し、要約された質問です(原文:Direct Show(x64)でのエラー)
Direct Show(x64)でのエラー
このQ&Aのポイント
現在x64版のDirect Showを利用して、aviファイルから任意のフレーム画像を取得するプログラムを作成しています。
x64版で動作させると、1440x810の動画ファイルは問題なく動作しますが、3840x2160の動画ファイルはうまく動作しません。
原因としては、RenderFileのところでx64の場合はVFW_E_NO_TRANSPORTが返されるため、問題が発生している可能性があります。
お世話になります。
現在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++ (純粋なネィティブプログラム)
お礼
情報ありがとうございます! さっそく確認してみます^^
補足
grapheditを使ってフィルタを自動生成してみたところ、 x64版では同じ様にピン関係のエラーが表示され、うまくいきませんでした。 ただしx86版では問題なく自動生成されたので、x86版の結果を頼りに x64版で手動でフィルタを追加していったところ、AVI SplitterからAVI Decompressorへの 入力で失敗していることがわかりました。 結局のところ64bit版のコーデックが無いために、このようなエラーになっていたようです。 (考えてみれば当然な気がしますが、全然気づきませんでした^^;) なにぶん動画関係とか疎かったので、頂いた情報は大変参考になりました。 ありがとうございました!!