Sprzętowe dekodowanie obrazu HD (720p, 1080p) na kartach Nvidia i ATI w Windowsie i Linuksie

Uznałem, że w Internecie nie ma takiego jednolitego poradnika/przewodnika, który wytłumaczyłby użytkownikowi – jak krowie na rowie – na czym polega sprzętowe dekodowanie obrazu o wysokiej rozdzielczości i jak je uzyskać na swoim komputerze. Tak więc całymi swoimi siłami spróbuję temat ten – wbrew pozorom, nie tak skomplikowany, wyjaśnić.

Obraz HD przechowywany jest na płytach Blu-Ray (no i HD DVD, ale ten format przegrał wojnę, więc go pomijamy) z rozdzielczością 1280×720 (to jest właśnie 720p) bądź 1920×1080 (czyli 1080p) oraz zakodowany kodekami VC1 bądź H264/AVC (w wczesnych etapach pojawiały się też zakodowane w MPEG-2, ale je też pomijamy). Jeśli chodzi o dźwięk, do wyboru jest więcej możliwości – wszystkie odtwarzacze Blu-Ray muszą być zdolne zdekodować dźwięk zakodowany na płycie kodekami Dolby Digital (znane też jako po prostu AC3), DTS, bądź PCM. Wszystkie te trzy kodeki były też dostępne na płytach DVD. Opcjonalnie odtwarzacze mogą też posiadać wsparcie dla kodeków takich jak Dolby Digital Plus, DTS-HD High Resolution Audio, bądź bezstratnych Dolby TrueHD czy DTS-HD Master Audio. Bardzo niewiele wydanych płyt Blu-Ray posiada jednak ścieżkę dźwiękową zapisaną w jednym z nowych formatów.

Problem pojawia się, gdy chcemy obraz HD odtworzyć na zwykłym komputerze. Przy zainstalowanych „zwykłych” kodekach (przyjmijmy, że ffdshow) z 720p nie powinniśmy mieć problemu (zakładając, że nasz komputer ma mniej niż, powiedzmy, 3 lata), jednak pojawi się on zapewne przy 1080p – procesor nie będzie „nadążał” z dekodowaniem obrazu w właściwym tempie, dlatego na ekranie (czy telewizorze) otrzymamy po prostu „skaczący” obraz, kompletnie rozsynchronizowany z dźwiękiem.

Jak temu zaradzić? Ano można – wykorzystując możliwości naszej karty graficznej. Bardzo możliwe, że jeśli jest ona stosunkowo świeża i pochodzi ze stajni Nvidii albo ATI, to możemy ją zaprzęgnąć do dekodowania obrazu HD – jednocześnie ściągając bardzo dużo obciążenia z naszego zwykłego procesora. Listy (chociaż zapewne niekompletne) kart zdolnych do sprzętowego dekodowania HD są na wikipedii – ATI i NVIDIA. Jeśli naszej karty nie ma na tej liście, a nie jest starsza niż – powiedzmy – dwa lata, to warto spróbować – a nuż zadziała.

Zwracam uwagę, że artykuł ten nie zajmuje się w jakikolwiek sposób złamaniem zabezpieczenia AACS występującego na płytach Blu-Ray – przyjmuję, że użytkownik ma do dyspozycji plik z obrazem HD zakodowanym kodekiem H264 lub VC1 (dźwięk pomijamy, bo w większości przypadków jest to AC3 albo DTS – a z nimi sobie bez problemu radzi mój ulubiony AC3Filter czy chociażby po prostu ffdshow). Źródło pochodzenia tego pliku nie musi być mi znane. ;)

Teraz opiszę, jak uzyskać sprzętowe dekodowanie HD – najpierw na Windowsie, później na Linuxie.

Sprzętowe dekodowanie HD na Windows

