Zarządzanie jakością wideo
W tym temacie opisano pewne ulepszenia potoku wideo w systemie Windows 7, zarówno w programie Microsoft Media Foundation, jak i w programie Microsoft DirectShow.
W idealnym świecie wideo nigdy nie zostanie usterki, niezależnie od rozdzielczości wideo lub obciążenia procesora CPU/GPU. W rzeczywistości potok wideo musi być w stanie poradzić sobie z skończonymi zasobami sprzętowymi i musi adaptacyjnie dostosować odtwarzanie do środowiska systemowego. Cele związane z zarządzaniem jakością wideo to:
- Zmniejsz gl swędzenie (porzucone lub opóźnione ramki).
- Zmniejsz użycie pamięci, szczególnie w procesorze GPU.
- Zmniejsz zużycie energii, szczególnie w przypadku laptopów działających na zasilaniu baterii.
- Uzyskaj najlepszą możliwą jakość obrazu, biorąc pod uwagę ograniczenia zasobów.
- Zachowaj synchronizację wideo z dźwiękiem.
Niektóre z tych celów są sprzeczne, szczególnie w przypadku systemów niskokońcowych. Ogólnie rzecz biorąc, istnieje kompromis między szybkością a jakością. Gl swędzenie jest bardziej niepożądane niż umiarkowane redukcje jakości wizualnej. Względne znaczenie zużycia energii różni się w zależności od środowiska; w laptopie działającym na zasilaniu baterii jest bardzo ważne.
W systemie Windows 7 ulepszony program renderowania wideo (EVR) ma lepszą obsługę zarządzania jakością wideo. Potok Programu Media Foundation i potok DirectShow zostały zaktualizowane w celu skorzystania z tych funkcji. Stosowane jest dwuczęściowe podejście:
- Przed rozpoczęciem odtwarzania potok może wykonywać optymalizacje statyczne na podstawie ustawień zarządzania energią użytkownika i informacji o sprzęcie.
- Po uruchomieniu odtwarzania potok może stosować optymalizacje dynamiczne na podstawie wydajności czasu wykonywania.
Zarządzanie jakością w programie Media Foundation
Aby włączyć optymalizacje statyczne, przed rozwiązaniem topologii częściowej ustaw atrybut MF_TOPOLOGY_STATIC_PLAYBACK_OPTIMIZATIONS. Moduł ładujący topologii wysyła zapytanie do tego atrybutu w IMFTopoLoader::Load metoda.
Jeśli włączysz optymalizacje statyczne, należy ustawić dwa inne atrybuty w topologii:
Atrybut | Opis |
---|---|
MF_TOPOLOGY_PLAYBACK_MAX_DIMS |
Określa maksymalny rozmiar okna odtwarzania wideo. |
MF_TOPOLOGY_PLAYBACK_FRAMERATE |
Określa częstotliwość odświeżania monitora. |
Te dwa atrybuty pomagają potokowi obliczyć najbardziej efektywne ustawienie zarządzania jakością.
Optymalizacje dynamiczne są wykonywane przez menedżera jakości. Nie musisz wykonywać żadnych czynności, aby włączyć menedżera jakości; jest ona automatycznie włączona. Menedżer jakości istniał w systemie Windows Vista; W systemie Windows 7, EVR może lepiej reagować na komunikaty od menedżera jakości.
Zarządzanie jakością w programie DirectShow
DirectShow obsługuje optymalizacje statyczne i dynamiczne na potrzeby odtwarzania DVD. Aby włączyć te optymalizacje w aplikacji odtwarzania DVD, ustaw następujące flagi w dwFlags parametru IDvdGraphBuilder::RenderDvdVideoVolume metody:
Flaga | Opis |
---|---|
AM_DVD_ADAPT_GRAPH | Umożliwia optymalizacje statyczne. |
AM_DVD_EVR_QOS | Umożliwia optymalizacje dynamiczne. |
Inne aplikacje DirectShow mogą włączyć optymalizacje dynamiczne, wywołując IEVRFilterConfigEx::SetConfigPrefs metodę bezpośrednio w filtrze EVR. Określ flagę EVRFilterConfigPrefs_EnableQoS.
Nuta
Optymalizacje statyczne w programie DirectShow są ograniczone do odtwarzania DVD.
Zarządzanie jakością w EVR
Aplikacja EVR obsługuje niektóre nowe flagi konfiguracji na potrzeby zarządzania jakością. Jeśli włączysz opisane wcześniej optymalizacje zarządzania jakością, nie musisz ustawiać tych flag bezpośrednio. Są one jednak udokumentowane dla aplikacji, które chcą bardziej szczegółowej kontroli nad EVR.
Ustaw następujące flagi na mikserze EVR, wywołując metodę IMFVideoMixerControl2::SetMixingPrefs:
Flagi | Opis |
---|---|
|
Pomiń drugie pole każdej ramki z przeplotem. |
|
Użyj deinterlacingu boba, nawet jeśli sterownik obsługuje tryb deinterlace o wyższej jakości. |
Ustaw następujące flagi na prezenterze EVR, wywołując metodę IMFVideoDisplayControl::SetRenderingPrefs:
Flagi | Opis |
---|---|
|
Ograniczanie danych wyjściowych w celu dopasowania do przepustowości procesora GPU. |
|
Wywołania usługi Batch Direct3D Obecne. Ta optymalizacja umożliwia systemowi częstsze wprowadzanie stanu bezczynności, co może zmniejszyć zużycie energii. |
|
Wykonaj mieszanie wideo przy użyciu prostokąta mniejszego niż prostokąt wyjściowy. Przeprowadź skalowanie wyniku do poprawnego rozmiaru danych wyjściowych. |
Ponadto ujście multimediów EVR obsługuje atrybuty konfiguracji odpowiadające każdemu z tych flag:
- EVRConfig_AllowBatching
- EVRConfig_AllowDropToBob
- EVRConfig_AllowDropToHalfInterlace
- EVRConfig_AllowScaling
- EVRConfig_AllowDropToThrottle
- EVRConfig_ForceBatching
- EVRConfig_ForceBob
- EVRConfig_ForceHalfInterlace
- EVRConfig_ForceScaling
- EVRConfig_ForceThrottle
Przed rozpoczęciem odtwarzania można ustawić te atrybuty bezpośrednio na ujściu multimediów EVR, jako alternatywę dla wywoływania metod IMFVideoMixerControl2 i IMFVideoDisplayControl metod. Aby ustawić te atrybuty, wykonaj zapytanie o ujście multimediów EVR dla IMFAttributes.
Tematy pokrewne