ニコニコ動画管理ソフトを作るぞー[2]
ダウンロードした動画(flv・mp4)から、フレームを抽出するプログラムを作成した際に、私が作成したコードだと、flvからフレームを抽出できない件、
デバックしてみたら、原因がわかりました。
こんな感じでフレームを抽出して、保存していたのですが、
1、IGraphBuilderからIMediaEventインターフェースを取得
2、SampleGrabberのGetConnectedMediaType関数で
メディアタイプ(AM_MEDIA_TYPE構造体)を取得
3、フレームを入れるバッファを確保(new)する。
バッファのサイズは、
AM_MEDIA_TYPE構造体のlSampleSizeを参照
4、ビットマップインフォヘッダー(VIDEOINFOHEADER構造体
を取得(AM_MEDIA_TYPE構造体のpbFormatに入っている。)
5、SampleGrabberのGetCurrentBufferでバッファを取得する。
6、ビットマップ保存関係ごにょごにょ
□原因発見
3、のバッファサイズ(=lSampleSize)の値が、テストで使用したflvだと1になっていました。
→ 原因は不明、特殊な画像だった?
そのため、SampleGrabberのGetCurrentBufferを、バッファをNULLにして実行すると、バッファサイズを取得できるので、これを使用してバッファサイズを取得する方法に変更しました。
m_pSampleGrabber->GetCurrentBuffer(&nBufferSize,
NULL);
→ nBufferSizeにバッファサイズが入ります。
NULLのところにバッファを入れておくと、ここにフレームがあります。
これで、MP4もflvもフレーム抽出が可能になりました。
おまけに、どのフレームでも抽出できるようになりました。
よっしゃー
□ffdshow問題①
ffdshowを使って、デコードをしているため、
動画を開くたびに、タスクバーにffdshowのアイコンが増えていく現象が発生。
(活きているのはひとつだけっぽい)
ffdshowのVideo・Audioの設定の「トレイ、ダイアログ、パス」のトレイアイコン=なしに選択することで、ほぼアイコンを消せました。
□ffdshow問題②
特定のMP4の動画を開くたびに、ffdshow関係のアイコンがタスクバーに増えていく現象が発生
これは全て活きているアイコンのようです。
(アイコンを右クリックすると、全てのアイコンでメニューが出ます。)
原因不明。
プログラムを終了すると、ffdshowも死ぬので、私のプログラムで解放ミスがあるんじゃないかな、とは思うものの、原因は不明。