为文件读取分配缓冲区
在最基本的文件读取方案中,用于传送样本的缓冲区由读取器对象 (读取器对象或同步读取器对象) 分配。 但是,可以自行分配缓冲区。 有关分配自己的缓冲区的好处的详细信息,请参阅 用户分配的示例支持。
若要使用自己的缓冲区读取文件,请执行以下步骤。
- 实现回调或回调,供读取器在需要缓冲区时调用。 如果要读取输出示例,请使用 IWMReaderAllocatorEx::AllocateForOutputEx。 如果要读取流示例,请使用 IWMReaderAllocatorEx::AllocateForStreamEx。 包括用于管理适合应用程序的缓冲区的任何逻辑。
- 分配将用于文件读取的缓冲区池。
- 通过为每个使用缓冲区的输出和/或流调用 IWMReaderAdvanced::GetMaxOutputSampleSize 或 IWMReaderAdvanced::GetMaxStreamSampleSize 来查找缓冲区所需的大小。 如果使用同步读取器,请改用 IWMSyncReader::GetMaxOutputSampleSize 或 IWMSyncReader::GetMaxStreamSampleSize 。
- 为池创建每个缓冲区。
- 设置读取器或同步读取器以供读取。 有关详细信息,请参阅 使用异步读取器读取文件 或使用 同步读取器读取文件。
- 在开始编写之前,请调用 IWMReaderAdvanced::SetAllocateForOutput 或 IWMReaderAdvanced::SetAllocateForStream ,以获取使用读取器对象为其分配缓冲区的每个输出和流。 对于同步读取器,请改为调用 IWMSyncReader2::SetAllocateForOutput 或 IWMSyncReader2::SetAllocateForStream 。
- 开始读取文件。
读取对象将调用相应的分配器回调,并从应用程序获取示例。 缓冲区管理逻辑必须包含一种方法来指示可以再次使用缓冲区。 通常,缓冲区在呈现其内容时放回池中。 根据应用程序的不同,你可能只需要池中的几个缓冲区或多个缓冲区。
相关主题