次の方法で共有


ポスター フレームの捕捉

ここでは、DirectShow 編集サービス が提供する メディア ディテクタ (MediaDet) オブジェクトを使って、デジタル メディア ファイルからポスター フレームを表示する方法を解説する。

メディア ディテクタは、メディア ソース ファイルからフォーマット情報を取得できるヘルパー オブジェクトである。また、ソース ファイルのビデオ ストリームからビットマップ イメージも捕捉できる。ファイルがシーク可能な場合は、ファイル内の任意の場所からイメージを取得できる。返されるイメージは常に、24 ビット RGB フォーマットである。

メディア ディテクタはフィルタではないので、アプリケーションはフィルタ グラフ マネージャを使ったり、フィルタ グラフを作成したりする必要はない。メディア ディテクタは内部で、サンプル グラバ フィルタを含むフィルタ グラフを作成する。メディア ディテクタはビットマップを取得するために、フィルタ グラフをシークしてポーズし、サンプル グラバ フィルタからビットマップを取得する。アプリケーションは、IMediaDet インターフェイスを使ってメディア ディテクタとやり取りする。メディア ディテクタは、アプリケーションがグラフ関連の詳細処理をしないで済むように、ヘルパー オブジェクト内にフィルタ グラフをカプセル化した好例である。

メディア ディテクタは 2 つのモードで動作する。メディア ディテクタを初めて作成したときは、"情報収集" モードである。メディア ファイルの名前を指定すると、ファイル内の各ストリームについて、フォーマット タイプ、フレーム レート、時間幅などの情報を取得できる。ファイルにビデオ ストリームが含まれる場合は、メディア ディテクタを "ビットマップ捕捉" モードに切り替えるとソースからビットマップを取得できる。ただし、一度モードを切り替えると、メディア ディテクタを元のモードに戻せなくなる。そのメディア ディテクタはそのビデオ ストリームに永久にアタッチされる。別のストリームや別のファイルを操作するには、メディア ディテクタのインスタンスを新しく作成する必要がある。

 :  このチュートリアルのサンプル コードでは ATL CComPtr クラスを使っている。このクラスは参照カウントを自動的に管理する。下位のインターフェイス ポインタを使う場合は、使い終わったら必ずインターフェイスをすべて解放すること。また、エラー チェックは、アプリケーションであれば実行しなければならないが、サンプル コードでは簡潔にするために行っていない。実際のコードでは、常に HRESULT 値を調べること。

このチュートリアルは、以下の手順で構成されている。