Na Windows sprawa wygląda dość prosto, i – w odróżnieniu od Linuxa – tak samo dla kart firmy Nvidia, jak i ATI. Cała sprawa polega na tym, że w odróżnieniu od standardowego API VfW (Video for Windows), z którego korzystają praktycznie wszystkie kodeki i który przekazuje wszystkie funkcje dekodujące na procesor, a kartę graficzną traktuje po prostu jako urządzenie do rysowania obrazu, musimy skorzystać z kodeka wykorzystującego API DXVA (DirectX Video Acceleration), który korzysta z funkcji DirectX w celu dostania się do funkcji przetwarzających karty graficznej.

Jest wiele programów, które mają wbudowane kodeki wykorzystujące DXVA :

  • WinDVD
  • PowerDVD
  • PowerCinema
  • Media Player Classic Homecinema
  • Media Portal
  • KMPlayer
  • GOM Player

Moim wyborem jest jednak mój ulubiony Media Player Classic Homecinema. Jego strona znajduje się tutaj, a jeśli chodzi o ściąganie to do wyboru mamy :

  • wersję 32-bitową [v1.2.908.0 x86]
  • wersję 64-bitową [v1.2.908.0 x64] (przypominam, że nawet jeśli mamy 64-bitowy procesor i 32-bitowy system operacyjny, to pobieramy wersję 32-bitową. jakiekolwiek kodeki zewnętrzne (chociażby wspominany już nie wiem który raz ffdshow) muszą też być w wersji 64-bitowej, inaczej program nie będzie miał do nich dostępu)

Gdy program ten już ściągniemy i rozpakujemy (nie ma on instalatora, po prostu go rozpakowywujemy do Program Files albo w sumie gdziekolwiek), uruchamiamy go i pierwsze co robimy to zmieniamy język na polski (albo i nie – sam w sumie używam wersji angielskiej, ale screeny będą z wersji polskiej)

mpchc_jezyk

Teraz wchodzimy do ustawień…

Ustawienia w MPC-HCUkazuje nam się nowe okno, w którym mamy dostęp do wielu rzeczy zmieniających działanie programu – ustawienie większości z nich w sumie zależy od preferencji osobistych, tak więc zachęcam do poszperania w nich samemu. Przejdziemy teraz do kluczowej dla nas sprawy, czyli wyboru renderera. Z listy po lewej stronie wybieramy Strumień wyjścia i otrzymujemy :

Wybór renderera w MPC-HCTo, który renderer wybierzemy, zależy od systemu – XP, Vista czy Windows 7.

  • w przypadku Windows XP wybieramy albo Overlay Mixer, albo VMR7 renderless, albo VMR9 renderless – wyboru dokonujemy na podstawie „co działa najlepiej” i tego, czy potrzebujemy w naszym filmie napisów (o tym też później)
  • w przypadku Windows Vista i Windows 7 wybieramy EVR jeśli nie potrzebujemy napisów lub EVR profil własny jeśli ich potrzebujemy – w przypadku tego drugiego w razie problemów z wydajnością (jednak tych być nie powinno) zalecam pogrzebanie ustawieniem Bufory EVR

Przenosimy się teraz do zakładki Filtry wewnętrzne

Filtry wewnętrzne w MPC-HCi upewniamy się, że dwa nas najbardziej interesujące – H264/AVC (DXVA) oraz VC1 (DXVA) są zaznaczone. Niektóre z pozostałych możemy poodznaczać, jeśli chcemy, żeby zamiast filtrów wbudowanych w MPC-HC dekodowanie formatów obsługiwanych przez dane filtry przejmował filtr zewnętrzny (ja na przykład do AC3 i DTS wolę używać wspomnianego już AC3Filter, bo on pozwala na przekierowanie strumienia dźwiękowego bezpośrednio na interfejs S/PDIF). Następnie dwukrotnie klikamy na nazwę jednego z filtrów DXVA i otrzymujemy :

