Kompensacja ruchu X-Video — X-Video Motion Compensation

X-Video Motion Compensation (XvMC) jest rozszerzeniem rozszerzenia X video (Xv) dla systemu X Window . Interfejs API XvMC umożliwia programom wideo przenoszenie części procesu dekodowania wideo na sprzęt wideo GPU . Teoretycznie proces ten powinien również zmniejszyć wymagania dotyczące przepustowości magistrali. Obecnie obsługiwane części, które XvMC ma przenosić na GPU, to kompensacja ruchu (mo comp) i odwrócona dyskretna transformacja kosinusowa (iDCT) dla wideo MPEG-2 . XvMC obsługuje również odciążanie dekodowania mo comp , iDCT i VLD („Variable-Length Decoding”, bardziej znane jako „akceleracja poziomu plasterka”) nie tylko dla MPEG-2, ale także MPEG-4 ASP na VIA Unichrome (S3 Graphics sprzęt z serii Chrome) .

XvMC był pierwszym uniksowym odpowiednikiem API Microsoft Windows DirectX Video Acceleration (DxVA) . Popularne aplikacje, o których wiadomo, że korzystają z XvMC, to MPlayer , MythTV i xine .

Sterowniki urządzeń

Każdy sprzętowy procesor graficzny wideo obsługujący akcelerację wideo XvMC wymaga sterownika urządzenia programowego X11 w celu włączenia tych funkcji.

Producenci sprzętu

Nvidia

Obecnie dostępne są trzy sterowniki Nvidii dla X11: otwarty, ale zaciemniony sterownik 2D obsługiwany przez Nvidię o nazwie nv, zastrzeżony sterownik binarny firmy Nvidia oraz sterownik open source oparty na inżynierii wstecznej sterownika binarnego opracowanego przez społeczność Linuksa o nazwie Nowy . Nouveau nie dąży do obsługi XvMC, sterownik 2D nv nie obsługuje XvMC, a oficjalny, własnościowy sterownik binarny firmy Nvidia obsługuje tylko odciążanie MPEG-2 (mo comp i iDCT) na sprzęcie do serii GeForce 7000 włącznie .

PRZEZ

Firma VIA dostarcza sterowniki urządzeń typu open source dla niektórych urządzeń VIA Unichrome (seria S3 Graphics Chrome) , obsługujące odciążanie wideo MPEG-2 i MPEG-4 ASP . Dzięki poziomowi dekodowania VLD VIA odciąża znacznie więcej zadań dekodowania z procesora niż procesory graficzne obsługujące tylko poziomy iDCT lub mo comp. Pamiętaj, że nie wszystkie urządzenia są obsługiwane i istnieją inne zastrzeżenia. t

Intel

Intel dostarcza oficjalne sterowniki urządzeń typu open source, które obsługują odciążanie MPEG-2 (mo comp i iDCT) w zintegrowanych układach graficznych Intel 8xx/9xx.

ATI/AMD

Chociaż ATI było pierwszym producentem, który zapewnił akcelerację MPEG2 w swoich kartach graficznych z procesorem graficznym Rage 128, nigdy nie dostarczył dokumentacji, jak go używać. Więc żadne XvMC nie jest dostępne i prawdopodobnie nigdy nie będzie. XvMC jest obsługiwane na kartach Radeon -4000 (z UVD ) przez sterownik Catalyst od 8.10 i nowszy na poziomie eksperymentalnym (co oznacza, że ​​nie działa "po wyjęciu z pudełka "). (Zobacz także X-Video Bitstream Acceleration ). W przyszłości planowana jest obsługa kompensacji ruchu w innych urządzeniach ATI/AMD. (Teraz cały sprzęt obsługuje akcelerację MPEG-2 na poziomach komp iDCT i mo).

Matrox

Nie ma sterowników urządzeń obsługujących XvMC na sprzęcie Matrox (chociaż sprzęt Matrox Parhelia obsługuje akcelerację MPEG-2 na poziomie kompilacji mo).

S3

Sterownik urządzenia binarnego firmy S3 obsługuje odciążanie MPEG-2 tylko w początkowym sterowniku 2.0.16 na procesorach graficznych Chrome 20.

Przegląd techniczny interfejsu XvMC API

Pochodzi z X-Vxvideoideo Motion Compensation - specyfikacja API v. 1.0

XvPort

XvMC rozszerza rozszerzenie wideo X (Xv) i korzysta ze znanej koncepcji XvPort. Porty mają atrybuty, które można ustawiać i sprawdzać za pomocą Xv. W XvMC porty mogą również posiadać konteksty sprzętowej kompensacji ruchu stworzone do użytku z nimi. Porty, które obsługują XvImages (tj. mają kodowanie portu "XV_IMAGE", jak opisano w dodatku API Xv w wersji 2.2) można zapytać o listę obsługiwanych przez nie typów XvMCSurface. Jeśli obsługują one dowolne typy XvMCSurface, dla tego portu można utworzyć XvMCContext.

