次の方法で共有


手順 1. 基底クラスの選択

DMO ではなくフィルタの作成を決定したと想定すると、最初の手順は、使用する基底クラスを選択することである。変換フィルタには次のクラスが適している。

  • CTransformFilter は、異なる入力バッファと出力バッファを使う変換フィルタ用に設計されている。この種のフィルタは "コピー変換" フィルタとも呼ばれる。コピー変換フィルタが入力サンプルを受信すると、出力サンプルに新しいデータを書き込み、出力サンプルを次のフィルタに送信する。
  • CTransInPlaceFilter は元のバッファ内にあるデータを変更するフィルタ用に設計されている。"変換インプレイス" フィルタとも呼ばれる。変換インプレイス フィルタがサンプルを受信すると、そのサンプル内のデータを変更し、同じサンプルをダウンストリーム方向に送信する。フィルタの入力ピンと出力ピンは常にメディア タイプが一致して接続する。
  • CVideoTransformFilter は、主にビデオ デコーダ用に設計されている。このクラスは CTransformFilter から派生しているが、ダウンストリーム レンダラが遅れた場合にフレームをドロップする機能を持っている。
  • CBaseFilter は汎用フィルタ クラスである。この一覧の他のクラスはすべて CBaseFilter から派生している。いずれのクラスも適さない場合、このクラスまで戻れる。ただし、このクラスを使う場合、開発者側の作業負担も大きくなる。

重要 :  インプレイス ビデオ変換はレンダリングのパフォーマンスに大きな影響を与えることがある。インプレイス変換ではバッファにおける読み取り、変更、書き込みの処理が必要となる。グラフィック カードにメモリがある場合、読み取り処理は非常に遅くなる。さらに、不注意に実装すると、コピー変換でも意図しない読み取り処理が発生することがある。したがって、ビデオ変換を作成する場合は、必ずパフォーマンス テストを行うこと。

RLE エンコーダの例には、CTransformFilter または CVideoTransformFilter が最も適している。実際、両者の違いの多くは内部的なものであるため、一方から他方には簡単に変換できる。メディア タイプは 2 つのピンで異なる必要があるため、CTransInPlaceFilter クラスはこのフィルタには適さない。この例では CTransformFilter を使う。