Ustawienia filtra DXVA w MPC-HCJeśli w polu Karta graficzna pojawiła się nazwa naszej karty graficznej, oznacza to, że jest ona w stanie dekodować sprzętowo dany format. Ponadto, Ilość wątków dekodera powinna odpowiadać liczbie rdzeni w naszym procesorze – MPC-HC wykrywa jednak ją automatycznie, tak więc zmiana nie powinna być potrzebna. Pozostałe ustawienia służą do ewentualnej poprawy wydajności, jednak – szczerze mówiąc – sam ich nie ruszałem, tak więc nie wiem, co i w którą stronę można zmienić.

To już koniec ustawień – teraz klikamy OK i ładujemy nasz film w odtwarzaczu. Jeśli wszystko poszło pomyślnie, nie powinno być jakichkolwiek problemów z jego odtwarzaniem, a zużycie procesora nie powinno przekraczać 25%.

Napisy w DXVA MPC-HC

Jako że filtr DXVA musi być bezpośrednio podłączony do renderera, nie może być pomiędzy tymi dwoma rzeczami „pośredniczącego” filtra, np. filtra odpowiedzialnego za dodawanie napisów. Napisy można uzyskać jednak przez używanie renderera, który obsługuje dodawanie napisów sam w sobie – takimi są (dla XP) VMR9 renderless oraz (dla Visty i siódemki) EVR profil własny. Jeśli wybraliśmy jeden z tych rendererów oraz w katalogu z plikiem filmowym jest też plik z napisami, to zostanie on automatycznie załadowany i napisy będą wyświetlane. Jeśli się tak jednak nie stało, klikamy prawym przyciskiem myszy na obszar wyświetlania filmu i wybieramy Napisy, a następnie Włącz. Jeśli jednak napisy dalej się nie wyświetlają, upewnijmy się, że zostały załadowane, wybierając w głównym oknie programu menu Plik i pozycję Wczytaj napisy, a następnie wybierając odpowiedni plik z napisami.

Things to consider

Z moich własnych doświadczeń wynika, że do opisanych tutaj wybryków z DXVA o wiele lepiej nadaje się Windows Vista. Na Windows XP nie udało mi się uzyskać płynnego obrazu korzystając z renderera VMR9 renderless – stał się on „oglądalny” (tj. po prostu o szybkości 23.976fps) dopiero po wybraniu Overlay Mixer, który to nie umożliwia niestety wyświetlania napisów. Na Windows Vista jak i Windows 7 przy wybranym EVR profil własny żadnych problemów nie było. Możliwe jednak, że jest to kwestia konfiguracji mojego XP bądź sterowników do mojej karty graficznej.

Sprzętowe dekodowanie HD na Linuksie – karty Nvidia

Na Linuksie sprawa sprzętowego dekodowania jest zależna od producenta karty graficznej. W przypadku kart firmy Nvidia skorzystamy z opracowanego przez nią VDPAU, czyli Video Decoding and Presentation API for Unix, który odpowiada za obsługę funkcji PureVideo na nowszych kartach GeForce. Niestety, VDPAU wymaga nowszego sprzętu niż DXVA – najstarszymi kartami obsługującymi go są GeForce’y z serii 8, oprócz tych opartych na chipsecie G80, czyli 8800 Ultra, niektórych 8800 GTS  i 8800 GTX. Pełna (mniej więcej) lista kompatybilnych z VDPAU kart znajduje się tutaj.

Aby wykorzystywać możliwości naszej Nvidii do dekodowania HD na Linuksie, potrzebujemy :

  • kompatybilnej z VDPAU karty,
  • sterowników od Nvidii w wersji 180.37 lub nowszej,
  • odtwarzacza obsługującego VDPAU i mającego współpracujące z VDPAU kodeki.

