niedziela, 1 września 2013

Akceleracja wideo - otwarte sterowniki AMD

Otwarte sterowniki dla kart AMD Radeon już od dłuższego czasu obsługują akcelerację wideo z wykorzystaniem dedykowanej jednostki UVD. Współpraca z programami odbywa się przez popularną bibliotekę VDPAU i obejmuje zarówno akcelerację wyświetlania jak i dekodowania wideo.

Uruchomienie akceleracji jest łatwe, wystarczy mieć aktualną wersję sterowników z włączonym wsparciem VDPAU. Użytkownicy Ubuntu wystarczy, że dodadzą repozytoria ppa:oibaf/graphics-drivers i zainstalują pakiet libg3dvl-mesa.

Po tym wszystkim można zapytać nasz ulubiony odtwarzacz, czyli w moim przypadku mplayer2, o wsparcie VDPAU.

Dekodowanie:
mplayer -vc help | grep vdpau 
ffmpeg12vdpau ffmpeg working FFmpeg MPEG-1/2 (VDPAU) [mpegvideo_vdpau] 
ffwmv3vdpau ffmpeg problems FFmpeg WMV3/WMV9 (VDPAU) [wmv3_vdpau] 
ffvc1vdpau ffmpeg problems FFmpeg WVC1 (VDPAU) [vc1_vdpau] 
ffh264vdpau ffmpeg working FFmpeg H.264 (VDPAU) [h264_vdpau] 
ffodivxvdpau ffmpeg working FFmpeg MPEG-4,DIVX-4/5 (VDPAU) [mpeg4_vdpau] 
 
Wyświetlanie:
mplayer -vo help | grep vdpau 
vdpau VDPAU with X11

Jak to działa w praktyce? 

Testowym filmem niech będzie Bick Buck Bunny w 1920x1080 i 24 klatkach na sekundę:

mplayer -vc ffh264vdpau big_buck_bunny_1080p_h264.mov

Można sprawdzić czy UVD jest rzeczywiście używane:
sudo cat /sys/kernel/debug/dri/0/radeon_pm_info
uvd    vclk: 70000 dclk: 56000
power level 0    sclk: 80000 mclk: 100000 vddc: 1100 vddci: 0


Podczas odtwarzania poczciwy Athlon II 240 był tylko obciążony przez mplayera2 w 4-5%, pracując na 800 MHz. Całą robotę załatwiał Radeon HD 6670, którego temperatura wzrosła z 35 na 40 stopni C.

Notka poboczna: Układ ma włączony nowy system zarządzania energią dostępny od jądra 3.11 i zwykle pracuje w zakresie 35 (pulpit 2D) do 47 st. C (intensywne gry 3D). Bez niego temperatury wynosiły 47-52 stopni. Więcej informacji tutaj. Testy wydajności w grach można za to znaleźć tutaj.


Dla porównania poniżej znajduje się zrzut podczas odtwarzania bez użycia UVD. Obciążenie procesora przekracza 40% i dzieje się to przy taktowaniu 2,8 GHz.

 

Dodatkowym testem był trailer Incepcji (1920x800) zapisany w 48 klatkach na sekundę. I tutaj nie było problemów z odtwarzaniem, a obciążenie CPU nie przekraczało 5%. Bez UVD wzrostało ono do 60 - 90%.

 

Problemy?

Podczas odtwarzania napisów końcowych Bick Buck Bunny (zawartość ekranu przesuwa się z dołu w górę) zauważyłem artefakty w dolnej części okna. Również wznowienie odtwarzania po zatrzymaniu filmu potrafi czasami zamrozić obraz na kilka sekund. Dekodery oznaczone jako "problematyczne",  jak VC-1, zwykle powodują błędy w wyświetlaniu.

Pełną listę dekoderów można sprawdzić również używając narzędzia vdpauinfo:

Decoder capabilities:

name               level macbs width height
-------------------------------------------
MPEG1                 0  9216  2048  1152
MPEG2_SIMPLE          3  9216  2048  1152
MPEG2_MAIN            3  9216  2048  1152
H264_BASELINE        41  9216  2048  1152
H264_MAIN            41  9216  2048  1152
H264_HIGH            41  9216  2048  1152
VC1_SIMPLE            1  9216  2048  1152
VC1_MAIN              2  9216  2048  1152
VC1_ADVANCED          4  9216  2048  1152
MPEG4_PART2_SP        3  9216  2048  1152
MPEG4_PART2_ASP       5  9216  2048  1152


Oczywiście użycie VDPAU da się ustawić też w SMPlayerze zaznaczać wybrane w ustawieniach programu:

 

6 komentarzy:

  1. Moim zdaniem brak dekodowania nie był dużym problemem biorąc pod uwagę moc współczesnych procesorów, za to brak dźwięku po hdmi na otwartych sterownikach oraz przegrzewanie się już jest. Odradzam wszystkim sprzed AMD, jeżeli chcą korzystać z linuxa.
    Sam zakupiłem laptop z układem hybrydowym i nie da się na nim pracować na linuxie.

    OdpowiedzUsuń
    Odpowiedzi
    1. Bywa gorzej http://wkupiesila.blogspot.com/2013/01/studium-przypadku-ubuntu-1210-na-lenovo.html

      Usuń
    2. HDMI Audio działa na wszystkim prócz 7000 (radeonsi). Przegrzewanie nie występuje od jądra 3.11 (parametr radeon.dpm=1).

      Usuń
    3. Cóż mam radeona 7970m i na nim nie działa. Liczę, że przynajmniej to przegrzewanie się skończy. Jednak mimo wszystko zdziwiony jestem - w końcu nie jest to jakiś egzotyczny wynalazek.

      Usuń
  2. No dobra a jak wygląda sprawa z flash-em, da się to już jakoś łatwo włączyć [akceleracje filmów flash] bez kompilacji mesy itp. Kernel 3.10 miał już na to pozwalać? Przydałby się jakiś tekst w tym temacie.

    OdpowiedzUsuń
    Odpowiedzi
    1. Cały tekst w temacie:
      "1. Należy zainstalować paczkę libg3dvl-mesa żeby mieć wsparcie VDPAU
      2. Należy zaptaszyć wsparcie sprzętowe we właściwościach odtwarzacza flash
      3. The end"

      Usuń