Om medietyper (Microsoft Media Foundation)
En medietyp beskriver formatet för en medieström. I Microsoft Media Foundation representeras medietyper av IMFMediaType--gränssnittet. Det här gränssnittet ärver IMFAttributes-gränssnittet. Information om en medietyp anges som attribut.
Om du vill skapa en ny medietyp anropar du funktionen MFCreateMediaType. Den här funktionen returnerar en pekare till IMFMediaType--gränssnittet. Medietypen har inledningsvis inga attribut. Ange relevanta attribut för att ange information om formatet.
En lista över mediatypattribut finns i Media Type Attributes.
Huvudtyper och undertyper
Två viktiga informationsdelar för alla medietyper är huvudtypen och undertypen.
- Den huvudtypen är ett GUID som definierar den övergripande kategorin för data i en medieström. Viktiga typer är video och ljud. Ange huvudtypen genom att ange attributet MF_MT_MAJOR_TYPE. Metoden IMFMediaType::GetMajorType returnerar värdet för det här attributet.
- Undertypen definierar formatet ytterligare. I videons huvudtyp finns det till exempel undertyper för RGB-24, RGB-32, YUY2 och så vidare. Inom ljud finns det PCM-ljud, IEEE-flyttalsljud och andra. Undertypen innehåller mer information än huvudtypen, men den definierar inte allt om formatet. Videoundertyper definierar till exempel inte bildstorleken eller bildhastigheten. För att ange undertypen ställer du in attributet MF_MT_SUBTYPE.
Alla medietyper ska ha en huvudtyps-GUID och en undertyps-GUID. En lista över huvudtyper och undertyper av GUID:er finns att se i GUID för medietyper.
Varför attribut?
Attribut har flera fördelar jämfört med de formatstrukturer som har använts i tidigare tekniker, till exempel DirectShow och Windows Media Format SDK.
Det är lättare att representera "vet inte" eller "bryr sig inte" värden. Om du till exempel skriver en videotransformering kanske du i förväg vet vilka RGB- och YUV-format som transformen stöder, men inte dimensionerna för videoramen, förrän du får dem från videokällan. På samma sätt kanske du inte bryr dig om vissa detaljer, som videons primärfärger. Med en formatstruktur måste varje medlem fyllas med något värde. Därför har det blivit vanligt att använda noll för att ange ett okänt eller standardvärde. Den här metoden kan orsaka fel om en annan komponent behandlar noll som ett legitimt värde. Med attribut utelämnar du helt enkelt de attribut som är okända eller inte relevanta för din komponent.
Eftersom kraven har ändrats över tid utökades formatstrukturerna genom att ytterligare data lades till i slutet av strukturen. Till exempel utökar WAVEFORMATEXTENSIBLEWAVEFORMATEX--strukturen. Den här metoden är felbenägen eftersom komponenter måste omvandla strukturpekare till andra strukturtyper. Attribut kan utökas på ett säkert sätt.
Ömsesidigt inkompatibla formatstrukturer har definierats. DirectShow definierar till exempel VIDEOINFOHEADER- och VIDEOINFOHEADER2 strukturer. Attribut anges oberoende av varandra, så det här problemet uppstår inte.
Relaterade ämnen