Zakładam, że użytkownik dwie pierwsze rzeczy już ma – uważam, że opis instalacji sterowników Nvidii jest tutaj zbędny, zwłaszcza, że większość dzisiejszych dystrybucji oferuje po prostu pakiety z tymi sterownikami, tak więc komplikacja tej procedury jest minimalna. Odtwarzaczami obsługującymi VDPAU są Xine i MPlayer. Używam tego drugiego, tak więc na nim będzie oparta dalsza część artykułu.

Rozpoczynamy od pobrania najnowszego źródła MPlayera z SVN :

$ svn co svn://svn.mplayerhq.hu/mplayer/trunk mplayer

Co spowoduje pobranie najnowszej wersji SVN do katalogu mplayer. Po wejściu do niego rozpoczynamy kompilację z paroma dodatkową flagą –enable-vdpau (reszta jest moimi własnymi wymaganiami, proszę je dostosować do własnych lub po prostu pominąć – configure w przypadku mplayera ma całkiem niezłą autodetekcję i powinien wykryć potrzebne dla danego sprzętu wtyczki audio/video) :

$ ./configure --enable-vdpau --disable-inet6 --disable-mencoder --disable-ossaudio --enable-tremor --extra-cflags="-march=core2 -O2 -pipe"
$ make
# make install

Jeśli configure wywala się w pewnym momencie (szczególnie jeśli narzuciliśmy budowanie czegoś flagą –enable), bądź nie jest budowana jakaś wtyczka – np. ALSA (to, jakie wtyczki będą zbudowane, możemy obejrzeć po zakończeniu skryptu configure), upewnijmy się, że mamy wszystkie biblioteki developerskie dla danego podsystemu.

Filmy HD odpalamy teraz z innymi parametrami – jako że VDPAU potrzebuje do działania kodeków napisanych specjalnie „pod” niego, nie możemy używać zwykłych, pochodzących z ffmpeg/libavcodec. W ten sposób :

  • filmy zakodowane H264/AVC uruchamiamy z parametrami -vo vdpau -vc ffh264vdpau
  • filmy zakodowane w VC-1 uruchamiamy z parametrami -vo vdpau -vc ffvc1vdpau

Nie ukrywajmy jednak, że odtwarzanie filmów w „gołym” mplayerze, wywołując go z konsoli, do zbyt wygodnych ani przyjemnych rzeczy nie należy. Jeśli używamy frontendu SMPlayer, to możemy mu powiedzieć, żeby jako domyślną wtyczkę wideo używał właśnie VDPAU – nie spowoduje to jakichkolwiek zawirowań w normalnych filmach „nie-HD”.

A jak tego dokonać? Prosto…najpierw wchodzimy do ustawień

Dostęp do opcji w SMPlayerzeI po ukazaniu się nowego okna w zakładce General wybieramy kartę Video i jako Output driver wybieramy właśnie vdpau, a następnie klikamy OK. Od teraz domyślnym sterownikiem wideo w SMPlayerze będzie właśnie on.

Wybór sterownika VDPAU w SMPlayer

Musimy jednak zadbać, aby przy ładowaniu filmów HD ładowane były też kodeki VDPAU. W tym celu, podczas odtwarzania takowego, wchodzimy do View info and properties z menu Options (tego samego, co na poprzednim screenie), i tam wybieramy kartę Video codec.

Właściwości pliku w SMPlayerTam upewniamy się, że wybrany jest ffh264vdpau bądź ffvc1vdpau, zależnie od kodeka, w którym zakodowany jest film. Jeśli nie jest – dwukrotnie klikamy jego nazwę i wychodzimy z okna klikając OK.

Zwracam uwagę, że jeżeli posiadamy dystrybuję Arch Linux, to MPlayer’a z wkompilowaną obsługą VDPAU możemy zdobyć z AUR – kryje się on pod nazwą mplayer-vdpau i mplayer-vdpau-nogui. Jeśli używamy innej dystrybucji, to też warto poszukać już gotowych paczek z tym programem i VDPAU.

Sprzętowe dekodowanie HD na Linuksie – karty ATI

