# 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

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.

## Samples

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. Anonymous says:

What is the decryption key for the image file?

2. Anonymous says:

It worked, thanks.

3. 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.

4. Anonymous says:

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.

5. Have a look at POCPlayer. Is it rendering 24 bits properly?

6. Anonymous says:

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?

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.

7. Anonymous says:

Thanks for info.

8. 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.

9. Anonymous says:

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?

10. Anonymous says:

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.

11. Anonymous says:

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.

12. Anonymous says:

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.

13. 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.

14. Anonymous says:

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?

15. No. Because that files will look into other files that doesn't match what they expected.

BTW did you look at QtAV?

16. 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.

17. 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.

18. 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 🙂

19. 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?

20. copied qtdeps to sysroot, done 🙂

21. 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?

22. Wherever you prefer. The lib directory obviously must be in the library search path.

23. "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? 24. Where should I copy qtdeps? thank you 25. copy Qt-rasp2-5.6.0-rc1 to /opt/rpi/sysroot/usr/local sovled the problem: "ze@ze-MacBookPro:/opt/rpi$ sudo rsync -avz pi@192.168.1.70:/usr/local/Qt-rasp2-5.6.0-rc1 ./sysroot/usr/local"

26. 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.

27. 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!

28. You need a crossbuilding guide probably. Also I never used mac os for this, can't tell you if and how it works.

29. 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.

30. 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++.

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.

32. This comment has been removed by the author.

33. 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.

34. 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.

35. You need to cerate the sysroot. Read a cross-build manual or a Qt tutorial to do that.

36. Laurent says:

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

37. 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.

38. 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?

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!

40. I tested another 480p and it seems to work. You can however open an issue in github.

41. 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

42. Is that the only video not being played? Is the 1080p version ok?

43. André says:

Hello Luca!
Unfortunately the image seems to be no longer available under the link you provide above.

44. Anonymous says:

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 😉

45. It seems you are missing deps. But I didn't build with X11 support.

46. Anonymous says:

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
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'.

Thanks!

47. Thanks I will try that when time allows.

48. 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.

49. 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.

50. 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.

51. Anonymous says:

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.

52. Anonymous says:

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)

53. I'm sorry, I only crossbuild, so I don't have a qmake for ARM.

54. Anonymous says:

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.
Regards.

55. This comment has been removed by the author.

56. This comment has been removed by the author.

57. You need to set the system to crossbuild properly. You should follow a crossbuild guide.

58. 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?

59. modjo says:

Ok thanks. Otherwise your build work fine on raspberry pi 3 !

60. Anonymous says:

Thank you!
Would you prefer if I created a github issue?

61. Actually I didn't test the keyboard, only the mouse. I will have a look.

62. Anonymous says:

Hi,