Сведения о типах носителей (Microsoft Media Foundation)
Тип носителя описывает формат потока мультимедиа. В Microsoft Media Foundation типы мультимедиа представлены интерфейсом IMFMediaType. Этот интерфейс наследует интерфейс IMFAttributes. Сведения о типе носителя указываются в качестве атрибутов.
Чтобы создать новый тип носителя, вызовите функцию MFCreateMediaType. Эта функция возвращает указатель на интерфейс IMFMediaType. Изначально тип носителя не имеет атрибутов. Чтобы задать сведения о формате, задайте соответствующие атрибуты.
Список атрибутов типа мультимедиа см. в разделе Атрибуты типа мультимедиа.
Основные типы и подтипы
Два важных фрагмента информации для любого типа мультимедиа являются основным типом и подтипом.
- основной тип — это GUID, определяющий общую категорию данных в потоке мультимедиа. Основные типы включают видео и звук. Чтобы указать основной тип, задайте атрибут MF_MT_MAJOR_TYPE. Метод IMFMediaType::GetMajorType возвращает значение этого атрибута.
- Подтип дополнительно определяет формат. Например, в основном типе видео существуют подтипы RGB-24, RGB-32, YUY2 и т. д. В аудиоформатах есть PCM-аудио, аудио IEEE с плавающей точкой и другие форматы. Подтип предоставляет больше сведений, чем основной тип, но он не определяет все о формате. Например, подтипы видео не определяют размер изображения или частоту кадров. Чтобы указать подтип, задайте атрибут MF_MT_SUBTYPE.
Все типы медиа должны иметь GUID основного типа и GUID подтипа. Список основных типов и идентификаторов GUID подтипов см. в разделе идентификаторы GUID типов мультимедиа.
Почему атрибуты?
Атрибуты имеют несколько преимуществ по сравнению со структурами формата, которые использовались в предыдущих технологиях, таких как DirectShow и пакет SDK для формата Windows Media.
Проще представить значения "не знаю" или "не заботиться". Например, если вы пишете преобразование видео, вы можете заранее знать, какие форматы RGB и YUV поддерживают преобразование, но не размеры видеокадров, пока не получите их из источника видео. Аналогичным образом, вы можете не заботиться о некоторых деталях, таких как первичные видео. В формате структуры каждый элемент должен быть заполнен некоторым значением. В результате обычно используется ноль, чтобы указать неизвестное или значение по умолчанию. Эта практика может привести к ошибкам, если другой компонент рассматривает ноль как допустимое значение. С атрибутами вы просто опустите атрибуты, которые неизвестны или не относятся к компоненту.
По мере изменения требований структуры форматирования были расширены путем добавления дополнительных данных в конце структуры. Например, WAVEFORMATEXTENSIBLE расширяет структуру WAVEFORMATEX. Эта практика подвержена ошибкам, так как компоненты должны преобразовывать указатели структуры в другие типы структур. Атрибуты можно безопасно расширить.
Определены взаимоисключаемые структуры формата. Например, DirectShow определяет структуры VIDEOINFOHEADER и VIDEOINFOHEADER2. Атрибуты задаются независимо друг от друга, поэтому эта проблема не возникает.
Связанные разделы