Назначение форматов выходных данных
Некоторые кодеки могут распаковываться в нескольких несжатых форматах. Все поддерживаемые форматы для определенных выходных данных можно найти с помощью асинхронного или синхронного средства чтения.
Чтобы изучить все доступные форматы выходных данных, выполните следующие действия. Эти процедуры идентичны как для асинхронного средства чтения, так и для синхронного средства чтения. Если имена интерфейсов различаются, синхронные методы средства чтения перечислены в скобках после методов асинхронного средства чтения.
Создайте объект чтения и загрузите файл для чтения. Дополнительные сведения см. в разделах Создание средства чтения и Открытие файла (или Создание синхронного средства чтения и Открытие файла).
Определите выходные данные, для которых требуется найти доступные форматы. Если вы еще не знаете, какие выходные данные вы хотите использовать, можно определить выходные данные в файле с помощью процедур, описанных в разделе Определение выходных чисел.
Получите общее количество доступных форматов для нужных выходных данных, вызвав IWMReader::GetOutputFormatCount (или IWMSyncReader::GetOutputFormatCount).
Циклически перебирайте доступные форматы по одному, выполняя следующие действия для каждого из них:
Получите интерфейс IWMOutputMediaProps для текущего формата вывода, вызвав IWMReader::GetOutputFormat (или IWMSyncReader::GetOutputFormat).
Получите структуру WM_MEDIA_TYPE для формата вывода, выполнив два вызова IWMMediaProps::GetMediaType. Выполните первый вызов, чтобы получить размер структуры, затем выделить для нее память и передать указатель на выделенную память во втором вызове.
Найдите подтип мультимедиа формата вывода в WM_MEDIA_TYPE.subtype.
Для видео, если текущий подтип является форматом, который вы хотите использовать для вывода, прервите цикл. В противном случае перейдите к следующей итерации.
Для звука необходимо проверка значения в структуре WAVEFORMATEX в соответствии с вашими требованиями. WM_MEDIA_TYPE.pbFormat указывает на структуру WAVEFORMATEX для аудиовыходов.
Когда вы найдете нужные выходные данные, задайте их для использования со средством чтения, вызвав IWMReader::SetOutputProps (или IWMSyncReader::SetOutputProps). Необходимо передать указатель на интерфейс IWMOutputMediaProps, полученный на первом шаге цикла.
Связанные темы