How to use VLC with hardware acceleration on a Raspberrypi
When using Raspbian, a Debian derivative, VLC is readily available from the repositories, alas the binary does not make use of Raspberrypi's hardware acceleration. Watching videos is no fun with that version of VLC. The only alternative is omxplayer which comes with the distribution. Fortunately, VLC now does support hardware acceleration, only you have to compile it yourself, which is not for the fainthearted.
Here's how to do it.
There is a guide on the web at
http://intensecode.blogspot.de/2013/10/tutorial-vlc-with-hardware-acceleration.html
that is the base of this document, but it is missing some details which will be provided here.
Step 1: System Update
It is always wise to have the operating system up-to-date.
# sudo apt-get update
# sudo apt-get upgrade
Step 2: Update gcc
There is a bug in gcc 4.6 which causes the compile to fail (when trying to build the current version). Therefore we have to update to gcc 4.7 or later in the first place. That won't hurt anyway.
With gcc 4.6 you are very likely going to run into this:
demux/oggseek.c: In function 'Oggseek_GranuleToAbsTimestamp':
ERROR : demux/oggseek.c:805: 1: unrecognizable insn:
(insn 266 265 267 6 (set (subreg:SI (reg:DI 213 [ p_stream_4(D)->i_keyframe_offset ]) 0)
(sign_extend:SI (mem/s:QI (plus:SI (reg/v/f:SI 178 [ p_stream ])
(const_int 1080 [0x438])) [0 p_stream_4(D)->i_keyframe_offset+0 S1 A64]))) demux/oggseek.c:786 -1
(nil))
demux/oggseek.c:805:1: internal compiler error: in extract_insn, at recog.c:2109
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.6/README.Bugs> for instructions.
Preprocessed source stored into /tmp/ccMrDMIU.out file, please attach this to your bugreport.
make: *** [all] Error 2
Update C++ compiler
It would be possible to remove gcc 4.6, but this is not recommended as it might break a lot of dependencies. It is better to install the new version in parallel, and switch to it:
# sudo apt-get install gcc-4.7 g++-4.7
Then remove all update alternatives (this may cause some warnings and errors to be reported, but that is no problem and can be ignored):
# sudo update-alternatives --remove-all gcc
# sudo update-alternatives --remove-all g++
Now add gcc 4.6 and gcc 4.7 as alternatives, make g++ a slave configuration of gcc. That switches g++ always together with gcc 4.6:
# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7
The command update-alternatives will now allow to switch between the versions. Simply use it to go to gcc 4.7 now:
# sudo update-alternatives --config gcc
This will show a list of alternatives from which you can select the new version, just follow the instructions.
Step 3: environment preparation - build tools installation
# sudo apt-get install git libtool build-essential pkg-config autoconf
Step 4: get VLC sources from git
# git clone git://git.videolan.org/vlc.git
# cd vlc
# ./bootstrap
Step 5: configure enabling the important modules for hardware acceleration on raspberry
This is a list of modules that are required, according to the base article:
# sudo apt-get install liba52-0.7.4-dev libdirac-dev libdvdread-dev libkate-dev libass-dev libbluray-dev libcddb2-dev libdca-dev libfaad-dev libflac-dev libmad0-dev libmodplug-dev libmpcdec-dev libmpeg2-4-dev libogg-dev libopencv-dev libpostproc-dev libshout3-dev libspeex-dev libspeexdsp-dev libssh2-1-dev liblua5.1-0-dev libopus-dev libschroedinger-dev libsmbclient-dev libtwolame-dev libx264-dev libxcb-composite0-dev libxcb-randr0-dev libxcb-xv0-dev libzvbi-dev
The following modules should also be installed to avoid problems:
No sound (bad...)
No XML support (cannot read playlists)
No SDL support (cannot switch to full screen, brings dbus support along)
No short keys (very bad, cannot pause/exit when in full screen)
And quite a few more
# sudo apt-get install libdvbpsi-dev libasound2-dev libxml2-dev libxpm-dev libsdl1.2-dev sdl-image1.2 libxcb-keysyms1-dev libxinerama-dev libxext-dev qt4-dev-tools
Maybe you want QtCreator as well if you have the Qt libraries anyway, but if you don't want to write software with Qt, you don't need that one:
# sudo apt-get qtcreator
Step 6: compile
Now do configure and build:
# ./configure --enable-rpi-omxil --enable-dvbpsi --enable-x264
# make clean allNow go and watch TV, go to bed, whatever: That'll take some six hours now.
As last step, start the installation:
# sudo make install
Step 7: The installed version of VLC will not find some libs
Some libs cannot be found after make install, so let's help VLC out:
# sudo ln -s /usr/local/lib/libvlc* /usr/lib/
# sudo ln -s /usr/local/lib/libx264.a /usr/lib/
# sudo ln -s /usr/local/lib/vlc /usr/lib/vlc
Step 8: Start VLC
# vlc --vout omxil_vout <other_params_you_might_need>
Change VLC properties
To make sure that VLC starts with hardware acceleration, the command line parameter should be added to the properties.
Step x: after recompiles
If you happen to recompile VLC (e.g. if you decide to change some configure option), remember to reset it after make install:
# vlc --reset-config –reset-plugins-cache
Resume
Now that VLC works with hardware acceleration I can say this is nice, but not as expected: With acceleration on I hoped that the videos would run inside the VLC window as usual. But they don't - an overlay opens that shows the video that cannot be resized, just as with omxplayer.
Also, some videos that do run smoothly with omxplayer (like a full HD 1920x1080 Bluray Video by Nightwish) stops every 2 or 3 seconds for some 5 seconds. No good.
Seems to me I'll have to put some extra work in it, still...