openSUSE – Hardware-Videobeschleunigung via XvBA vom AMD Catalyst nutzen

Genau, man hat richtig gelesen. Die Videobeschleunigung ist jetzt mit openSUSE und AMD Catalyst auch möglich. ;-) Wer hat nicht neidisch auf die proprietären Betriebssystemen geschaut, auf der man die hochauflösenden Filme (z.B. in H.264) über die Hardware-Videobeschleunigung z.B. via DXVA ohne Ruckeln anschauen konnte. In diesem Artikel werde ich euch zeigen, wie es auch auf openSUSE funktionieren kann und berichte nun wie ich es zum Laufen bekommen habe und vor allem wie man es installiert und einrichtet. :-)

AMD Catalyst verwendet die XvBA-Schnittstelle (X-Video Bitstream Acceleration) für die Videobeschleunigung. Diese Schnittstelle hat AMD für die hauseigenen Grafikkarten entwickelt und ist die Antwort auf die VDPAU-Schnittstelle (Video Decode and Presentation API for Unix) von NVIDIA. Das gute daran, die Schnittstellenbeschreibungen sind Open-Source. ;-)

Auf der Suche nach einer Anbindung zwischen AMDs XvBA und VA API (Video Acceleration API) bin ich auf das xvba-video Projekt gestoßen. Die Schnittstelle zwischen XvBA und VA API kann momentan die Videoformate H.264 wie auch VC-1 behandeln und an die Grafikkarte durch reichen. Es gab nur ein Problem, dass die Schnittstelle komplett auf einem Debian-System programmiert wurde und für openSUSE etwas angepasst werden musste. Dann gab es noch eine weitere Hürde, dass die VA API die XvBA-Anbindung nicht laden konnte. Wenn man hier jetzt die Videobeschleunigung im VLC Media Player aktiviert, dann stürzt VLC grandios ab. Also, musste ein Workaround in Form einer Shellvariable her, um VA API explizit die fglrx-Schnittstelle zu aktivieren:

LIBVA_DRIVER_NAME="fglrx"

In der Konsole habe ich überprüft, ob die XvBA-Schnittstelle in VA API geladen werden konnte (Dieses Tool befindet sich im Paket vaapi-tools):

vainfo

Die Ausgabe bestätigt dies:

libva: libva version 0.32.0
libva: User requested driver 'fglrx'
libva: Trying to open /usr/lib64/dri/fglrx_drv_video.so
libva: va_openDriver() returns 0
vainfo: VA API version: 0.32
vainfo: Driver version: Splitted-Desktop Systems XvBA backend for VA-API - 0.8.0
vainfo: Supported profile and entrypoints
      VAProfileH264High               : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD

Mit all dieser Erfahrung habe ich (man kennt es ja nicht anders ;-) ) ein Paket namens xvba-video gebaut. Das erste Problem war, wie man das Paket für openSUSE 11.3, 11.4 und auch Tumbleweed mit jeweils für 32-bit und 64-bit Systemen baut und regelmäßig aktualisiert. Mein erste Gedanke war das Paket auf unserem openSUSE Build Service (OBS) zu bauen und hosten zu lassen. Leider benötigt das Paket einige Teile vom AMD Catalyst, um korrekt gegen XvBA von AMD zu linken. Da AMD Catalyst leider nicht Open-Source ist, darf daher dieser gewisse Teil nicht für die Öffentlichkeit verfügbar sein und könnte auf dem OBS Probleme machen.

Da fällt mir noch PackMan ein und habe Pascal Bleser (openSUSE Mitglied) vom PackMan-Team gefragt, ob er mein Paket unterstellen könnte. Er hat zugestimmt und mir ein Account zum PackMan Build Service eingerichtet. Der PackMan Build Service baut auf das openSUSE Build Service auf und lässt sich zu meiner Freude genauso bedienen. Um trotzdem den Closed-Source Teil aus lizenztechnischen Gründen nicht öffentlich verfügbar zu machen, habe ich das Paket aufgeteilt. Es wird nur zur Bauzeit geladen und gelinkt. Diese vorgehensweise halte ich momentan für sinnvoll. Da man sowieso AMD Catalyst auf dem Rechner installiert hat, ist die statische XvBA-Library identisch.

Hinweis: Um die Hardware-Videobeschleunigung via XvBA zu nutzen, muss ein recht aktueller AMD Catalyst Treiber installiert sein. Eine aktuelle Installationsanleitung zu AMD Catalyst gibt es auch in diesem Blog, bitte hierzu die Suchfunktion benutzen.

PackMan-Repo einrichten

Falls man noch kein PackMan-Repo eingerichtet hat, werde ich in diesem Abschnitt die notwendigen Schritte anleiten.

PackMan-Repo via YaST einrichten

  1. Über das YaST-Kontrollzentrum „Software-Repositories“ starten.
  2. Unten links auf Hinzufügen klicken.
  3. Als Medientyp „Community/Gemeinschafts-Repositories“ auswählen und auf Weiter klicken.
  4. Den Eintrag „Packman-Repository“ einhaken und auf Okay klicken. Ggfs. im nächsten Dialogfenster das GPG-Schlüssel vom Repo importieren.
  5. Dann in der Liste „Packman-Repository“ auswählen und die Priorität auf z.B. 60 setzen. Somit werden neue Pakete bevorzugt aus diesem Repo quasi vor OSS bzw. NON-OSS wie auch das Update-Repo installiert.
  6. Abschließend auf Okay klicken

