Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией.] Его заменили ридером источника и писателем приемника. Source Reader и Sink Writer были оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует в новом коде, когда это возможно, использовать Средство для чтения исходников и Запись данных приемника вместо Windows Media Format 11 SDK. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
В наиболее простом сценарии чтения файлов буферы, используемые для доставки примеров, выделяются объектом чтения (объектом чтения или синхронным объектом чтения). Однако вы можете выделить буферы самостоятельно. Дополнительные сведения о преимуществах выделения собственных буферов см. в разделе Поддержка выделенных пользователем образцов.
Чтобы использовать собственные буферы для чтения файлов, выполните следующие действия.
- Реализуйте один или несколько обратных вызовов, чтобы средство чтения могло вызывать их при необходимости буфера. Если вы просматриваете образцы вывода, используйте IWMReaderAllocatorEx::AllocateForOutputEx. Если вы читаете примеры потоков, используйте IWMReaderAllocatorEx::AllocateForStreamEx. Включите любую логику для управления буферами, которые соответствуют приложению.
- Выделите пул буферов, которые будут использоваться для чтения файлов.
- Найдите размер, необходимый для буферов, вызвав IWMReaderAdvanced::GetMaxOutputSampleSize или IWMReaderAdvanced::GetMaxStreamSampleSize для каждого вывода и /или потока, для которого используется буфер. При использовании синхронного средства чтения используйте IWMSyncReader::GetMaxOutputSampleSize или IWMSyncReader::GetMaxStreamSampleSize.
- Создайте каждый буфер для пула.
- Настройте читатель или синхронный читатель. Дополнительные сведения см. в разделе "Чтение файлов с помощью асинхронного считывателя" или "Чтение файлов с помощью синхронного считывателя".
- Перед началом записи вызовите IWMReaderAdvanced::SetAllocateForOutput или IWMReaderAdvanced::SetAllocateForStream для каждого вывода и потока, для которого вы выделяете буферы с помощью объекта чтения. Для синхронного ридера вызовите IWMSyncReader2::SetAllocateForOutput или IWMSyncReader2::SetAllocateForStream.
- Начните чтение файла.
Объект чтения выполнит вызовы соответствующей функции обратного вызова распределителя и получит данные из вашего приложения. Логика управления буферами должна включать способ сигнализировать о том, что буфер недоступен для повторного использования. Как правило, буфер помещается обратно в пул при отрисовки его содержимого. В зависимости от вашего приложения, вам может потребоваться всего несколько буферов в пуле или большое их количество.
Связанные разделы