MFT メディア バッファーとサンプルの操作
コーデック MFT は、メディア バッファーとサンプルを使用してメディア データを送受信します。
メディア バッファーは、通常はメディア データを保持するためにメモリ ブロックを管理する COM オブジェクトです。 MFT 間でデータが渡されると、常にメディア バッファーの形式で渡されます。
すべてのメディア バッファーは、 IMFMediaBuffer インターフェイスを 公開します。 このインターフェイスは、あらゆる種類のデータ用に設計されています。 ビデオ データを含むバッファーでは、多くの場合、 IMF2DBuffer も公開されます。
メディア バッファーの最大サイズは、バッファーに割り当てられたメモリの量です。 最大サイズを見つけるには、 IMFMediaBuffer::GetMaxLength を呼び出します。 メディア バッファーには、任意の時点で現在の長さもあります。これは、バッファー内の有効なデータの量であり、0 バイトから最大サイズまでの範囲です。 現在の長さを取得するには、 IMFMediaBuffer::GetCurrentLength を呼び出します。 バッファーが作成されると、現在の長さは 0 になります。 バッファーにデータを書き込む場合は、 IMFMediaBuffer::SetCurrentLength を呼び出して現在の長さを更新します。
バッファー内のメモリにアクセスするには、 IMFMediaBuffer::Lock を呼び出します。 このメソッドは、メモリ ブロックの先頭へのポインターを返します。 ポインターの使用が完了したら、 IMFMediaBuffer::Unlock を呼び出します。 Lock メソッドはスレッド同期メカニズムではありません。他のスレッドがバッファーにアクセスできないことは保証されません。 Lock メソッドは、Unlock メソッドを呼び出すまで、アクセスされるメモリが有効なままであることを保証するために使用されます。
メディア サンプル オブジェクト (Media Foundation SDK のコンテキスト) は、0 個以上のバッファーの順序付きリストを含むオブジェクトです。 メディア サンプルは、 IMFSample インターフェイスを公開します。
新しいサンプルを作成するには、 MFCreateSample 関数を呼び出します。 最初は、サンプルのバッファー リストが空です。 リストの末尾にバッファーを追加するには、 IMFSample::AddBuffer を呼び出します。
関連トピック