PackMan-Repo via zypper einrichten

  1. PackMan-Repo hinzufügen:
    zypper ar -f 'http://packman.inode.at/suse/openSUSE_11.4/' 'PackMan'
  2. Priorität z.B. auf 60 ändern:
    zypper mr -p 60 'PackMan'

VideoLAN-Repo einrichten

Falls man noch kein VideoLAN-Repo eingerichtet hat, werde ich in diesem Abschnitt die notwendigen Schritte anleiten.

VideoLAN-Repo via YaST einrichten

  1. Über das YaST-Kontrollzentrum „Software-Repositories“ starten.
  2. Unten links auf Hinzufügen klicken.
  3. Als Medientyp „URL angeben“ auswählen und auf Weiter klicken.
  4. Den Repository-Namen eingeben: VideoLAN
  5. Die URL eingeben: http://download.videolan.org/pub/videolan/vlc/SuSE/11.4/
  6. Auf Weiter klicken. Ggfs. das GPG-Schlüssel vom Repo importieren.
  7. Dann in der Liste „VideoLAN“ auswählen und die Priorität auf z.B. 60 setzen. Somit werden neue Pakete bevorzugt aus diesem Repo quasi vor OSS bzw. NON-OSS wie auch das Update-Repo installiert.
  8. Abschließend auf Okay klicken

VideoLAN-Repo via zypper einrichten

  1. VideoLAN-Repo hinzufügen:
    zypper ar -f 'http://download.videolan.org/pub/videolan/vlc/SuSE/11.4/' 'VideoLAN'
  2. Priorität z.B. auf 60 ändern:
    zypper mr -p 60 'VideoLAN'

Installation von xvba-video, VLC 1.2.0 (Beta) + Codecs

Jetzt kommen wir zur eigentlichen Installation von xvba-video, VLC Media Player, FFmpeg, unter anderem auch einige Codecs wie z.B. H.264, usw. Warum installiert man eigentlich das Paket FFmpeg und die Codecs vom PackMan-Repo und VLC Media Player vom VideoLAN-Repo? Der Grund ist, dass FFmpeg aus dem PackMan-Repo umfassend mit einigen Codecs ausgestattet sind und der FFmpeg vom VideoLAN eben nicht ganz so umfangreich ist. Warum installiert man nun eine Beta-Version von VLC Media Player? Die Beta vom VLC ist die einzige Version, die wirklich mit VA API und FFmpeg reibungslos funktioniert.

Via YaST installieren

  1. Über das YaST-Kontrollzentrum „Software installieren oder löschen“ starten.
  2. Dann oben links auf Anzeigen / Installationsquellen klicken und in dieses neue Tab wechseln.
  3. Auf der linken Seite das PackMan-Repo auswählen.
  4. Dann den sekundären Filter auf „Suche“ und den Suchmodus auf „Beginnt mit“ stellen .
  5. Folgende Pakete im Suchfeld eingeben und zur Installation auswählen:
    • ffmpeg
    • xvba-video

    Die notwendigen Codecs werden automatisch mit ausgewählt.

  6. Auf der linken Seite wählt man nun das VideoLAN-Repo aus.
  7. Folgendes Paket im Suchfeld eingeben und zur Installation auswählen:
    • vlc-beta
  8. Abschließend die Installation per Klick auf Akzeptieren starten.
  9. Den Computer neustarten.

Via zypper installieren

  1. Die Pakete ffmpeg und xvba-video aus dem PackMan-Repo installieren:
    zypper in --from 'PackMan' ffmpeg xvba-video
  2. Die Auswahl der Software mit Ja (j) bestätigen.
  3. Das Pakete vlc-beta aus dem VideoLAN-Repo installieren:
    zypper in --from 'VideoLAN' vlc-beta
  4. Und wieder die Auswahl der Software mit Ja (j) bestätigen.
  5. Den Computer neustarten.

VLC für die Hardware-Videobeschleunigung konfigurieren

  1. VLC Media Player starten
  2. Dann im Menü auf Extras / Einstellungen klicken.
  3. Unter links die Option „Einstellungen zeigen“ auf Alle auswählen, um alle Optionen anzeigen zu lassen (Experten-Modus).
  4. Danach in der Menü-Sidebar auf Input/Codecs / Videocodecs / FFmpeg durchhangeln und im Abschnitt Decoding die „Hardware Dekodierung“ aktivieren.
  5. Jetzt hangelt man sich unter Video / Ausgabemodule durch und das Videoausgabe-Modul „GLX Videoausgabe (XCB)“ auswählen.
  6. Abschließend auf Speichern klicken und den VLC Media Player neustarten.

Ein kleiner Video-Test kann Aufschluß bringen, ob die Hardware-Videobeschleunigung wirklich funktioniert.

http://www.h264info.com/clips.html

Sobald man ein Video von der o.g. Webseite gestartet hat, kann man den Prozess vom VLC Media Player im Systemmonitor beobachten. Es soll auf jeden Fall ein stabiler Wert für VLC sein (ca. 10% CPU Last anstatt 30%-40% je nach CPU) und nur sehr geringfügig schwanken.

Bitte teilt mir eure Erfahrung und Feedbacks zu diesem Thema mit. Vielen Dank.

Have a lot of fun! ;-)