Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Typ nośnika opisuje format strumienia medialnego. W programie Microsoft Media Foundation typy multimediów są reprezentowane przez interfejs IMFMediaType. Ten interfejs dziedziczy interfejs IMFAttributes. Szczegóły typu nośnika są określane jako atrybuty.
Aby utworzyć nowy typ nośnika, wywołaj funkcję MFCreateMediaType. Ta funkcja zwraca wskaźnik do interfejsu IMFMediaType. Typ nośnika początkowo nie ma atrybutów. Aby ustawić szczegóły formatu, ustaw odpowiednie atrybuty.
Aby uzyskać listę atrybutów typu nośnika, zobacz atrybuty typu nośnika .
Typy główne i podtypy
Dwa ważne informacje dla dowolnego typu nośnika to typ główny i podtyp.
- Typ główny to identyfikator GUID, który definiuje ogólną kategorię danych w strumieniu multimedialnym. Główne typy obejmują wideo i dźwięk. Aby określić typ główny, ustaw atrybut MF_MT_MAJOR_TYPE. Metoda IMFMediaType::GetMajorType zwraca wartość tego atrybutu.
- Podtyp dodatkowo definiuje format. Na przykład w typie głównym wideo istnieją podtypy RGB-24, RGB-32, YUY2 itd. W obrębie dźwięku istnieje dźwięk PCM, dźwięk zmiennoprzecinkowy IEEE i inne. Podtyp zawiera więcej informacji niż typ główny, ale nie definiuje wszystkiego o formacie. Na przykład podtypy wideo nie definiują rozmiaru obrazu ani szybkości klatek. Aby określić podtyp, ustaw atrybut MF_MT_SUBTYPE.
Wszystkie typy multimediów powinny mieć identyfikator GUID typu głównego i identyfikator GUID podtypu. Aby uzyskać listę identyfikatorów GUID typu głównego i podtypu, zobacz identyfikatory GUID typu nośnika .
Dlaczego atrybuty?
Atrybuty mają kilka zalet w porównaniu ze strukturami formatów, które zostały użyte w poprzednich technologiach, takich jak DirectShow i Zestaw SDK formatu Windows Media.
Łatwiej jest reprezentować wartości "nie wiem" lub "nie obchodzi". Jeśli na przykład piszesz transformację wideo, możesz wiedzieć z wyprzedzeniem, które formaty RGB i YUV obsługują transformację, ale nie wymiary ramki wideo, dopóki nie uzyskasz ich ze źródła wideo. Podobnie możesz nie przejmować się pewnymi szczegółami, takimi jak podstawowe ustawienia wideo. W przypadku struktury formatu każdy element członkowski musi być wypełniony jakąś wartością . W związku z tym często używa się wartości zero, aby wskazać nieznaną lub domyślną wartość. Ta praktyka może powodować błędy, jeśli inny składnik traktuje zero jako wiarygodną wartość. W przypadku atrybutów po prostu pomiń atrybuty, które są nieznane lub nie są istotne dla składnika.
Wraz ze zmianą wymagań struktury formatowania zostały rozszerzone przez dodanie dodatkowych danych na końcu struktury. Na przykład WAVEFORMATEXTENSIBLE rozszerza strukturę WAVEFORMATEX. Ta praktyka jest podatna na błędy, ponieważ komponenty muszą rzutować wskaźniki struktury na inne typy struktur. Atrybuty można bezpiecznie rozszerzyć.
Zdefiniowano wzajemnie niezgodne struktury formatu. Na przykład DirectShow definiuje struktury VIDEOINFOHEADER i VIDEOINFOHEADER2. Atrybuty są ustawiane niezależnie od siebie, więc ten problem nie występuje.
Tematy pokrewne