Выделение буферов для чтения файлов
В самом базовом сценарии чтения файлов буферы, используемые для доставки примеров, выделяются объектом чтения (объектом чтения или синхронным объектом чтения). Однако вы можете выделить буферы самостоятельно. Дополнительные сведения о преимуществах выделения собственных буферов см. в разделе Поддержка выделенных пользователем примеров.
Чтобы использовать собственные буферы для чтения файлов, выполните следующие действия.
- Реализуйте обратный вызов или обратные вызовы, чтобы средство чтения вызывало, когда ему требуется буфер. Если вы читаете выходные примеры, используйте IWMReaderAllocatorEx::AllocateForOutputEx. Если вы читаете примеры потоков, используйте IWMReaderAllocatorEx::AllocateForStreamEx. Включите любую логику для управления буферами, которая подходит вашему приложению.
- Выделите пул буферов, которые будут использоваться для чтения файлов.
- Найдите необходимый размер буферов, вызвав метод IWMReaderAdvanced::GetMaxOutputSampleSize или IWMReaderAdvanced::GetMaxStreamSampleSize для каждого вывода и/или потока, для которого используется буфер. При использовании синхронного средства чтения используйте вместо него IWMSyncReader::GetMaxOutputSampleSize или IWMSyncReader::GetMaxStreamSampleSize .
- Создайте каждый буфер для пула.
- Настройте средство чтения или синхронное средство чтения для чтения. Дополнительные сведения см. в разделе Чтение файлов с помощью асинхронного средства чтения или Чтение файлов с помощью синхронного средства чтения.
- Перед началом записи вызовите IWMReaderAdvanced::SetAllocateForOutput или IWMReaderAdvanced::SetAllocateForStream для каждого вывода и потока, для которого вы выделяете буферы с помощью объекта чтения. Для синхронного средства чтения вызовите вместо него IWMSyncReader2::SetAllocateForOutput или IWMSyncReader2::SetAllocateForStream .
- Начните чтение файла.
Объект чтения будет выполнять вызовы к соответствующему обратному вызову распределителя и получать примеры из приложения. Логика управления буфером должна включать способ сообщить о том, что буфер можно использовать снова. Как правило, буфер помещается обратно в пул при отрисовки его содержимого. В зависимости от приложения может потребоваться всего несколько буферов в пуле или несколько.
Связанные темы