カスタム ビデオ リサイズャーの提供
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
[この API はサポートされていないため、今後変更または使用できない可能性があります。]
注意
この機能には DirectX 9.0 以降が必要です。
DirectShow Editing Services (DES) がビデオ ソース クリップのサイズを変更する場合、既定の動作は StretchBlt であり、高速ですがアンチエイリアス化されません。 DirectShow 変換フィルターとしてカスタム リサイズツールを実装することで、サイズ変更の動作を変更できます。 フィルターは IResize インターフェイスを公開する必要があります。これにより、DES で入力と出力のビデオ サイズを指定できます。 変換フィルターの書き込みの詳細については、「変換フィルターの 記述」を参照してください。 CTransformFilter 基本クラスを開始点としてお勧めします。 フィルターを実装する場合は、次の点に注意してください。
- (ピンではなく) フィルターで IResize インターフェイスをサポートします。
- フィルターは VIDEOINFOHEADER 形式 (FORMAT_VideoInfo) のみを受け入れる必要があります。 その他の形式の種類を拒否します。
- DES からのビデオ形式は、アルファ (MEDIASUBTYPE_ARGB32) を持つ 32 ビット RGB を含む、非圧縮の RGB 型にすることができます。 フィルターは 、biHeight< 0 の形式を安全に拒否できます。
- レンダー エンジンは、フィルターの出力ピンを接続する前に、 IResize::p ut_MediaType を呼び出して出力の種類を設定します。 また、 IResize::p ut_Size を呼び出して出力サイズを調整することもできます。 これら 2 つのメソッドは、出力ピンを接続する前に、任意の順序で何度でも呼び出すことができます。
- レンダー エンジンが出力ピンを接続した後、 put_Size を再度呼び出す場合があります。 resizer フィルターは、出力ピンを新しいサイズに再接続する必要があります。
- フィルターの CTransformFilter::Transform メソッド内で、入力ビデオを出力サイズに拡大します。
- フィルターで出力サンプルに不連続性フラグを設定したり、メディアの種類を出力サンプルにアタッチしたりしないでください。
- フィルターの状態を GraphEdit (.grf) ファイルに保存するには、 IPersistStream インターフェイスを実装します。 (これは省略可能ですが、テストに役立ちます)。
リサイズ フィルターを使用するには、ユーザーのシステムでフィルターを COM オブジェクトとして登録する必要があります。 アプリケーションがビデオ プロジェクトをレンダリングする前に、レンダリング エンジンに IRenderEngine2 インターフェイスのクエリを実行し、リサイズフィルターの CLSID を使用して IRenderEngine2::SetResizerGUID を呼び出します。
関連トピック