Поделиться через


Выделение буферов для чтения файлов

[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией.] Его заменили ридером источника и писателем приемника. Source Reader и Sink Writer были оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует в новом коде, когда это возможно, использовать Средство для чтения исходников и Запись данных приемника вместо Windows Media Format 11 SDK. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

В наиболее простом сценарии чтения файлов буферы, используемые для доставки примеров, выделяются объектом чтения (объектом чтения или синхронным объектом чтения). Однако вы можете выделить буферы самостоятельно. Дополнительные сведения о преимуществах выделения собственных буферов см. в разделе Поддержка выделенных пользователем образцов.

Чтобы использовать собственные буферы для чтения файлов, выполните следующие действия.

  1. Реализуйте один или несколько обратных вызовов, чтобы средство чтения могло вызывать их при необходимости буфера. Если вы просматриваете образцы вывода, используйте IWMReaderAllocatorEx::AllocateForOutputEx. Если вы читаете примеры потоков, используйте IWMReaderAllocatorEx::AllocateForStreamEx. Включите любую логику для управления буферами, которые соответствуют приложению.
  2. Выделите пул буферов, которые будут использоваться для чтения файлов.
  3. Настройте читатель или синхронный читатель. Дополнительные сведения см. в разделе "Чтение файлов с помощью асинхронного считывателя" или "Чтение файлов с помощью синхронного считывателя".
  4. Перед началом записи вызовите IWMReaderAdvanced::SetAllocateForOutput или IWMReaderAdvanced::SetAllocateForStream для каждого вывода и потока, для которого вы выделяете буферы с помощью объекта чтения. Для синхронного ридера вызовите IWMSyncReader2::SetAllocateForOutput или IWMSyncReader2::SetAllocateForStream.
  5. Начните чтение файла.

Объект чтения выполнит вызовы соответствующей функции обратного вызова распределителя и получит данные из вашего приложения. Логика управления буферами должна включать способ сигнализировать о том, что буфер недоступен для повторного использования. Как правило, буфер помещается обратно в пул при отрисовки его содержимого. В зависимости от вашего приложения, вам может потребоваться всего несколько буферов в пуле или большое их количество.

чтение файлов ASF