Kontekst XvMC

XvMCContext opisuje stan potoku kompensacji ruchu . Indywidualny XvMCContext można utworzyć do użytku z pojedynczym portem, typem powierzchni, typem kompensacji ruchu, kombinacją szerokości i wysokości. Na przykład kontekst może zostać utworzony dla określonego portu, który wykonuje kompensację ruchu MPEG-2 na powierzchniach 720 x 480 4:2:0. Po utworzeniu kontekstu odwołanie do niego wskazuje na port, typ powierzchni, rozmiar i typ kompensacji ruchu. Konteksty mogą być „bezpośrednie” lub „pośrednie”. W przypadku kontekstów pośrednich serwer wyświetlania X renderuje cały obraz wideo przy użyciu danych przekazanych do niego przez klienta. W przypadku kontekstów bezpośrednich biblioteki klienta renderują wideo z niewielką lub żadną interakcją z serwerem wyświetlania X.

XvMCSurfaces

XvMCSurfaces to bufory, w których może renderować sprzęt do kompensacji ruchu . Dane w samych buforach nie są dostępne dla klienta i mogą być przechowywane w formacie specyficznym dla sprzętu. Można utworzyć dowolną liczbę buforów do użytku w określonym kontekście (jeśli pozwalają na to zasoby).

Potok wideo

XvMC zapewnia akcelerację wideo zaczynając od jednego z dwóch miejsc w potoku wideo . Przyspieszenie rozpoczynające się w pierwszym punkcie, który nazwiemy poziomem „kompensacji ruchu”, rozpoczyna się po kwantyzacji odwrotnej i IDCT w miejscu, w którym ma być zastosowana kompensacja ruchu . Drugi punkt, który nazwiemy poziomem "IDCT", zaczyna się przed IDCT, zaraz po odwrotnej kwantyzacji.

Wykonanie

Renderowanie odbywa się poprzez przedstawienie biblioteki z docelowym XvMCSurface i maksymalnie dwoma referencyjnymi XvMCSurfaces do kompensacji ruchu, buforem bloków 8x8 i buforem poleceń, który opisuje, jak używać bloków 8x8 wraz z wektorami kompensacji ruchu do konstruowania danych w docelowy XvMCSurface. Gdy rurociąg rozpoczyna się na poziomie iDCT, Xv wykona IDCT na blokach przed wykonaniem kompensacji ruchu. Dostępna jest funkcja do kopiowania/nakładania części XvMCSurface do rysowania z dowolnym skalowaniem.

XvMCSubpictures

XvMCSubpictures to oddzielne powierzchnie, które można łączyć z powierzchnią docelową. Dowolna liczba XvMCSubpictures może być utworzona do użytku z kontekstem (jeśli pozwalają na to zasoby). Obsługiwane jest zachowanie obrazu podrzędnego „backend” i „frontend”.

Wsparcie oprogramowania

Akceleracja XvMC jest obsługiwana w:

Procesy, które można przyspieszyć

Mimo że XvMC obsługuje obecnie tylko sprzętową akcelerację kompensacji ruchu (mo comp) i odwrotną dyskretną transformatę kosinusową (iDCT) (oraz dekodowanie o zmiennej długości dla VIA Unichrome GPU), dodatkowe procesy dekodowania wideo można przekazać nowoczesnym procesorom graficznym, które mogą być przyspieszane za pomocą programów fragmentów GPU. XvMC może zostać rozszerzone w przyszłości, aby obsługiwać te same procesy, co nowsze, konkurencyjne interfejsy API sprzętowej akceleracji wideo, takie jak VDPAU , XvBA i VAAPI :

Aktualne ograniczenia

Poza brakiem dopasowania wszystkich cech i funkcji DxVA (który jest odpowiednikiem Microsoft API dla Windows ) i brakiem obsługi innych formatów wideo niż MPEG-2 w sterownikach urządzeń Linux od Intela i NVIDIA , specyfikacja XvMC API w wersji 1.0 obecnie również ma te inne ograniczenia:

  • BOB i onefield to jedyne metody usuwania przeplotu , które działają z XvMC.
  • Obraz w obrazie (PiP) nie działa z XvMC.
  • Przechodzenie klatka po klatce wideo może powodować artefakty w XvMC.
  • Edycja wideo jest trudna lub niemożliwa przy włączonym XvMC.
  • Brak przejrzystości sieci w XvMC API
  • Brak możliwości, aby aplikacja kliencka była całkowicie niezależna od tego, która biblioteka po stronie klienta ma być używana (np. ujednolicona biblioteka wrappera).

Projekt o nazwie VA API jest w trakcie opracowywania bardziej nowoczesnego interfejsu API do akceleracji wideo, który będzie obsługiwał funkcje akceleracji wideo nowoczesnych procesorów graficznych.

Zobacz też

Bibliografia

Linki zewnętrzne