ビデオ レンダラ フィルタ
ビデオ レンダラ フィルタは、堅牢な多目的ビデオ フィルタである。
注 :** **Microsoft Windows XP では、Video Mixing Renderer (VMR) が既定のビデオ レンダラである。VMR もビデオ レンダラも、フレンドリ名は同じ "Video Renderer" である。他のすべてのプラットフォームでは、ビデオ レンダラは既定のレンダラであるが、アプリケーションで高度なレンダリング機能を必要とする場合は、VMR-9 も使用できる。
ビデオ カードがサポートしていれば、ビデオ レンダラ フィルタは Microsoft® DirectDraw® およびオーバーレイ サーフェイスを使う。フィルタ グラフ マネージャは、アプリケーションがビデオ レンダラのプロパティを設定および取得できるようにするための、IVideoWindow インターフェイスを公開する。新型のビデオ カードを使っている場合は、ビデオ レンダラを使ってフルスクリーン レンダリングを実行できる。旧型のビデオ カードの場合、フルスクリーン モードに入る際は、フィルタ グラフ マネージャが自動的にフルスクリーン レンダリング フィルタに切り替える。詳細については、「IVideoWindow::put_FullScreenMode」を参照すること。
重要 : 通常、このフィルタのビデオ ウィンドウは、フィルタ グラフ マネージャによって作成されたワーカー スレッドのメッセージを処理する。しかし、アプリケーションが CoCreateInstance を使って直接フィルタを作成した場合、ビデオ ウィンドウはアプリケーション スレッドのメッセージを処理する。その場合、アプリケーション スレッドは、ビデオ ウィンドウにメッセージをディスパッチするためのメッセージ ループを持っている必要がある。またスレッドは、フィルタ グラフ マネージャがシャットダウンしたときに発生する、ビデオ レンダラへの最後の Release 呼び出しまで終了してはならない。このようにしないと、アプリケーションがデッドロックに陥ることがある。
フィルタ インターフェイス | IBaseFilter、IBasicVideo、IBasicVideo2、IDirectDrawVideo、IKsPropertySet、IMediaPosition、IMediaSeeking、IQualityControl、IQualProp、IVideoWindow |
入力ピン メディア タイプ | MEDIATYPE_Video |
入力ピン インターフェイス | IMemInputPin、IOverlay、IPin、IPinConnection、IQualityControl |
出力ピン メディア タイプ | 該当なし。 |
出力ピン インターフェイス | 該当なし。 |
フィルタ CLSID | CLSID_VideoRenderer |
プロパティ ページ CLSID | プロパティ ページなし。 |
実行モジュール | quartz.dll |
メリット | Windows 98、Me、NT、2000: MERIT_PREFERRED
Windows XP: MERIT_UNLIKELY |
フィルタ カテゴリ | CLSID_LegacyAmFilterCategory |
注意
Quartz.dll のデバッグ バージョンでは、LOG_TRACE デバッグ レベルが 5 以上に設定されている場合、ビデオ レンダラは、各フレームのタイム スタンプをビデオ ウィンドウに表示する。これらの番号は、リテール バージョンの DLL では表示されない。詳細については、「デバッグ出力関数」を参照すること。
フィルタ開発者は、以下の点に注意すること。
ビデオ レンダラは、ビデオ グラフィック カードが YUV オーバーレイ サーフェイスをサポートする場合は、YUV フォーマットを取り扱うことができる。ただし、最初にアップストリーム フィルタに接続する際、ビデオ レンダラは、現在のモニタ設定の色深度に合致する RGB フォーマットを必要とする。たとえば、現在のディスプレイ設定が 24 ビット カラーの場合は、アップストリーム フィルタ側で 24 ビット RGB ビデオを提供できなければならない。フィルタ グラフが実行状態に切り替わると、ビデオ レンダラは、適切な YUV 色空間への動的なフォーマット変更をネゴシエートする。
RGB タイプに接続することによって、ビデオ レンダラは、DirectDraw が使えないときに GDI が使えるようになる。他のアプリケーションがビデオ メモリを使っていて、ビデオ表示矩形が複数のモニタ システムで 2 つのモニタにまたがっている場合、またはビデオ矩形が完全に画面上の他のウィンドウによって隠されている場合、ビデオ レンダラは GDI に切り替える。
注 : Video Mixing Renderer は、レンダリングに GDI を使わないため、このような動的フォーマット変更を実行せず、RGB メディア タイプも必要としない。
フォーマット変更をネゴシエートする際、ビデオ レンダラは、新しいメディア タイプを使って IPin::QueryAccept を呼び出す。アップストリーム フィルタが S_OK を返した場合、ビデオ レンダラは、新しいメディアを次のサンプルにアタッチする。アップストリーム フィルタは、各サンプルで IMediaSample::GetMediaType を呼び出す必要がある。GetMediaType が NULL 以外の値を返した場合は、フォーマット変更を示している。その場合、アップストリーム フィルタは、出力タイプを変更することでこれに応答する必要がある。(QueryAccept メソッド内でタイプを変更しないこと。) アップストリーム フィルタは、少なくとも主要な RGB タイプを処理できなければならない。さらに、一般的な YUV タイプもサポートすることが望まれる。ストリーム中、ビデオ レンダラは、YUV と RGB タイプの間で何回も切り替えることがある。ビデオ レンダラは、アップストリーム フィルタが開始した動的フォーマット変更は受け付けない。
ビデオ レンダラが DirectDraw オーバーレイ サーフェイスに描画する際、入力ピンに単一のバッファを割り当てる。アップストリーム フィルタが複数のバッファを使って接続を強制した場合、ビデオ レンダラは、オーバーレイ サーフェイスを使えない。