Назначение форматов выходных данных

Некоторые кодеки могут распаковываться в нескольких несжатых форматах. Все поддерживаемые форматы для определенных выходных данных можно найти с помощью асинхронного или синхронного средства чтения.

Чтобы изучить все доступные форматы выходных данных, выполните следующие действия. Эти процедуры идентичны как для асинхронного средства чтения, так и для синхронного средства чтения. Если имена интерфейсов различаются, синхронные методы средства чтения перечислены в скобках после методов асинхронного средства чтения.

  1. Создайте объект чтения и загрузите файл для чтения. Дополнительные сведения см. в разделах Создание средства чтения и Открытие файла (или Создание синхронного средства чтения и Открытие файла).

  2. Определите выходные данные, для которых требуется найти доступные форматы. Если вы еще не знаете, какие выходные данные вы хотите использовать, можно определить выходные данные в файле с помощью процедур, описанных в разделе Определение выходных чисел.

  3. Получите общее количество доступных форматов для нужных выходных данных, вызвав IWMReader::GetOutputFormatCount (или IWMSyncReader::GetOutputFormatCount).

  4. Циклически перебирайте доступные форматы по одному, выполняя следующие действия для каждого из них:

    • Получите интерфейс IWMOutputMediaProps для текущего формата вывода, вызвав IWMReader::GetOutputFormat (или IWMSyncReader::GetOutputFormat).

    • Получите структуру WM_MEDIA_TYPE для формата вывода, выполнив два вызова IWMMediaProps::GetMediaType. Выполните первый вызов, чтобы получить размер структуры, затем выделить для нее память и передать указатель на выделенную память во втором вызове.

    • Найдите подтип мультимедиа формата вывода в WM_MEDIA_TYPE.subtype.

    • Для видео, если текущий подтип является форматом, который вы хотите использовать для вывода, прервите цикл. В противном случае перейдите к следующей итерации.

      Для звука необходимо проверка значения в структуре WAVEFORMATEX в соответствии с вашими требованиями. WM_MEDIA_TYPE.pbFormat указывает на структуру WAVEFORMATEX для аудиовыходов.

  5. Когда вы найдете нужные выходные данные, задайте их для использования со средством чтения, вызвав IWMReader::SetOutputProps (или IWMSyncReader::SetOutputProps). Необходимо передать указатель на интерфейс IWMOutputMediaProps, полученный на первом шаге цикла.

Интерфейс IWMMediaProps

Интерфейс IWMOutputMediaProps

Интерфейс IWMReader

Интерфейс IWMSyncReader

Работа с выходными данными