O typech médií (Microsoft Media Foundation)
Typ média popisuje formát mediálního proudu. Ve službě Microsoft Media Foundation jsou typy médií reprezentovány rozhraním HFMediaType. Toto rozhraní dědí IMFAttributes rozhraní. Podrobnosti o typu média jsou zadány jako atributy.
Chcete-li vytvořit nový typ média, zavolejte funkci MFCreateMediaType. Tato funkce vrátí ukazatel na rozhraní MMFMediaType. Typ média zpočátku nemá žádné atributy. Chcete-li nastavit podrobnosti o formátu, nastavte relevantní atributy.
Seznam atributů typů médií najdete v tématu Atributy typu média.
Hlavní typy a podtypy
Dva důležité informace pro jakýkoli typ média jsou hlavním typem a podtypem.
- hlavní typ je identifikátor GUID, který definuje celkovou kategorii dat v datovém proudu médií. Mezi hlavní typy patří video a zvuk. Chcete-li zadat hlavní typ, nastavte atribut MF_MT_MAJOR_TYPE. MMFMediaType::GetMajorType metoda vrátí hodnotu tohoto atributu.
- Podtyp dále definuje formát. Například v rámci hlavního typu videa existují podtypy pro RGB-24, RGB-32, YUY2 atd. V rámci zvuku existují PCM zvuk, IEEE plovoucí desetinný zvuk a další. Podtyp poskytuje více informací než hlavní typ, ale nedefinuje všechno o formátu. Například podtypy videa nedefinují velikost obrázku ani frekvenci snímků. Chcete-li zadat podtyp, nastavte atribut MF_MT_SUBTYPE.
Všechny typy médií by měly mít identifikátor GUID hlavního typu a identifikátor GUID podtypu. Pro seznam identifikátorů GUID hlavního typu a podtypů, viz identifikátory GUID typů médií.
Proč atributy?
Atributy mají oproti strukturám formátu, které se používaly v předchozích technologiích, jako je DirectShow a sada Windows Media Format SDK, několik výhod.
Je jednodušší znázorňovat hodnoty "nevím" nebo "nezajímá". Pokud například píšete transformaci videa, můžete předem vědět, které formáty RGB a YUV transformace podporuje, ale ne rozměry video rámce, dokud je nezískáte ze zdroje videa. Podobně se nemusíte starat o určité podrobnosti, jako je video primarie. S formátovou strukturou musí být každý člen vyplněný určitou hodnotou. V důsledku toho se běžně používá nula k označení neznámé nebo výchozí hodnoty. Tento postup může způsobit chyby, pokud jiná komponenta považuje nulu za legitimní hodnotu. S atributy jednoduše vynecháte atributy, které jsou neznámé nebo nejsou relevantní pro vaši komponentu.
Vzhledem k tomu, že se požadavky v průběhu času změnily, byly struktury formátu rozšířeny přidáním dalších dat na konec struktury. Například WAVEFORMATEXTENSIBLE rozšiřuje strukturu WAVEFORMATEX. Tento postup je náchylný k chybám, protože komponenty musí přetypovat ukazatele struktury na jiné typy struktur. Atributy lze bezpečně rozšířit.
Byly definovány vzájemně nekompatibilní struktury formátu. DirectShow například definuje struktury VIDEOINFOHEADER a VIDEOINFOHEADER2. Atributy jsou nastaveny nezávisle na sobě, takže k tomuto problému nedojde.
Související témata