ビデオ レンダラー フィルター
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
ビデオ レンダラー フィルターは、堅牢で汎用のビデオ レンダラーです。
注意
Windows XP 以降では、既定のビデオ レンダラーは ビデオ ミキシング レンダラー フィルター 7 (VMR-7) です。 VMR-7 とビデオ レンダラーの両方に、"Video Renderer" というフレンドリ名があります。以前のプラットフォームでは、ビデオ レンダラーが既定のレンダラーです。 「 適切なレンダラーの選択」を参照してください。
ビデオ レンダラーは、ビデオ カードでサポートされている場合、DirectDraw サーフェスとオーバーレイ サーフェスを使用します。 フィルター グラフ マネージャーは IVideoWindow インターフェイスを公開します。これにより、アプリケーションはビデオ レンダラーのプロパティを設定および取得できます。 新しいビデオ カードでは、ビデオ レンダラーは全画面表示レンダリングをサポートします。 それ以外の場合、フィルター グラフ マネージャーは全画面表示モードの 全画面表示レンダラー フィルターに自動的に切り替わります。 詳細については、「 IVideoWindow::p ut_FullScreenMode 」を参照してください。
![重要]
通常、このフィルターのビデオ ウィンドウでは、フィルター グラフ マネージャーによって作成されたワーカー スレッド上のメッセージが処理されます。 Howerver では、アプリケーションが CoCreateInstance を使用してフィルターを直接作成する場合、ビデオ ウィンドウによってアプリケーション スレッド上のメッセージが処理されます。 その場合、ビデオ ウィンドウにメッセージをディスパッチするには、アプリケーション スレッドにメッセージ ループが必要です。 また、フィルター グラフ マネージャーがシャットダウンしたときに発生するビデオ レンダラーに対する最後の リリース 呼び出しまで、スレッドを終了することはできません。 そうしないと、アプリケーションがデッドロックする可能性があります。
Label | 値 |
---|---|
フィルター インターフェイス | IBaseFilter、 IBasicVideo、 IBasicVideo2、 IDirectDrawVideo、 IKsPropertySet、 IMediaPosition、 IMediaSeeking、 IQualityControl、 IQualProp、 IVideoWindow |
入力ピン メディアの種類 | 圧縮されていないビデオ形式。 |
入力ピン インターフェイス | IMemInputPin、 IOverlay、 IPin、 IPinConnection、 IQualityControl |
出力ピン メディアの種類 | 該当なし。 |
出力ピン インターフェイス | 該当なし。 |
CLSID をフィルター処理する | CLSID_VideoRenderer |
プロパティ ページ CLSID | プロパティ ページがありません。 |
[実行可能ファイル] | quartz.dll |
メリット | Windows XP 以降: MERIT_UNLIKELY |
フィルター カテゴリ | CLSID_LegacyAmFilterCategory |
解説
Quartz.dllのデバッグ バージョンで、LOG_TRACEデバッグ レベルが 5 以上に設定されている場合、ビデオ レンダラーは各フレームのタイム スタンプをビデオ ウィンドウに表示します。 これらの番号は、DLL の製品版には表示されません。 詳細については、「 出力関数のデバッグ」を参照してください。
次の解説は、フィルター開発者を対象としています。
ビデオ グラフィックス カードが YUV オーバーレイ サーフェスをサポートしている場合、ビデオ レンダラーは YUV 形式を受け入れます。 ただし、最初にアップストリーム フィルターに接続する場合、ビデオ レンダラーには、現在のモニター設定の色深度に一致する RGB 形式が必要です。 たとえば、現在の表示設定が 24 ビットカラーの場合、アップストリーム フィルターは 24 ビット RGB ビデオを提供できる必要があります。 フィルター グラフが実行状態に切り替わると、ビデオ レンダラーは動的な形式の変更を適切な YUV 色空間にネゴシエートします。
RGB 型で接続することで、DirectDraw が使用できない場合に備えて、ビデオ レンダラーで GDI を使用できるようになります。 別のアプリケーションがビデオ メモリを使用している場合、ビデオ四角形がマルチモニター システム上の 2 つのモニターをまたぐ場合、またはビデオの四角形が別のウィンドウによって完全に隠されている場合は、GDI に切り替わります。
注意
ビデオ ミキシング レンダラーでは、この種類の動的な形式の変更は実行されず、レンダリングに GDI を使用しないため、RGB メディアの種類は必要ありません。
フォーマットの変更をネゴシエートするために、ビデオ レンダラーは新しいメディアタイプで IPin::QueryAccept を呼び出します。 アップストリーム フィルターがS_OKを返す場合、ビデオ レンダラーは新しいメディアを次のサンプルにアタッチします。 アップストリーム フィルターは、各サンプル で IMediaSample::GetMediaType を呼び出す必要があります。 GetMediaType が NULL 以外の値を返す場合は、形式の変更を示し、アップストリーム フィルターは出力の種類を切り替えることによって応答する必要があります。 ( QueryAccept メソッドで型を切り替えないでください。アップストリーム フィルターは、少なくとも主要な RGB 型を受け入れる必要があり、理想的には一般的な YUV 型をサポートする必要があります。 ストリーミング中に、ビデオ レンダラーは YUV 型と RGB 型を何度も切り替える場合があります。 ビデオ レンダラーでは、アップストリーム フィルターによって開始された動的な形式の変更は受け入れられません。
ビデオ レンダラーは、DirectDraw オーバーレイ サーフェスに描画するときに、入力ピンに 1 つのバッファーを割り当てます。 アップストリーム フィルターが複数のバッファーを使用して接続を強制しようとすると、ビデオ レンダラーはオーバーレイ サーフェスを使用できなくなります。
関連トピック