カスタム ビデオ リサイザの提供
注 : この機能には DirectX 9.0 以降が必要である。
DirectShow 編集サービス (DES) がビデオ ソース クリップをサイズ変更するとき、デフォルト動作は StretchBlt である。StretchBlt は高速だがアンチエイリアスではない。DirectShow 変換フィルタとしてカスタム リサイザを実装すると、サイズ変更の動作を変更できる。フィルタは IResize インターフェイスを公開する必要がある。DES はこのインターフェイスを使って入出力ビデオ サイズを指定できる。変換フィルタの作成の詳細については、「変換フィルタの作成」を参照すること。最初に CTransformFilter 基底クラスを使うことをお勧めする。フィルタを実装するときは、以下のことに注意すること。
- IResize インターフェイスは、ピンではなくフィルタでサポートする。
- フィルタは VIDEOINFOHEADER フォーマット (FORMAT_VideoInfo) のみ受け付けること。他のフォーマット タイプは拒否する。
- DES からのビデオ フォーマットは、アルファを持つ 32 ビット RGB (MEDIASUBTYPE_ARGB32) を含め、任意の非圧縮 RGB タイプになる。biHeight < 0 のフォーマットはフィルタで拒否しても問題ない。
- レンダリング エンジンはフィルタの出力ピンを接続する前に、IResize::put_MediaType を呼び出して出力タイプを設定する。また、IResize::put_Size を呼び出して、出力サイズを調整することがある。出力ピンに接続する前に、これら 2 つのメソッドを任意の順序で何回か呼び出すことがある。
- レンダリング エンジンは、出力ピンに接続した後、もう一度 put_Size を呼び出すことがある。リサイザ フィルタはその出力ピンを新しいサイズで再接続すること。
- フィルタの CTransformFilter::Transform メソッド内で、入力ビデオを出力サイズに拡大する。
- フィルタは、出力サンプルに不連続フラグを設定したり、出力サンプルにメディア タイプをアタッチしたりしてはならない。
- GraphEdit (.grf) ファイルにフィルタの状態を保存するには、IPersistStream インターフェイスを実装する。(これはオプションだが、テストに役立つ。)
リサイザ フィルタを使うには、ユーザーのシステムにフィルタを COM オブジェクトとして登録しなければならない。アプリケーションがビデオ プロジェクトをレンダリングする前に、IRenderEngine2 についてレンダリング エンジンに問い合わせ、リサイザ フィルタの CLSID を使って IRenderEngine2::SetResizerGUID を呼び出す。