ファイル読み取り用のバッファーの割り当て
最も基本的なファイル読み取りシナリオでは、サンプルの配信に使用されるバッファーは、読み取りオブジェクト (リーダー オブジェクトまたは同期リーダー オブジェクト) によって割り当てられます。 ただし、バッファーは自分で割り当てることができます。 独自のバッファーを割り当てる利点の詳細については、「 ユーザー割り当てサンプル サポート」を参照してください。
ファイルの読み取りに独自のバッファーを使用するには、次の手順を実行します。
- バッファーが必要な場合にリーダーが呼び出すコールバックまたはコールバックを実装します。 出力サンプルを読み取る場合は、 IWMReaderAllocatorEx::AllocateForOutputEx を使用します。 ストリーム サンプルを読んでいる場合は、 IWMReaderAllocatorEx::AllocateForStreamEx を使用します。 アプリケーションに適したバッファーを管理するためのロジックを含めます。
- ファイルの読み取りに使用するバッファーのプールを割り当てます。
- バッファーに必要なサイズを見つけるには、バッファーが使用される出力またはストリームごとに IWMReaderAdvanced::GetMaxOutputSampleSize または IWMReaderAdvanced::GetMaxStreamSampleSize を呼び出します。 同期リーダーを使用する場合は、代わりに IWMSyncReader::GetMaxOutputSampleSize または IWMSyncReader::GetMaxStreamSampleSize を 使用します。
- プールの各バッファーを作成します。
- 読み取り用のリーダーまたは同期リーダーを設定します。 詳細については、「 非同期リーダーを使用したファイルの読み取り 」または「 同期リーダーを使用したファイルの読み取り」を参照してください。
- 書き込みを開始する前に、リーダー オブジェクトを使用してバッファーを割り当てる出力とストリームごとに、 IWMReaderAdvanced::SetAllocateForOutput または IWMReaderAdvanced::SetAllocateForStream を呼び出します。 同期リーダーの場合は、代わりに IWMSyncReader2::SetAllocateForOutput または IWMSyncReader2::SetAllocateForStream を 呼び出します。
- ファイルの読み取りを開始します。
読み取りオブジェクトは、適切なアロケーター コールバックを呼び出し、アプリケーションからサンプルを取得します。 バッファー管理ロジックには、バッファーが再び自由に使用されることを通知する方法が含まれている必要があります。 通常、バッファーは、その内容がレンダリングされるときにプールに戻されます。 アプリケーションによっては、プールまたは多数のバッファーが必要な場合があります。
関連トピック