Informationen zu Medientypen (Microsoft Media Foundation)

Ein Medientyp beschreibt das Format eines Mediendatenstroms. In Microsoft Media Foundation werden Medientypen durch die IMFMediaType-Schnittstelle dargestellt. Diese Schnittstelle erbt die IMFAttributes-Schnittstelle . Die Details eines Medientyps werden als Attribute angegeben.

Um einen neuen Medientyp zu erstellen, rufen Sie die MFCreateMediaType-Funktion auf. Diese Funktion gibt einen Zeiger auf die IMFMediaType-Schnittstelle zurück. Der Medientyp verfügt zunächst über keine Attribute. Um die Details des Formats festzulegen, legen Sie die relevanten Attribute fest.

Eine Liste der Medientypattribute finden Sie unter Medientypattribute.

Haupttypen und Untertypen

Zwei wichtige Informationen für jeden Medientyp sind der Haupttyp und der Untertyp.

  • Der Haupttyp ist eine GUID, die die Gesamtkategorie der Daten in einem Mediendatenstrom definiert. Zu den Haupttypen gehören Video und Audio. Legen Sie zum Angeben des Haupttyps das attribut MF_MT_MAJOR_TYPE fest. Die IMFMediaType::GetMajorType-Methode gibt den Wert dieses Attributs zurück.
  • Der Untertyp definiert das Format weiter. Beispielsweise gibt es innerhalb des Video-Haupttyps Untertypen für RGB-24, RGB-32, YUY2 usw. Innerhalb von Audio gibt es PCM-Audio, IEEE-Gleitkommaaudio und andere. Der Untertyp stellt mehr Informationen als der Haupttyp bereit, definiert aber nicht alles über das Format. Videountertypen definieren beispielsweise nicht die Bildgröße oder die Bildfrequenz. Legen Sie zum Angeben des Untertyps das attribut MF_MT_SUBTYPE fest.

Alle Medientypen sollten über eine Haupttyp-GUID und eine Untertyp-GUID verfügen. Eine Liste der Haupttyp- und Untertyp-GUIDs finden Sie unter Medientyp-GUIDs.

Warum Attribute?

Attribute haben mehrere Vorteile gegenüber den Formatstrukturen, die in früheren Technologien wie DirectShow und dem Windows Media Format SDK verwendet wurden.

  • Es ist einfacher, Werte für "weiß nicht" oder "egal" darzustellen. Wenn Sie beispielsweise eine Videotransformation schreiben, wissen Sie möglicherweise im Voraus, welche RGB- und YUV-Formate die Transformation unterstützt, aber nicht die Abmessungen des Videoframes, bis Sie sie von der Videoquelle erhalten. Ebenso interessieren Sie sich möglicherweise nicht für bestimmte Details, z. B. die Videovorwahlen. Bei einer Formatstruktur muss jeder Member mit einem Wert gefüllt werden. Daher ist es üblich geworden, null zu verwenden, um einen unbekannten oder Standardwert anzugeben. Diese Vorgehensweise kann zu Fehlern führen, wenn eine andere Komponente null als legitimen Wert behandelt. Bei Attributen lassen Sie einfach die Attribute weg, die für Ihre Komponente unbekannt oder nicht relevant sind.

  • Da sich die Anforderungen im Laufe der Zeit geändert haben, wurden Formatstrukturen erweitert, indem zusätzliche Daten am Ende der Struktur hinzugefügt wurden. Beispielsweise erweitert WAVEFORMATEXTENSIBLE die WAVEFORMATEX-Struktur . Diese Vorgehensweise ist fehleranfällig, da Komponenten Strukturzeiger auf andere Strukturtypen umwandeln müssen. Attribute können sicher erweitert werden.

  • Es wurden gegenseitig inkompatible Formatstrukturen definiert. Beispielsweise definiert DirectShow die Strukturen VIDEOINFOHEADER und VIDEOINFOHEADER2 . Attribute werden unabhängig voneinander festgelegt, sodass dieses Problem nicht auftritt.

Medientypattribute

Medientypen