次の方法で共有


カスタム ビデオ リサイザの提供

 :  この機能には 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 を呼び出す。