Ta sekcja artykułu jest niestety dopiero w przygotowaniu – pomimo usilnych starań nie udało mi się jeszcze zmusić kart ATI do współpracy z UVD2 i XvMC/XvBA. Sterowniki catalyst dla kart ATI na Linuksa też do najlepszych – mówiąc skromnie – nie należą. Samo ATI też o sprzętowym wsparciu dekodowania HD na Linuksie niewiele mówi.

Napiszę jednak jak je osiągnąć gdy tylko sam do tego dojdę. ;)

Pierdoły

A co u mnie? W sumie niewiele, pierwszy rok studiów mam jednak w stu procentach za sobą. Aktualnie cieszę się wakacjami i odpoczywam, ile mogę. Od połowy sierpnia zaczynam miesięczne praktyki w gorzowskim Volkswagenie jako…w sumie sam nie wiem kto. ;D Czyli wakacje w sumie mi się już za dwa tygodnie skończą. Nie ukrywajmy, jak się praktyki skończą to już będzie połowa września, zapisy i podobne farmazony, trzeba będzie do Wrocławia już wracać…ech. Szkoda, dobrze mi w domu – z drugiej strony, co za dużo, to niezdrowo. ;)

Informacje o Daniel

freezingly cold soul
Ten wpis został opublikowany w kategorii komputer i oznaczony tagami , , , , , , , , , , , . Dodaj zakładkę do bezpośredniego odnośnika.

10 odpowiedzi na „Sprzętowe dekodowanie obrazu HD (720p, 1080p) na kartach Nvidia i ATI w Windowsie i Linuksie

  1. Pajqk pisze:

    Hey
    Właśnie szukałem dobrego poradnika jak włączyć akceleracje h.264 i ten opis jest 100% przydatny.
    Dzięki i pozdrawiam

  2. neon pisze:

    Bardzo dobre! plus za to! :D

  3. Shirou pisze:

    Wszystko fajnie pieknie ale nie dziala to z plikami mkv :/ tzn dokladniej to napisy nie dzialaja, w ogole ich nie widzi a co dopiero mowic o wczytaniu :/

  4. Daniel pisze:

    A niby z jakimi innymi plikami ma to działać, jak nie z MKV? Przecież to najpopularniejszy kontener dla zawartości HD. Nie wiem co robisz źle, ale inni jakoś nie mieli problemów.

  5. marverix pisze:

    Dobry wpis,
    jednak muszę Cię poprawić ;) W Windowsie odradzam wbudowanego w Media Player Classic dekodera DXVA. Polecam ściągnąć najnowszy ffdshow-tryout, który to już posiada osobny piękny dekoder DXVA. Wtedy w MPC wyłączamy większość dekoderów wewnętrznych, przechodzimy do zakładki Zewnętrzne i dodajemy:
    – ffdshow Audio Decoder
    – ffdshow Video Decoder
    – ffdshow DXVA Video Decoder
    Po dodaniu powyższych, zaznaczamy każdy z osobna i zaznaczamy na pasku obok „Preferowany”. I gotowe! :)

  6. Akwarysta pisze:

    Świetny wpis – dzięki Tobie udało mi się zmusić grafikę do sprzętowego dekodowania obrazu HD – wcześniej obciążenie procesora na poziomie ~30%, teraz ledwo 8%. Dzięki bardzo.

  7. Pingback: HTPC.info.pl » VDPAU czyli sprzętowe wspomaganie dekodowania filmów od Nividi dla Linuxa

  8. wylly pisze:

    Artykuł dobry, jedna mała uwaga dla tych co wysyłają obraz filmu po HDMI na zewnętrzny TV np. plazmę i mają efekt rwania obrazu tzw. „tearing” – ustawić w Media Player Classic -> Strumień wyjściowy -> madVR .
    Problem znika całkowicie.
    P.S. przeczytać w Google artykuł „Eliminacja efektu rwania ekranu dla kart Nvidia „

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s