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 :
- Kompensacja ruchu (mo comp)
-
Odwrotna dyskretna transformata kosinusowa (iDCT)
- Korekcja odwróconego telecine 3:2 i 2:2 pull-down
- Odwrotna zmodyfikowana dyskretna transformata kosinusowa (iMDCT)
- Filtr odblokowujący w pętli
- Przewidywanie wewnątrzramkowe
- Odwrotna kwantyzacja (IQ)
- Dekodowanie o zmiennej długości (VLD), powszechnie znane jako przyspieszenie na poziomie plastra
- Usuwanie przeplotu przestrzenno-czasowego i automatyczne wykrywanie przeplotu / progresywnego źródła
- Przetwarzanie strumienia bitów ( CAVLC / CABAC )
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ż
- Rozszerzenie wideo X (powszechnie nazywane po prostu „XVideo” lub „Xv”)
- X Window System (powszechnie nazywany po prostu „X11” lub „X”)
- MIT-SHM — rozszerzenie pamięci współdzielonej MIT dla X11
- DirectX Video Acceleration (DxVA) API — odpowiednik Microsoft Windows dla XvMC
- Interfejs API akceleracji wideo (API VA)
- OpenMAX IL (Open Media Acceleration Integration Layer) — bezpłatny wieloplatformowy interfejs API abstrakcji mediów od Khronos Group
- Przyspieszenie strumienia bitów X-Video (XvBA)
- VDPAU (API dekodowania wideo i prezentacji dla systemu Unix)
- Distributed Codec Engine (libcde) to interfejs API firmy Texas Instruments dla silnika kodeków wideo w systemach wbudowanych opartych na OMAP
- Video Decode Acceleration Framework to interfejs API firmy Apple Inc. do przyspieszania sprzętowego dekodowania H.264 w systemie Mac OS X
- VideoToolbox to API firmy Apple Inc. do dekodowania z przyspieszeniem sprzętowym w Apple TV i Mac OS X 10.05 lub nowszym. Pierwotnie był nieudokumentowany, ale Apple od tego czasu opublikowało dokumentację na ten temat.
- OpenVideo Decode (OVD) – nowy otwarty, wieloplatformowy interfejs API akceleracji wideo firmy AMD .