Fully Optimised Raspbian Jessie Lite with Accelerated Qt Multimedia Backend (Pi2)

This is a follow-up to the image provided in this article. The concept is identical, but in this case this firmware is smaller, it is based on Raspbian Jessie Lite and includes updated software. The firmware was 1.9GB while now is 759MB. This is the current setup (but I encourage to update to the latest possible firmware):

pi@raspberrypi:~ $ vcgencmd version
Feb 25 2016 14:25:47 
Copyright (c) 2012 Broadcom
version dea971b793dd6cf89133ede5a8362eb77e4f4ade (clean) (release)
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.1.18-v7+ #846 SMP Thu Feb 25 14:22:53 GMT 2016 armv7l GNU/Linux

Download the image here (md5: 06d75d03f63674350be6cb807850bf09).
(Please be patient while downloading and decompressing)

The image includes:

  • Qt 5.6.0-rc1: built for armv7 with neon optimisations, including support for touch screens, gstreamer, libinput, tslib, and Bluetooth/Bluetooth BLE using bluez (complete configuration below).
  • QtWebKit 5.6.0: includes WebKit 1 and WebKit 2.
  • QtWebEngine 5.6.0-rc1: multimedia only based on ffmpeg.
  • Dependant libs: evdev, icu (not the one provided by raspbian), mtdev, libts.
  • Samples: samples from the repo to test POT.
  • POT: POT version 5.2.1 including ffmpeg 2.8.6.


To have a quick look at multimedia in Qt/QML test with this commands:

/usr/local/Qt-rasp2-5.6.0-rc1/bin/qmlscene "some_video_file" samples/video_simple.qml
/usr/local/Qt-rasp2-5.6.0-rc1/bin/qmlscene "some_url" samples/webkit_simple.qml
/usr/local/Qt-rasp2-5.6.0-rc1/bin/qmlscene "some_url" samples/webengine_simple.qml
/home/pi/piomxtextures_pocplayer --multipleanimtest "720p_video_1" "720p_video_2"

Please let me know if you find something wrong and file a bugreport on https://github.com/carlonluca/pi.

Have fun! 😉

