次の方法で共有


DMO メディア バッファーの操作

入力データは、メディア バッファーを使用してコーデック DNO に渡されます。 メディア バッファーは、 IMediaBuffer インターフェイスを実装するオブジェクトです。 この目的で クラスを実装することも、アプリケーションで Windows Media Format SDK を使用している場合は、その SDK で定義されているバッファー オブジェクトを使用することもできます。

独自のバッファー クラスを実装する場合は、バッファー メモリの処理方法に注意してください。 入力サンプルを渡すと、DMO はサンプルが終了するまでバッファーへの参照を保持します。 IMediaBuffer インターフェイスへの参照をすぐに解放できますが、コーデックで参照が不要になったタイミングを知る方法はありません。 オブジェクトがそれ自体を削除したときにメモリが解放されることを確認するには、バッファーのメモリを内部的に割り当てて解放するようにクラスを実装する必要があります。

DMU はバッファーへの参照を不明な期間保持するため、バッファーの限られたプールを使用することは簡単なことではありません。 最も簡単な解決策は、サンプルごとに新しいバッファーを割り当てることですが、これは非効率的です。

より優れた解決策は、 オブジェクトを実装してバッファーのプールを管理することです。 これを行うには、IMediaBuffer 実装の Release メソッドに、参照カウントが 0 に下がったときにバッファー マネージャーのメソッドを (それ自体を削除するのではなく) 呼び出すコードを記述します。 その後、バッファー マネージャーは、割り当てられたバッファー オブジェクトへのポインターの一覧を保持できます。 バッファー マネージャーにメソッドを作成して空きバッファーの一覧をチェックし、必要に応じてアプリケーションがバッファーにアクセスできるようにポインターを返します。 このメソッドでは、必要に応じて新しいバッファーを作成し、一覧に追加する必要があります。

コーデック DLO の操作