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.
[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]
Typ nośnika opisuje format skojarzony ze strumieniem danych multimedialnych. W tym artykule opisano sposób obsługi typów multimediów przez obiekty DMO. Jest ona przeznaczona głównie dla deweloperów, którzy piszą własne niestandardowe obiekty DMO.
Typy multimediów są definiowane przy użyciu struktury DMO_MEDIA_TYPE. Ta struktura zawiera następujące informacje:
- Typ główny to unikatowy identyfikator globalny (GUID), który definiuje szeroką kategorię, taką jak audio lub wideo.
- Podtyp jest identyfikatorem GUID, który definiuje bardziej szczegółowe aspekty typu. Na przykład w ramach wideo podtypy obejmują 16-bitowy RGB, 24-bitowy RGB, UYVY, wideo zakodowane w formacie DV itd.
- Blok formatu jest strukturą pomocniczą, która w pełni określa format. Układ bloku formatu zależy od typu danych. Na przykład dźwięk PCM używa struktury WAVEFORMATEX. Wideo korzysta z różnych innych struktur, w tym VIDEOINFOHEADER i VIDEOINFOHEADER2. Układ bloku formatu jest identyfikowany przez identyfikator GUID typu formatu. Na przykład FORMAT_WaveFormatEx określa strukturę WAVEFORMATEX.
Po pierwszym utworzeniu dmo strumienie nie mają typu nośnika. Zanim dmo może przetworzyć dowolne dane, klient musi ustawić typ nośnika dla każdego strumienia. Ten proces jest opisany z perspektywy klienta w Ustawianie typów multimediów wDMO.
typy multimediów w rejestrze
Funkcja DMO może dodać listę typów multimediów, które obsługuje do rejestru, wywołując funkcję DMORegister. Aplikacja może używać tych informacji do wyszukiwania obiektów DMO pasujących do określonego formatu. Informacje w rejestrze nie mają być kompleksowe. Zazwyczaj należy uwzględnić tylko główne typy obsługiwane przez funkcję DMO. Wpis rejestru zawiera oddzielne klucze dla typów wejściowych i wyjściowych, ale nie rozróżnia poszczególnych strumieni.
Funkcja DMORegister używa struktury DMO_PARTIAL_MEDIATYPE do opisywania typów multimediów. Ta struktura zawiera podzbiór informacji znalezionych w strukturze DMO_MEDIA_TYPE — czyli typ główny i podtyp. Nie zawiera bloku formatu, ponieważ blok formatu zwykle zawiera informacje, które są zbyt szczegółowe, aby uwzględnić w rejestrze, takie jak wysokość i szerokość obrazu wideo.
preferowanych typów multimediów
Po utworzeniu przez aplikację dmo może wysyłać zapytania do dmo dla typów multimediów, które obsługuje. Dla każdego strumienia DMO tworzy listę typów multimediów (prawdopodobnie pustych), sklasyfikowanych według preferencji. Metody IMediaObject::GetInputType i IMediaObject::GetOutputType metody wyliczają preferowane typy. Preferowane typy strumienia mogą zmieniać się dynamicznie, gdy aplikacja ustawia typy multimediów w innych strumieniach. Na przykład lista preferowanych typów danych wyjściowych może ulec zmianie po ustawieniu typu wejściowego lub odwrotnie. Jednak dmo nie jest wymagane do dynamicznego aktualizowania preferowanych typów. Aplikacja nie może zakładać, że każdy otrzymany typ jest prawidłowy. Z tego powodu metody IMediaObject::SetInputType i IMediaObject::SetOutputType metody obsługują flagę testowania określonego typu.
Metody GetInputType i GetOutputType zwracają strukturę DMO_MEDIA_TYPE. DmO może pozostawić niektóre informacje w tej strukturze puste, aby wskazać zakres typów. Typ główny lub podtyp może być GUID_NULL, a blok formatu może być pusty (zero bajtów). Jeśli blok formatu jest pusty, typ formatu musi być GUID_NULL.
Gdy aplikacja ustawia wszystkie typy danych wejściowych DMO, funkcja DMO powinna zwykle zwracać co najmniej jeden pełny typ dla każdego strumienia wyjściowego. Kompletny typ danych wyjściowych ułatwia testowanie, a aplikacje mogą używać go jako rozsądnej wartości domyślnej. Aplikacja testowa DMO opiera się na tym zachowaniu. (Zobacz Using the DMOTest Application.)
ustawianie typów multimediów
Aplikacje używają metod SetInputType i SetOutputType do testowania, ustawiania lub czyszczenia typów w określonym strumieniu. Aplikacja musi w pełni określić typ. Funkcja DMO sprawdza, czy może zaakceptować proponowany typ. Odpowiedź może zależeć od typów ustawionych na inne strumienie. Flaga DMO_SET_TYPEF_CLEAR czyści typ strumienia, dzięki czemu aplikacja może "wycofać się" i wypróbować inną kombinację.
przykładowe scenariusze
W poniższych przykładach opisano niektóre typowe scenariusze, aby zilustrować punkty przedstawione w poprzednich sekcjach.
- Dekodatory wideo. W typowym dekoderze wideo typ danych wejściowych częściowo określa typ danych wyjściowych. Na przykład zwykle oba strumienie muszą mieć taką samą szybkość klatek i wymiary obrazu. Jedną z opcji nie jest zdefiniowanie żadnych preferowanych typów danych wyjściowych, dopóki typ danych wejściowych nie zostanie ustawiony. Inną opcją jest wyliczenie zestawu niekompletnych typów, pomijając blok formatu. Użyj podtypu, aby wskazać obsługiwane nieskompresowane typy, takie jak 16-bitowy RGB, 24-bitowy RGB itd. Ponadto dekodatory wideo zazwyczaj nie obsługują ustawiania typu danych wyjściowych przed typem danych wejściowych. Typowym scenariuszem jest dekodowanie ze znanego formatu wejściowego, więc to ograniczenie jest uzasadnione.
- Dekodatory audio. Dekoder audio może obsługiwać ograniczony, stały zestaw formatów wyjściowych. W takim przypadku może być możliwe utworzenie listy preferowanych formatów wyjściowych, zanim zostanie znany format danych wejściowych.
- Sprężarki. W większości przypadków kompresor wideo nie może w pełni określić preferowanych formatów wyjściowych, dopóki aplikacja nie ustawi formatu wejściowego i odwrotnie. Zamiast tego dmo powinno zwrócić niekompletny typ bez bloku formatu. W przypadku kompresji audio i wideo aplikacja zwykle musi ustawić różne parametry wyjściowe, takie jak szybkość bitów. Jednak po ustawieniu typu wejściowego kompresor powinien zwrócić co najmniej jeden kompletny typ wyjścia ze względów wymienionych wcześniej.
Tematy pokrewne
-
pisanie DMO