Ein einem älteren Artikel haben wir uns den MPlayer inkl. SMplayer und VDPAU Support aus einem extra Rebository installiert. Seit Ubuntu 9.10 benötigen wir keine zusätzliche Quellen, da der Nvidia-185-Treiber im originalen Karmic-Rebo zufinden ist. Mittlerweile gibt es auch einen weiteren Hardwarebeschleuniger, VAAPI verwendet die Grafikkarte zum Dekodieren, Deinterlacen und Skalieren von Videos. VDPAU wird in diesem Fall als „backend“ von VAAPI genutzt, das heißt jede Software die VAAPI unterstüzt, unterstüzt VDPAU. Bevor wir aber den VLC media player oder MPlayer mit VAAPI Support kompilieren können müssen wir unser System erstmal für VAAPI vorbereiten.
Zuerst vergewissern wir uns das der 185er NVIDIA Treiber installiert ist. 🙄
aptitude install nvidia-185-kernel-source nvidia-185-libvdpau nvidia-185-libvdpau-dev nvidia-settings nvidia-glx-185
Jetzt installieren wir libva (VAAPI)…
cd /usr/src wget tar xvfz libva-latest.tar.gz cd libva-0.31.0 aptitude install dpkg-dev fakeroot autotools-dev libdrm-dev automake1.9 libtool cdbs debhelper x11proto-xext-dev libxext-dev libxfixes-dev dpkg-buildpackage -rfakeroot -uc -us cd .. dpkg -i libva*.deb
…ergänzend zu libva müssen wir vdpau-video installieren.
wget tar xvfz vdpau-video-latest.tar.gz cd vdpau-video-0.5.2 make clean ./configure make && make install ldconfig vainfo vainfo: Supported profile and entrypoints VAProfileMPEG2Simple : VAEntrypointVLD VAProfileMPEG2Main : VAEntrypointVLD VAProfileH264Main : VAEntrypointVLD VAProfileH264High : VAEntrypointVLD VAProfileVC1Simple : VAEntrypointVLD VAProfileVC1Main : VAEntrypointVLD VAProfileVC1Advanced : VAEntrypointVLD
Nun die Audio- und Video-Codecs über FFmpeg.
cd /usr/src aptitude install subversion libfaac-dev libmp3lame-dev svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg cd ffmpeg svn update
Für FFmpeg benötigen wir noch den h264.patch. Download
patch -p1 < h264.patch
Unser Patch wird beim editieren des Makefile’s auf Fehler laufen, daher müssen wir /usr/src/ffmpeg/libvacodec/Makefile per Hand editieren, wir ersetzen…
OBJS-$(CONFIG_H261_DECODER) += h261dec.o h261.o \ mpegvideo.o error_resilience.o OBJS-$(CONFIG_H261_ENCODER) += h261enc.o h261.o \ mpegvideo_enc.o motion_est.o \ ratecontrol.o mpeg12data.o \ mpegvideo.o OBJS-$(CONFIG_H263_DECODER) += h263dec.o h263.o h263_parser.o \ mpegvideo.o error_resilience.o OBJS-$(CONFIG_H263_VAAPI_HWACCEL) += vaapi_mpeg4.o OBJS-$(CONFIG_H263I_DECODER) += h263dec.o h263.o \ mpegvideo.o error_resilience.o OBJS-$(CONFIG_H263_ENCODER) += mpegvideo_enc.o motion_est.o \ ratecontrol.o h263.o mpeg12data.o \ mpegvideo.o error_resilience.o OBJS-$(CONFIG_H264_DECODER) += h264.o h264idct.o h264pred.o \ h264_parser.o cabac.o \ mpegvideo.o error_resilience.o OBJS-$(CONFIG_H264_ENCODER) += h264enc.o h264dspenc.o
…mit…
OBJS-$(CONFIG_H261_DECODER) += h261dec.o h261.o mpegvideo.o error_resilience.o OBJS-$(CONFIG_H261_ENCODER) += h261enc.o h261.o mpegvideo_enc.o motion_est.o ratecontrol.o mpeg12data.o mpegvideo.o OBJS-$(CONFIG_H263_DECODER) += h263dec.o h263.o h263_parser.o mpeg12data.o mpegvideo.o error_resilience.o OBJS-$(CONFIG_H263_VAAPI_HWACCEL) += h263dec.o h263.o h263_parser.o mpeg12data.o mpegvideo.o error_resilience.o vaapi.o vaapi_mpeg4.o OBJS-$(CONFIG_H263I_DECODER) += h263dec.o h263.o mpeg12data.o mpegvideo.o error_resilience.o OBJS-$(CONFIG_H263_ENCODER) += mpegvideo_enc.o motion_est.o ratecontrol.o h263.o mpeg12data.o mpegvideo.o error_resilience.o OBJS-$(CONFIG_H263P_ENCODER) += mpegvideo_enc.o motion_est.o ratecontrol.o h263.o mpeg12data.o mpegvideo.o error_resilience.o OBJS-$(CONFIG_H264_DECODER) += h264.o h264idct.o h264pred.o h264_parser.o cabac.o mpegvideo.o error_resilience.o OBJS-$(CONFIG_H264_ENCODER) += h264enc.o h264dspenc.o OBJS-$(CONFIG_H264_VAAPI_HWACCEL) += h264.o h264idct.o h264pred.o h264_parser.o cabac.o mpegvideo.o error_resilience.o vaapi.o vaapi_h264.o OBJS-$(CONFIG_H264_VDPAU_DECODER) += vdpau.o h264.o h264idct.o h264pred.o h264_parser.o cabac.o mpegvideo.o error_resilience.o
Jetzt geht es für FFmpeg in den Endspurt.
cd /usr/src/ffmpeg ./configure --enable-gpl --enable-postproc --enable-pic --enable-shared --enable-libmp3lame --enable-libfaac --enable-nonfree --enable-pthreads --disable-vdpau --enable-vaapi
Achtung! Nach dem ./configure… muss h264_vaapi unter hw_accel zusehen sein. Zu guter Letzt…
make && make install cp /usr/src/ffmpeg/libavcodec/vaapi.h /usr/include/libavcodec/ ldconfig ffmpeg FFmpeg version SVN-r20545, Copyright (c) 2000-2009 Fabrice Bellard, et al. built on Nov 18 2009 10:57:58 with gcc 4.4.1 configuration: --enable-gpl --enable-postproc --enable-pic --enable-shared --enable-libmp3lame --enable-libfaac --enable-nonfree --enable-pthreads --disable-vdpau --enable-vaapi libavutil 50. 4. 0 / 50. 4. 0 libavcodec 52.41. 0 / 52.41. 0 libavformat 52.39. 2 / 52.39. 2 libavdevice 52. 2. 0 / 52. 2. 0 libswscale 0. 7. 1 / 0. 7. 1 libpostproc 51. 2. 0 / 51. 2. 0 At least one output file must be specified
Sooooo, unser Ubuntu wäre dann hiermit für VAAPI vorbereitet. Jetzt können wir entweder mit dem VLC media Player oder dem MPlayer inkl. SMPlayer Front-End fortfahren.
Anleitung:
Ubuntu – VLC media player mit VAAPI Unterstützung
Ubuntu – MPlayer inkl. SMPlayer mit VAAPI Unterstützung
.
Ich musste FFMPEG mit „–disable-pic“ bauen, da ansonsten ./libavcodec/x86/h264dsp_mmx.c nicht gebaut werden konnte. Ist wohl irgendein Fehler was mit
https://bugs.gentoo.org/show_bug.cgi?id=290741
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=11203
zu tun hat. Beim Bauen mit PIC benötigt der Code mehr Register als mein Prozessor hergibt.
ein paar hw infos zu deiner kiste waeren gut. ich moechte gerne fuer intel clarkdale va-api support bauen, da ist mir der nvidia treiber erstmal rille (nehme ich an).
beste gruesse,
stefan