LINUX nun schon bald ein Jahr lang. Derweil war AMD's Entsprechung zu VDPAU genannt XvBA
schon eher (seit Mitte 2008) in deren fglrx-Treiber drin. Nur hat AMD weder eine
Beschreibung der API noch eine Beispielimplementation veröffentlicht, so dass
das ganze bis Ende 2009 ungenutzt geblieben ist.
Das hat sich inzwischen geändert. Es gibt inzwischen eine Bibliothek, die die
Erweiterung XvBA mit der offenen API VAAPI (hervorgeracht von Intel für deren
GMA-Grafikchipsätze) nutzbar macht.
Das ganze wollte ich dann doch mal ausprobieren - mein RS780G-Chipsatz
im Medienrechner drängt sich ja eigentlich zur Videodekodierung geradezu auf.
Xorg-Server auf Version 1.7 updaten
Als erstes einmal auf den xorg-server 1.7 updaten. Version 1.7.6 ist seit 16.04.2010 auch für amd64 stable.
Bei mir war noch 1.6.5 installiert - was beim Update einige Blocks mit X-Bibliotheken
verursacht hat. Das hat sich aber alles durch "unmergen" der betroffenen Pakete
lösen lassen (z.B. libXi, libXinerama, libXtst u.s.w.).
Nach dem Update des xorg-xservers müssen alle xorg-Treiber neu übersetzt werden - also
Code: Alles auswählen
emerge -1u xf86-input-evdev
emerge -1u xf86-input-mouse
emerge -1u xf86-input-keyboard
emerge -1u xf86-video-ati
emerge -1u xf86-video-radeonhd
emerge -1u xf86-video-vesa
emerge -1u xf86-video-nvidia
# ... und was noch so an Grafikkarten installiert ist
Code: Alles auswählen
emerge -a1 $(qlist -I -C x11-driver)
die in der make.conf angegeben sind.
Neuesten fglrx-Treiber installieren
Möglichst den neuesten fglrx-Treiber installieren. Das ist zur Zeit x11-drivers/ati-drivers-10.4.
Die Video-Erweiterung XvBA ist zwar schon über ein Jahr im Treiber drin - aber sicher ist sicher.
Der ist noch im Testing-Tree - daher in /etc/portage/package.keywords eintragen:
>=x11-drivers/ati-drivers-10.4
Installieren und das Umstellen auf die OpenGL-Bibliotheken von AMD nicht vergessen.
Code: Alles auswählen
emerge ati-drivers
eselect opengl set ati
Kernelmodul erfolgreich geladen werden und DRI funktionieren - sonst wird das
mit der Videobeschleunigung natürlich nichts.
Wenn nach dem Start des XServers folgende Zeilen in der Xorg.0.log auftauchen,
sieht es schon mal gut aus:
Code: Alles auswählen
(**) fglrx(0): Textured Video is enabled. # Videoausgabe über DRI -> Overlay wird von XvBA nicht unterstützt
(II) fglrx(0): DRI initialization successfull! # wie schön...
(II) fglrx(0): UVD2 feature is available # genau das möchten wir jetzt gerne nutzen!
Für den Zugriff auf die Hardwarebeschleunigte Videausgabe benötigt man die Bibliotheken:
xvba-video und libva
sowie eine gepatchte Version des Mplayers von http://www.splitted-desktop.com/~gbeauc ... yer-vaapi/
Da wir mit Gentoo arbeiten, besorgen wir uns am besten Ebuilds z.B. aus dem arcon - Overlay
http://code.google.com/p/arcon/
Man kann jetzt das gesamte Overlay hinzufügen mit
Code: Alles auswählen
layman -a arcon
nicht wie sie sollen (mplayer-vaapi).
Außerdem befinden sich im arcon-Overlay auch Pakete, die sich mit dem normalen Portage-Testing-Tree überschneiden und bei mir auch installiert sind (z.B. x11-drivers/ati-drivers). Die würden dann auch mit den Versionen aus dem Overlay überschrieben werden, was ich nicht möchte.
Der Versuch, mit layman nur ausgewählte Pakete eines Overlays zu installieren, hat bei mir nicht funktioniert.
Wenn jemand weiß, wie das geht, kann er es gern weitergeben.
Daher habe ich die benötigten EBuilds aus dem arcon-Overlay unter /usr/local/portage/layman
in meinen eigenen lokalen Overlay-Tree unter /usr/local/portage kopiert.
Code: Alles auswählen
cd /usr/local/portage
mkdir x11-libs
cd x11-libs
mkdir xvba-video
cp -r usr/local/portage/layman/arcon/x11-libs/xvba-video/* xvba-video
mkdir libva
cp -r usr/local/portage/layman/arcon/x11-libs/libva/* libva
cd ..
mkdir media-video
cd media-video
mkdir mplayer
cp -r usr/local/portage/layman/arcon/media-video/mplayer/* mplayer
Code: Alles auswählen
layman -d arcon
xvba-video
Das EBuild ermittelt die zu installierende Version der Bibliothek aus seinem Dateinamen.
Also einfach xvba-video-0.6.10.ebuild so umbennen, wie die neueste Version auf
http://www.splitted-desktop.com/~gbeauc ... vba-video/ heißt.
Ob die Variante für x86 oder amd64 installiert werden muss, ermittelt das Ebuild selbst.
Und danach das ebuild digest nicht vergessen.
Code: Alles auswählen
cd /usr/local/portage/x11-libs/xvba-video
mv xvba-video-0.6.10.ebuild xvba-video-0.6.11.ebuild
rm Manifest
ebuild xvba-video-0.6.11.ebuild digest
Auch dieses EBuild ermittelt die zu installierende Version der Bibliothek aus seinem Dateinamen,
auch wenn der etwas anders strukturiert ist, als die Namen der Tarballs auf
http://www.splitted-desktop.com/~gbeauchesne/libva/.
Um die neueste Version libva_0.31.0-1+sds13.tar.gz zu installieren, muss
das Ebuild wie folgt umbenannt werden:
Code: Alles auswählen
cd /usr/local/portage/x11-libs/libva
mv libva-0.31.0_p10.ebuild libva-0.31.0_p13.ebuild
das Ebuild so noch nicht funktioniert. Es muss im Ebuild die Zeile 32 von
Code: Alles auswählen
mv b/src/* src
Code: Alles auswählen
mv b/va/* va
Code: Alles auswählen
rm Manifest
ebuild libva-0.31.0_p13.ebuild digest
=x11-libs/xvba-video-0.6.11
=x11-libs/libva-0.31.0_p13
Und dann installieren:
Code: Alles auswählen
emerge -1 xvba-video
emerge -1 libva
Installieren der gepatchten MPlayer-Version
Das EBuild aus dem Arcon-Overlay hat sich leider allen Versuchen erfolgreich widersetzt,
eine gepatchte MPlayer-Version zusammenzubauen. Es baut zwar einen MPlayer aus
dem SVN, solange man die USE-flags xanim und real weglässt. Der Patch
mplayer-vaapi wird aber definitiv nicht angewendet, auch wenn er heruntergeladen wurde
und in den distfiles auftaucht.
Daher bleibt vorerst nur die manuelle Methode ohne Portage.
Um die Abhängigkeiten zu erfüllen, ist es wohl am besten, vorher einen möglichst
aktuellen Mplayer aus dem normalen Portage-Tree zu installieren.
Der kann während des manuellen Compilierens der gepachtchten Version auch installiert bleiben, da
das dort mitgelieferte Script kein make install ausführt sondern die Binaries im
Source-Code-Verzeichnis belässt.
Den Source-Tarball der neuesten gepatchten Mplayer-Version herunterladen und auspacken:
Code: Alles auswählen
cd /usr/local/src
wget http://www.splitted-desktop.com/~gbeauchesne/mplayer-vaapi/mplayer-vaapi-20100414-FULL.tar.bz2
tar xpjf mplayer-vaapi-20100414-FULL.tar.bz2
Code: Alles auswählen
cd mplayer-vaapi-20100414
./checkout-patch-build.sh
mplayer-vaapi .
Die kann man jetzt z.B. nach /usr/local/bin kopieren und von /usr/bin aus mit
einem anderen Namen darauf verlinken. Das hat den Vorteil, das der Mplayer aus dem Portage
installiert bleibt, so dass sich Portage nicht über fehlende Abhängigkeiten beschwert.
Code: Alles auswählen
cp /usr/local/src/mplayer-vaapi-20100414/mplayer-vaapi/mplayer /usr/local/bin
ln -s /usr/local/bin/mplayer /usr/bin/mplayer-vaapi
nach /usr/bin.
Ausprobieren
Wenn der Mplayer richtig gebaut wurde, sollte es jetzt einen neuen Videoausgabetreiber geben (letzte Zeile):
Code: Alles auswählen
mediabox / # mplayer-vaapi -vo help
MPlayer SVN-r31027-4.3.4 (C) 2000-2010 MPlayer Team
Available video output drivers:
xv X11/Xv
gl_nosw OpenGL no software rendering
x11 X11 ( XImage/Shm )
xover General X11 driver for overlay capable video output drivers
gl OpenGL
gl2 X11 (OpenGL) - multiple textures version
dga DGA ( Direct Graphic Access V2.0 )
sdl SDL YUV/RGB/BGR renderer (SDL v1.1.7+ only!)
fbdev Framebuffer Device
fbdev2 Framebuffer Device
matrixview MatrixView (OpenGL)
v4l2 V4L2 MPEG Video Decoder Output
xvidix X11 (VIDIX)
cvidix console VIDIX
null Null video output
mpegpes MPEG-PES to DVB card
yuv4mpeg yuv4mpeg output for mjpegtools
png PNG file
jpeg JPEG file
gif89a animated GIF output
tga Targa output
pnm PPM/PGM/PGMYUV file
md5sum md5sum of each frame
>>>>> vaapi VA API with X11 <<<<<<<<<<<
den Radeon-Karten besser über OpenGL, daher muss DRI funktionieren, wie
schon am Anfang erwähnt. Ohne OpenGl werden teilweise B-Frames nicht richtig
dekodiert, so dass es immer mal kurz ruckelt.
Code: Alles auswählen
mplayer-vaapi -vo vaapi:gl -va vaapi Video_in_h264.mkv
.
.
Matroska file format detected.
VIDEO: [avc1] 1920x816 24bpp 23.976 fps 0.0 kbps ( 0.0 kbyte/s)
[vo_vaapi] Using OpenGL rendering <<<<<<<<<<<<<<<
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
[VD_FFMPEG] VA API accelerated codec. <<<<<<<<<<<<<<<
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
==========================================================================
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
AUDIO: 48000 Hz, 2 ch, s16le, 1536.0 kbit/100.00% (ratio: 192000->192000)
Selected audio codec: [ffdca] afm: ffmpeg (FFmpeg DTS)
==========================================================================
AO: [oss] 48000Hz 2ch s16le (2 bytes per sample)
Starting playback...
[VD_FFMPEG] Trying pixfmt=1.
Movie-Aspect is 2.35:1 - prescaling to correct movie aspect.
VO: [vaapi] 1920x816 => 1920x816 H.264 VA API Acceleration <<<<<<<<<<<<<<<
[vo_vaapi] Using 1:1 VA surface mapping
[VD_FFMPEG] XVMC-accelerated MPEG-2.
jetzt die Farbwiedergabe. Das ist alles irgendwie noch etwas zu bunt und hat bei manchen
Szenen einen Farbstich ins Grüne. Mal sehen was die Farb-Einstellungen des Radeon-Treibers
da noch machen können.
Alle weiteren Optionen des vaapi-Ausgabetreibers sind:
Code: Alles auswählen
-vo vaapi command line help:
Example: mplayer -vo vaapi:gl
Options:
dm
0: use least-recently-used VA surface
1: identify VA surface with MPI index
2: auto-detect use of direct surface mapping (default)
deint (all modes > 0 respect -field-dominance)
0: no deinterlacing (default)
1: only show first field
2: bob deinterlacing
colorspace
0: guess based on video resolution
1: ITU-R BT.601 (default)
2: ITU-R BT.709
gl
Enable OpenGL rendering
reflect
Enable OpenGL reflection effects
* MPEG-2
* MPEG-4 ASP (DivX)
* H.263 (MPEG-4 short-video header variant)
* MPEG-4 AVC (H.264)
* Windows Media Video 9 (WMV3)
* Windows Media Video 9 Advanced (VC-1 Advanced profile)