次の方法で共有


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

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

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

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

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

コーデック DMOを使って作業する