2014年06月21日

Media Foundation で H.264 デコード後の画像を得る

Media Foundation で動画ファイルなどをデコードして画像を得るチュートリアルは Using the Source Reader to Process Media Data に書かれている。
この通り作るとデコード前のデータが出てくるので、ConfigureDecoder を事前に呼んで出力形式を指定する必要がある。
でも、この通りの ConfigureDecoder を事前に呼んでも SetCurrentMediaType で失敗する。
MFVideoFormat_RGB32 で出力できないようだ。
MFVideoFormat_IYUV を指定すると動く。
MFMediaType_Video の時に SetCurrentMediaType が失敗したら、MFVideoFormat_IYUV を試してみるように書き換える必要がある。
これで IMFSample から IMFMediaBuffer が得られるが、得られるデータは IYUV 形式なので RGB で欲しければ自分で変換する必要がある。
画像データの場合は、IMFMediaBuffer から IMF2DBuffer インターフェイスを QueryInterface で得た方が良いと書かれているので、画像データは IMF2DBuffer を使って、それを Lock2D してバッファを得る。

動画サイズは、GetCurrentMediaType に MF_SOURCE_READER_FIRST_VIDEO_STREAM を指定して IMFMediaType を得た後、IMFMediaType::GetRepresentation で FORMAT_MFVideoFormat を指定して得る。
得られるデータは AM_MEDIA_TYPE 。
そこから AM_MEDIA_TYPE::pbFormat を MFVIDEOFORMAT のポインタにキャストして MFVIDEOFORMAT::videoInfo::dwWidth/dwHeight で得られる。

投稿者 Takenori : 00:15 | トラックバック

 
Total : Today : Yesterday :