Installing POT on a Running Device and Test
- Uncompress the archive and copy the Qt build into your Pi in /usr/local. Do not rename it as rpath is set.
- If provided, copy qtdeps into your Pi, wherever you want.
- Copy piomxtextures_pocplayer into your Pi, wherever you want. You'll need this only if you want to test it. Not needed when you'll run your application.
- Copy all the samples in the samples directory if you want to test those.
- Assign more RAM to the GPU (do this using the Pi config tool or by setting gpu_mem in /boot/config.txt to 256MB).
- Into your Pi add the qtdeps/lib path to the dynamic linker search path. You can do this by setting the LD_LIBRARY_PATH to that directory or by adding it to the /etc/ld.so.conf.d/pot.conf and running ldconfig.
- Now all the deps should be ok and you can try to run a sample app. Let's start from the C++ POCPlayer:
- ./piomxtextures_pocplayer /some/abs/path
- You can also try using qmlscene. Try for instance the simple video_position.qml:
- /usr/local/Qt-rasp2-5.5.0/bin/qmlscene video_simple.qml file:///.../big_buck_bunny_1080p_h264.mov
You can also change the paths if you want, but you'll have to see if everything keeps working or adapt the procedure for that.
Configuring
There are a few features that are not available in Qt API (at least not that I know). You can control these features with env variables before running your app (changing those dynamically is not possible, but it is simple to implement if you want to contribute). These are the variables:
- POT_HALF_FRAMERATE_MODE: if set to 1 the number of frames sent to the renderer are halved. This is needed mostly when using deinterlacing.
- POT_TEXTURE_COUNT: number of texture to be used when buffering. Default is 4.
- POT_DEINTERLACE_MODE: the type of deinterlacing; 0 means off, 1 means auto and 2 means on.
- POT_DEINTERLACE_QPU: 0 or 1; indicates whether to use the QPU for deinterlacing.
- AUDIO_OUT (I'll soon add POT_AUDIO_OUT; AUDIO out will probably remain for backward compatibility): you can use this to set the audio output to use:
- hdmi means output to HDMI;
- local means output to headphones;
- both means... well both the above;
- default is HDMI.
Building Your Own App
You can use the Qt build to build your own app. To do this place your sysroot into /opt/rpi/sysroot and the Raspbian toolchain in /opt/rpi/gcc-linaro-arm-linux-gnueabihf-raspbian on your host and use the qmake command in /opt/rpi/sysroot/usr/local/Qt-rasp(2)-5.5.0/bin to build your application.
[More details to come for this]
Hi Luca, I have a question ?
ReplyDeleteThe above steps are to make applications using cross-compile ???
Thanks for your fantastic work.
Yes, this is the setup for crossbuilding.
DeleteHello Luca,
ReplyDeleteIs there a way how to build my own app on 32bit system ? I think you binary files (qmake) are 64bit.
Yes you can rebuild your own qmake.
DeleteI have followed the procedure and everything seems fine but when I try to play video using pocplayer it return only black screen.
ReplyDeleteAnd one more question is can this player run with xcb platform?If not can I build to work it with xcb??
Please post the logs you get running pocplayer.
DeleteI'm sorry, I never tried on xcb.
I forgot to say that now the player won't start the video immediately. So use the mouse or the keyboard to make the bar appear and play the video to make it start.
DeleteHi,
ReplyDeletei just stumbled about your really promising posts. But i still have a few general questions.
I would like to use your binaries to run videos hw accelerated on the rpi using qtmultimedia.
1) That's what your binaries are meant for, right?
2) I will cross compile qt5.5.1 from my linux host pc (actually upgrading from v5.3). Do i need to change anything in the cross-compile-process, e.g. "configure" options?
3) I plan to enable gstreamer1.0 support, just in case. Does it interfer with your binaries, or should i rather not enable it?
Thanks a lot for your help,
Ben
1) yes.
Delete2) change from what? It depends from what you start. The builds however include most Qt modules already.
3) No, and the builds also contain it. Although performance are bad for some reason. However you need to hide that when running your app or gstreamer takes precedence.
Ah ok, now i understand.I can use your binaries with my own raspbian wheezy image. Cool.
DeleteSo, then i have some follow up questions:
10) >If provided, copy qtdeps into your Pi, wherever you want.
What are qtdeps? Further dependencies for qt? Aren't they included in your binary?
11) >To do this place your sysroot into /opt/rpi/sysroot
Which sysroot do you mean? Is that included in your package?
12) >However you need to hide that when running your app or gstreamer takes precedence.
Ok, i am not going to compile qt any more, i will use your binaries. Do i still have to take care of that, when running my own apps? If yes, how?
13) I have qt5.3 on my RPI, do i have to remove it? How can i do that?
Thanks so much for providing this package, much easier than compiling it myself.
Ben
10) Qt deps not included in raspbian.
Delete11) No, it is the sysroot of your Pi.
12) No, it is already placed in another path.
13) Depends on your setup. Qt typically adds a rpath, so you may not need it. You can have multiple Qt installations.
10) ok, so i simpy use the qtdeps folder from your binary package?
ReplyDelete11) ok, i am not sure what exactly i have to do. The sysroot refers to a basic file system of the rpi, right?
So, i create a sysroot folder and copy a few folders from my rpi to that? Which ones? /lib, /usr/include, /usr/local
Or is there a program/command "create sysroot"?
thanks for your help
10) yes
ReplyDelete11) you should follow a regular crossbuild guide.
Hi Luca,
ReplyDeletei followed your instructions but get the following error when starting "./piomxtextures_pocplayer"
How can i find out, what i did wrong?
Thanks,
Ben
>This application failed to start because it could not find or load the Qt platform plugin "eglfs".
>Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, xcb.
>Reinstalling the application may fix this problem.
>Aborted
Are the libs in qtdeps in the dynamic linker search path?
DeleteI think so. Is there a way to check?
Delete1) That's the content of /etc/ld.so.conf.d/pot.conf:
/home/pi/piview/lib/qtdeps
2) Then i called: sudo ldconfig
Ben
ok, my fault. I added /qtdeps and not /qtdeps/lib.
DeleteNow it seems to start but the screen stays dark.
Any ideas?
Ben
pi@raspberrypi ~/piview/lib $ ./piomxtextures_pocplayer big_buck_bunny_1080p_h264.mov
Unable to query physical screen size, defaulting to 100 dpi.
To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).
defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.mediaplayer"
QDeclarativeAudio::itemChange
QMediaPlayer::onItemChanged
QDeclarativeAudio::itemChange
QMediaPlayer::onItemChanged
19:58:15.946 INFORMATION: Showing media: big_buck_bunny_1080p_h264.mov.
19:58:15.951 VERBOSE: Can't find extension for .
19:58:15.953 VERBOSE: Can't find extension for image/jp2.
19:58:15.955 VERBOSE: Can't find extension for image/vnd.microsoft.icon.
19:58:15.957 VERBOSE: Can't find extension for image/x-dds.
19:58:15.959 VERBOSE: Can't find extension for image/x-icns.
19:58:15.961 VERBOSE: Can't find extension for image/x-mng.
Yes my fault, I disables auto start but now no one can understand what is happening. Click with the mouse or the keyboard and click the play button on the bar that appears. You should see the mouse pointer.
Deleteah ok thanks.
DeleteI am working through ssh on the pi, so no mouse or keyboard attached.
I tried your second example with qmlscene, but get similar results:
1) qmlscene with "video_simple.qml" and a video -> screen stays black:
$ /usr/local/Qt-rasp-5.5.0/bin/qmlscene samples/video_simple.qml big_buck_bunny_1080p_h264.mov
Unable to query physical screen size, defaulting to 100 dpi.
To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).
file:///home/pi/piview/lib/big_buck_bunny_1080p_h264.mov:1 Expected token `numeric literal'
file:///home/pi/piview/lib/big_buck_bunny_1080p_h264.mov:1 Expected a qualified name id
2) qmlscene without any qml and video file will display a file open dialog, so qmlscene seems to work.
$ /usr/local/Qt-rasp-5.5.0/bin/qmlscene
Ben
Qml samples require uris not simple paths.
DeleteTo be clearer, something like:
Delete/usr/local/Qt-rasp-5.5.0/bin/qmlscene samples/video_simple.qml file:///home/pi/big_buck_bunny_1080p_h264.mov
This is to make samples as simple as possible.
The URI makes no difference here:
Delete/usr/local/Qt-rasp-5.5.0/bin/qmlscene /home/pi/piview/lib/samples/video_simple.qml file:///home/pi/piview/lib/samples/big_buck_bunny_1080p_h264.mov
=> this leads to:
>Unable to query physical screen size, defaulting to 100 dpi.
>To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).
>defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.mediaplayer"
>QDeclarativeAudio::itemChange
>QMediaPlayer::onItemChanged
>QDeclarativeAudio::itemChange
>QMediaPlayer::onItemChanged
Any ideas?
Is the "..no service found.." a hint?
Does it matter if the display is connected through hdmi or vga? I am using hdmi.
Ben
Did you follow step 6 properly?
DeleteAt least, i think so:
Delete*) That's the content of /etc/ld.so.conf.d/pot.conf:
/home/pi/piview/lib/qtdeps/lib
*) Then i called: sudo ldconfig
1) Do you think that's correct?
2) Do i miss some other libraries, that are not included in qtdeps?
You should know if you have all the dependencies or not. Use export QT_DEBUG_PLUGINS=1 to find out what is wrong.
DeleteTataaaah :-)
DeleteMy PI is playing movies..
Thanks for your help, i upgraded my packages and added some missing libraries.
Great work!!
BUT:
1) using qmlscene and video_simple.qml the bunny movies stops after a few seconds and then it is repeated again.(POT v.4.5.0 and qt5.5.0) -> any idea why?
2) Are there any options for POT (e.g. env. variabels) that i can set?
Ben
1) No, not without the logs. However POT 4.5.0 is pretty old. You've better use 5.0.0 or 5.1.0 at least.
Delete2) Not sure what you mean.
1) I upgraded to POT 5.0.0 (Pi1, wheezy), still the same. After a few seconds the movie starts again. I tried different sample videos, with h264 encoding.
DeleteCan i send you the console output somehow? pretty much to paste it into this blog, or should i?
2) In POT v5.1.0 you introduced the environment variable POT_HALF_FRAMERATE_MODE. Are there more except that one?
1) you can file an issue on github if you want. Or use pastebin.
Delete2) yes:
grep -R qgetenv *
piomxtextures_src/omx_staticconf.cpp: QByteArray ba = qgetenv("POT_HALF_FRAMERATE_MODE");
piomxtextures_src/omx_staticconf.cpp: QByteArray ba = qgetenv("POT_TEXTURE_COUNT");
piomxtextures_src/omx_staticconf.cpp: QByteArray ba = qgetenv("POT_DEINTERLACE_MODE");
piomxtextures_src/omx_staticconf.cpp: QByteArray ba = qgetenv("POT_DEINTERLACE_QPU");
piomxtextures_src/omx_mediaprocessor.cpp: QByteArray a = qgetenv("AUDIO_OUT");
I described those in an article, and the AUDIO_OUT in a github issue. More info in the sources.
I added more info to the article.
DeleteHi,
ReplyDeleteI am trying to setup my crosscompilation environment, but don't know which compiler to use.
My Host is: 64Bit Debian
POT Qmake v5.0.0 for jessy PI1, which is 64 Bit as well, i guess
I tried: /opt/rpi/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++
but qtcreator shows an error: .. no compiler can compile code for this qt version.
Thanks for your help,
Ben
Sorry, found it ...
ReplyDeleteI just had to download the 64 Bit version of the toolchain
Hello sir
ReplyDeleteCan i use the POT Builds with othe than Raspbian?
Currently I use arch linux arm
Thank you
I have no idea, sorry. I don't think so unless all the dependencies are compatible.
DeleteOf course I referred to the builds I provide. You can build on your own and I suppose it should work.
DeleteHello luca, thank for your sharing,
ReplyDeletei couldn't use your code to build my own apps on raspberry pi2, so i managed to replace my libqt5multimedia.so with yours, it worked after some struggling, but i have the same poor performance, then i replaced the gstmediaplayer.so plugin in mediaservice folder but same poor performance also. please do you have an idea have it works
Not sure why you want to replace libqt5multimedia with yours. What I provide is sufficient to build and run your apps just like mine. You have the qmake binary and all the libs.
Deletethanks Luca, the problem is that i have installed QT5 using raspbian jessie repository because i couldn't build my own QT5. However I tried to set qtcreator for cross compiling using your build, but seems that your qmake is 64 bit exe and i have ubuntu 32 bit system.
Deleteplease can you help how i could set a cross compiling environement using your build?
thank you very much for your amazing sharing
Follow Qt documentation for the setup. Use a 64bit system if you want to use this implementation. I can't speak for the repo Qt5, I never used that.
DeleteHi Luca,
ReplyDeleteI'm trying to use those builds on my rPi 2 (and 3).
I followed all the instructions for the installation even in the comments but when I try to start piomxtextures_pocplayer or even a sample .qml I always get "Illegal instruction" error.
I tried different POT builds but without any result...
Thank you in advice for an answer
What OS are you using on your pi's?
DeleteHi Luca,
ReplyDeleteI'm trying to install and run one of your latest versions (5.4.0) on a RPi3 with a clean install of Raspbian jessie lite. Unfortunately I keep running into dependancy issues; libfontconfig and libxslt for example. I might be able to install them through apt-get, but from what I read all dependancies should be included.
Thanks!
Only dependencies not available in raspbian repos are included. Those available in regular raspbian repos are not included: you can simply install using apt-get.
DeleteHello Luca,
ReplyDelete"AUDIO_OUT (I'll soon add POT_AUDIO_OUT; AUDIO out will probably remain for backward compatibility): you can use this to set the audio output to use:
hdmi means output to HDMI;
local means output to headphones;
both means... well both the above;
default is HDMI."
it it works on POT version 5.7.0 ? (built by myself)
Thanks.