72 thoughts on “Fully Optimised Raspbian Jessie Lite with Accelerated Qt Multimedia Backend (Pi2)”

  1. In that case check POCPlayer source code. Probably during initial setup the proper EGL configuration is selected. The configuration of the fb is not probably taken into configuration by Qt.

  2. I tested POCPlayer. I'm not quite sure is it 24 or maybe 32, because video I checked with has no opacity, but POCPlayer uses at least 24 bits since video looks much better then in my application.

  3. Hello Luca,

    I was reading your older blog posts, and stumbled upon this one http://thebugfreeblog.blogspot.rs/2012/11/32-bit-color-depth-qt-on-raspberry-pi.html, and one that was linked from there http://thebugfreeblog.blogspot.rs/2013/03/bring-up-qt-501-on-raspberry-pi-with.html.

    I also noticed before that no matter what I set with fbset color depth stays same(as mentioned in first linked blog). I am using firmware 4.4.27-v7+ which I updated to a few days ago using rpi-update if it is even relevant for this topic.

    I am using this image, so I was wondering do you have prebuild libraries needed to run Qt QML applications in 32 depth mode(or 24 maybe) since you made this image, and have mentioned building needed libraries with 32 depth before?

    Thanks in advance.

    P.S.If you do not and I would have to build it myself would this http://thebugfreeblog.blogspot.rs/2012/11/32-bit-color-depth-qt-on-raspberry-pi.html be enough to make it work? Also which version of Qt source code should be used for building libraries in order to work with Qt you built on this image.

  4. Most h264 should be supported. Refer to broadcom spefications to know the exceptions. If you bought also other codecs you can decode those as well, like mpeg2. Broadcom offers some.

  5. Hi Luca

    Do you know which formats(beside mp4) can be played in full HD resolution? I found that mov, m4v, 3gp and avi sometimes work well(didn't try them on full HD tbh but they are played). The problem is that avi is usually producing InvalidMedia status, but sometimes also works. Did you maybe tested more formats and know which can be played always with no worries?

  6. Hi Luca,

    I am developing some kind of virtual bingo app. Let me briefly tell you how it works. It plays three videos in a sequence non stopping. All videos are full HD by the way. First one is always the same. It is video of announcer telling players to get ready for next number. The second video loads dynamically based on next number received from server. It shows that number being picked. The third one is also loaded based on next number and it shows announcer telling players which number was picked. That sequence is looping on client application non stopping.

    The first problem I got was loading new videos(in other Video QML elements ofc) while some video i playing. I found spot in statically loaded video where missing few frames isn't a problem so that is fixed.

    The second problem is the only real one here. The thing is that at some time the app just stops and stays frozen. Sometimes that happens few seconds after app is started, other times app runs smoothly for much longer periods, but the thing is it isn't stable. Do you know, or have any idea, what could be the problem based on my story?

    I also tried loading all videos on start and playing them when needed, but then memory gets filled too fast and it says "eglCreateImageKHR: failed to create image for buffer 0x36 target 12465 error 0x300c". I am running app on Raspberry Pi 2, with memory split in such way that GPU gets 512MB. I tried to give GPU 768MB, but that doesn't fix the problem either.

  7. Hey Luca,

    I am developing some kind of virtual bingo game. Briefly it looks like this. I play three videos in loop. All videos are full HD by the way. First one is always the same and it is announcer telling players to get ready for next number. Second and third one are loaded dynamically based on which number is next and I get that number from server. Second is number being picked and third is announcer saying which number was picked. Those three videos run non stopping the entire time.

    The problem I got is that sometimes application just stops and freezes. This can happen as soon as I load dynamic videos for first numbers, but sometimes the app runs smoothly for much longer periods but then it freezes at some point of time. I gave GPU 512MB, giving it 768MB doesn't fix problem either. Loading all videos on start is also impossible since it fills entire memory and all fails. Do you know, or have any idea, base od what I've told you what could be the problem? I am using Raspberry Pi 2 by the way.

    P.S. The post above is also mine, you can delete it, it was a mistake.

  8. Just to add that fastest freezing happens just after loading second and third video for the first time(I load them both at once), but it also happens in other moments randomly.

  9. Try to update the firmware with rpi-update and the POT libs. If the problem persists please report the bug on github with a minimal code reproducing the issue.

  10. I get a error when playing a video many times after each other (same video) this is the error,
    COMXVideo::Decode – OMX_EmptyThisBuffer() failed with result(0x80001018)
    do you no how to fix it?

  11. Yes, I tried and it didn't work of course. That's what I expected after all but I tried anyway. ^^

    My question is can I copy files from directories like /usr/local/Qt-rasp2-5.6.0-rc1 and /home/pi/qtdeps which contain files that Qt needs and perhaps from some others directories from the image I downloaded here, and use them on Raspbian image for Banana Pi? If those files are compiled to run on ARM Cortex-A7 CPU I suppose they can be used on other OS image right? I would leave all other files on new image as they were, just add those from Luca's image needed to run Qt applications.

  12. Architecture is the same but the CPU, peripherals, GPU, etc are different and you can't just use the RPi image on the banana pi.

  13. Thanks for fast answer, but I think you are wrong mostly because I didn't provide you with correct information.

    Raspberry Pi 2(sorry I didn't mention it was RPi 2) has a ARM Cortex-A7 CPU, as does Banana Pi M2(sorry again). and also Banana Pi M3, which I am thinking about buying in the future. So I am using RPi 2, so CPU is the same. That's why I thought about just copying files as the easiest solution.

    I will look into the link you provided, but it'd be really great if the easier way of copying files to image is possible 🙂

  14. Hey Luca,

    I got a Banana Pi few days ago. It has a a better processor then my Raspberry, so naturally I wanted to use it to run my applications. I tried booting the image I got from here, but it couldn't boot that way.

    Are you maybe planning to create a image for banana pi in the future? If not which files do you think I would have to copy from your image to banana pi image for everything to run as on raspberry? Do you think it is even possible or not?

    Thanks in advance.

  15. Because for some reason the libs are not in the library search path. In this image the position is also added with an rpath so did you move the libs?

  16. "i@raspberrypi:~/qmlcpp/bin $ ldd qmlcpp
    linux-vdso.so.1 (0x7ecd8000)
    /usr/lib/arm-linux-gnueabihf/libarmmem.so (0x76fe0000)
    libQt5Quick.so.5 => not found
    libQt5Gui.so.5 => not found
    libQt5Qml.so.5 => not found
    libQt5Network.so.5 => not found
    libQt5Core.so.5 => not found
    libGLESv2.so => /opt/vc/lib/libGLESv2.so (0x76faf000)
    libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0x76f87000)
    libstdc++.so.6 => /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 (0x76eab000)
    libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0x76e30000)
    libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0x76e03000)
    libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x76cc1000)
    libEGL.so => /opt/vc/lib/libEGL.so (0x76c88000)
    libbcm_host.so => /opt/vc/lib/libbcm_host.so (0x76c62000)
    libvchiq_arm.so => /opt/vc/lib/libvchiq_arm.so (0x76c4c000)
    libvcos.so => /opt/vc/lib/libvcos.so (0x76c32000)
    libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0x76c1e000)
    librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0x76c07000)
    /lib/ld-linux-armhf.so.3 (0x54aac000)
    pi@raspberrypi:~/qmlcpp/bin $ ./qmlcpp
    ./qmlcpp: error while loading shared libraries: libQt5Quick.so.5: cannot open shared object file: No such file or directory
    pi@raspberrypi:~/qmlcpp/bin $"

    why couldn't it found the libraries?

  17. I'm on ubuntu. I need to know where you point the gcc-linaro-arm-linux-gnueabihf-raspbian during qmake build so I can put the tools there.

  18. You have any idea then, how I can use Qt 5.6 with QtMultimedia for UI application in RasPI? I have no clue how I can do this. I tried what the offical Qt guides say but with no luck at all!

  19. 1) I don't have the image anymore. You have the md5 of the archive. If you have the image you can confirm it is not corrupted by using it. Or maybe someone else can answer.
    2) Qt is built without X11 support. GUI is rendered without it to guarantee much better performance. If you are targeting X11 this image is completely wrong for you.

    You can do whatever you want with the image. I tried to use dropbox but they suspended my account in one or two days because I reached the limit of bytes downloaded. I'm serving many gigabytes of data, this is the best way I found.

  20. Found the Qt tools compiled 🙂

    I copied "gcc-linaro-arm-linux-gnueabihf-raspbian" to /opt/rpi but qmake can't find it:

    ze@ze-MacBookPro:~$ cd qmlcpp/
    ze@ze-MacBookPro:~/qmlcpp$ ~/raspi2/qt5/bin/qmake -r
    Could not find qmake configuration file devices/linux-rasp-pi2-g++.

  21. Thank you my friend for your (+fast) answer!

    1) Decompress (maybe) "normally" on my i5 laptop with a lubuntu VM in 2-3 hours. Please post the MD5 or sha1 of the img if it's possible.

    2-3) I guess I can install the X windowing system again(maybe tightvnc install it by default). Is the Qt configured though to not work with GUI enviroments?

    P.S.: If you want, I can help by uploading the image somewhere more accecible to everyone – like dropbox. Also I can wrap the "img" into a "tar.bzip" to be more friendly for everyone.

  22. 1) Possible, depends on the hardware. Use a current hardware to decompress.
    2) Yes, you can play mp3s and (probably) wave formats.
    3) This image does not include X11 at all. It is designed with the purpose of removing that software.

  23. Hello my friend. I have some questions if you can answer me please:

    1) I'm decompressing this thing and it takes more than 8hours.(for the time being failed once) Is this normal?(I use lrzuntar on a low power laptop with lubuntu)

    2) This image will allow me to make programs using the QtMultimedia library(I want to make use of mp3s or wavs)? I want to make programs with UI accecible via VNC.

    3) (this is a little bit hard to know) I tried installing on my RasPi3 Qt.(Qt5.3.x installed from official repos) For some reason(xkb as I searched) the keymap layout, only for the Qt, was totaly wrong.(e.x. I press "d" key, "f" key comes up) I use tightvnc server to access my Raspi3.

  24. Hello Luca,
    We are trying to cross compile simple applications using QtWebEngine with your image. We have difficulties installing a proper cross-compiler environment with Qt. We had already retrieved the raspberry pi tools github repo with the linaro compiler and successfully compiled some apps, but how we can retrieve your image libraries for cross-compiling ? We want to compile an app using the QtWebEngine. Many thanks

  25. No, the image contains all you need to build and run Qt apps. It has a build of Qt and the x86_64 tools needed to crossbuild. No need to build Qt again.

  26. To be able to cross compile I need to compile Qt again using the sysroot of this image, right? Can't I use a previous compiled Qt for an older image?

  27. I have the same problem, also using the sysroot from Lucas image, so all deps should be resolved…

    Did you manage to compile qtwebengine somehow?
    please let me know if so!

  28. 720p and 1080p work but 480p doesn't :s there is any setting to make 480p work? BTW using 480p should be the reason why I havent been able to play the video on the RPi1 :s

  29. Hello Luca!
    Unfortunately the image seems to be no longer available under the link you provide above.
    Could you re-upload the image or make the link working again?
    Thank you for your work!

  30. I have configured qt to build in 'eglfs mode' (the same configuration as yours). Everything else cross-compiles for me in this mode for raspberry (headless jessie). That's why I was wondering if qtwebengine required something else when I saw you have managed to build it in your image 😉

  31. Hi Luca!

    I have found your blogspot when I was trying to cross-compile qt5.6 for Rasperry Pi 2.
    It's great inspiration for me! Thanks to that I have managed to cross-compile qt library on Ubuntu myself 🙂

    However, I am stuck with qtwebengine 🙁 I saw you have succeeded building it for your POT. Would you share some tips what is required to cross-compile it?
    Despite installing and syncing with sysroot all dependant libraries, I still recieve following errors:

    Running configure tests
    Checking for khr… yes
    Checking for libcap… yes
    Checking for snappy… yes
    Checking for srtp… yes
    System zlib or minizip not found. Using Chromium's copies.
    System libwebp or libwebpdemux not found. Using Chromium's copies.
    System libxml2 or libxslt not found. Using Chromium's copies.
    System libevent not found. Using Chromium's copy.
    System jsoncpp not found. Using Chromium's copy.
    System opus not found. Using Chromium's copy.
    System vpx >= 1.4 not found. Using Chromium's copy.
    Certificate handling………….. Using bundled BoringSSL
    ICU…………………………. Using internal copy (Default, force system ICU with WEBENGINE_CONFIG+=use_system_icu)
    FFMPEG………………………. Using internal copy (Default, force system FFMPEG with WEBENGINE_CONFIG+=use_system_ffmpeg)
    Proprietary codecs (H264, MP3)…. Not enabled (Default, enable with WEBENGINE_CONFIG+=use_proprietary_codecs)

    Unmet dependency: xcomposite
    Unmet dependency: xcursor
    Unmet dependency: xi
    Unmet dependency: xrandr
    Unmet dependency: xscrnsaver
    Unmet dependency: xtst
    QtWebEngine will not be built.
    make: Nothing to be done for 'first'.
    make: Nothing to be done for 'install'.


  32. Hello, yes Jessie image should provide acceleration for jpeg decoding. I implemented that in the past in Qt. But that implementation is not included in current POT. The QML Image element will use the regular jpeg library, probably turbo jpeg. There is work to be done to use acceleration: start from my article, download the sources and try to start from there.

  33. Hi Luca,

    I apologize for my stupid questions before. I just had to read older posts better and it worked well. Videos work very well now so thanks again for that.

    The application I am developing can work in two modes. First one is playing videos and it works perfect now. In second mode application receives base64 jpeg images over UDP socket and I show them in UI with image QML element. I was wondering does this jessie lite image provide some better way that loads images faster by using hardware acceleration. Image QML elements load my jpegs rather slow, so I had to implement some kind of circular buffer to avoid blinking, and I still get about half a second delay which it takes to load image after receiving it.

    I hope my question was clear. In one of your first posts(http://thebugfreeblog.blogspot.rs/2012/12/decoding-and-rendering-compressed.html) you wrote about rendering images, but I didn't find a post about rendering images in QML.

    Thanks in advance.

  34. There are a couple of procedures in this blog. Look older articles and you'll find them. Nothing changed since then. The procedure still is similar.

  35. Hello, we're currently trying to cross-compile Qt Quick and other components with some difficulties. Qt Base compiled successfully according the wiki's instructions (https://wiki.qt.io/RaspberryPi2EGLFS), but we can't manage to cross-compile other modules, including Qt Quick. Did you follow a particular tutorial ? Did you write any instructions when you successfully managed to compile Qt Quick ? Thanks in advance.

  36. Ok thank you for your answer. We'll manage to compile the QT environment by our own. Do you have any tutorial to follow ? (excepting the QT wiki's one)

  37. Hello,
    Many thanks first for you raspbian image, it allowed us to make some tests with qml apps.
    Since we want to compile some QT C++ code onto the Raspberry pi itself, we want to know if you have a qmake compiled or functionnal on the rapsberry pi. Your binary folder on the Rpi contains qml for ARM, but qmake for x86. We are just looking for a proper environment for testing purposes, and your image with pre-build QT was really helpful for that, and would be perfect with a functionnal compiling environment.

  38. Hello Luca,

    Thanks for this great project. It is just what I was looking for. I have a question. This image is fine, by the way I added GUI, because I need to look at the logs my application makes. I followed your post http://thebugfreeblog.blogspot.rs/2013/03/raspberry-pi-wheezy-image-with-qt-and.html for copying everything needed back to my PC. The problem now is I don't know what to put in my /usr/local/ as qmake. I saw that there is a qmake included on the image, so I copied the entire Qt-rasp2-5.6.7-rc1 folder back to my PC. The problem is that it doesn't have a Mkspec for qmake I copied from RPi. What should I do about that Mkspec and how can I solve this problem?

    Thanks in advance.

  39. Hi,
    thank you for your work!
    I used your image and it seems to work fine. However, I get this line when starting a qml file:

    qt.qpa.input: X-less xkbcommon not available, not performing key mapping

    and keyboard input is not working. Do I have to install any runtime libraries? …I installed libxkbcomon0 but it didn't help.
    Thank you!

Leave a Reply

Your email address will not be published. Required fields are marked *