Friday, July 17, 2015

Binaries for Hardware Accelerated Qt 5.5.0 Multimedia Backend on Raspberry Pi 1 and 2 (4.5.0 & 4.5.1)

These are two packages containing binaries for PiOmxTextures (POT) for Raspberry Pi 1 and 2 running Raspbian.

PiOmxTextures 4.5.0

The first package contains POT 4.5.0 for Raspberry Pi (1):
  • Improved sample code and POCPlayer.
  • Added POCPlayer tests running multiple MediaPlayer instances.
  • Improved rendering performance.
  • Added support for multiple players (this seems to still show issues on Pi1, a little better on Pi2).
  • Fixed volume range to avoid distortion.
  • POCPlayer now shows how to render 24 bit color depth.
  • Other fixes.
  • Moved to Qt 5.5.0 (including libinput support).*

PiOmxTextures 4.5.1 (for armv7)

The second package contains POT 4.5.1 for Raspberry Pi 2 and adds to the above:
  • Improved buffer provider code.
  • ffmpeg 2.7.1 (old was 2.6) compiled with proper CPU optimisations.
  • Added compiler optimisations to leverage the new armv7 processor and NEON support for POT, Qt 5.5.0** and ffmpeg builds.

The first package ran long tests and is supposed to guarantee more stability. Tests showed uptime of POCPlayer (sample media player included in the sources) way over a month uninterruptedly. The second package instead did not run any long test. Please let me know if you notice anything wrong.

Both packages contain:
  • piomxtextures_pocplayer: sample player which includes tests for animations, loops and commands. Have a look at the sources to understand how it works.
  • Qt-rasp(2)-5.5.0.tar: contains the build of Qt 5.5.0 with proper CPU optimisations. This also includes the host tools like qmake. rpath is set to /usr/local/Qt-rasp(2)-5.5.0 so you're probably better install it there.
  • qtdeps.tar: this contains libevdev and libinput which are not available in Raspbian repos. Qt will need these in the runtime lib path to work.
Please, let me know if you encounter issues with the packages or if anything goes wrong.
Bye! ;-)

NOTE: This is not available in github yet. But it will shortly.

*Qt Configuration for Raspberry Pi 1


   Configure summary

Building on:   linux-g++ (x86_64, CPU features: mmx sse sse2)
Building for:  devices/linux-rasp-pi-g++ (arm, CPU features: none detected)
Platform notes:

            - Also available for Linux: linux-kcc linux-icc linux-cxx
        
qmake vars .......... styles += mac fusion windows QT_CFLAGS_GLIB = -pthread -I/opt/rpi/sysroot/usr/include/glib-2.0 -I/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf/glib-2.0/include  QT_LIBS_GLIB = -L/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf -lgthread-2.0 -pthread -lrt -lglib-2.0  QT_CFLAGS_QGTKSTYLE = -pthread -I/opt/rpi/sysroot/usr/include/gtk-2.0 -I/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf/gtk-2.0/include -I/opt/rpi/sysroot/usr/include/gio-unix-2.0/ -I/opt/rpi/sysroot/usr/include/cairo -I/opt/rpi/sysroot/usr/include/pango-1.0 -I/opt/rpi/sysroot/usr/include/cairo -I/opt/rpi/sysroot/usr/include/pixman-1 -I/opt/rpi/sysroot/usr/include/libpng12 -I/opt/rpi/sysroot/usr/include/gdk-pixbuf-2.0 -I/opt/rpi/sysroot/usr/include/libpng12 -I/opt/rpi/sysroot/usr/include/pango-1.0 -I/opt/rpi/sysroot/usr/include/harfbuzz -I/opt/rpi/sysroot/usr/include/pango-1.0 -I/opt/rpi/sysroot/usr/include/freetype2 -I/opt/rpi/sysroot/usr/include/atk-1.0 -I/opt/rpi/sysroot/usr/include/glib-2.0 -I/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf/glib-2.0/include  QT_LIBS_QGTKSTYLE = -L/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf -lgobject-2.0 -lglib-2.0  QT_CFLAGS_QGTK2 = -pthread -I/opt/rpi/sysroot/usr/include/gtk-2.0 -I/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf/gtk-2.0/include -I/opt/rpi/sysroot/usr/include/gio-unix-2.0/ -I/opt/rpi/sysroot/usr/include/cairo -I/opt/rpi/sysroot/usr/include/pango-1.0 -I/opt/rpi/sysroot/usr/include/cairo -I/opt/rpi/sysroot/usr/include/pixman-1 -I/opt/rpi/sysroot/usr/include/libpng12 -I/opt/rpi/sysroot/usr/include/gdk-pixbuf-2.0 -I/opt/rpi/sysroot/usr/include/libpng12 -I/opt/rpi/sysroot/usr/include/pango-1.0 -I/opt/rpi/sysroot/usr/include/harfbuzz -I/opt/rpi/sysroot/usr/include/pango-1.0 -I/opt/rpi/sysroot/usr/include/freetype2 -I/opt/rpi/sysroot/usr/include/atk-1.0 -I/opt/rpi/sysroot/usr/include/glib-2.0 -I/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf/glib-2.0/include  QT_LIBS_QGTK2 = -L/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lfreetype -lfontconfig  QT_CFLAGS_PULSEAUDIO = -D_REENTRANT -I/opt/rpi/sysroot/usr/include/glib-2.0 -I/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf/glib-2.0/include  QT_LIBS_PULSEAUDIO = -L/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf -lpulse-mainloop-glib -lpulse -lglib-2.0  QMAKE_CFLAGS_FONTCONFIG = -I/opt/rpi/sysroot/usr/include/freetype2  QMAKE_LIBS_FONTCONFIG = -L/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf -lfontconfig -lfreetype  QMAKE_INCDIR_LIBUDEV =  QMAKE_LIBS_LIBUDEV = -ludev  QMAKE_INCDIR_XKBCOMMON_EVDEV =  QMAKE_LIBS_XKBCOMMON_EVDEV = -L/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf -lxkbcommon  QMAKE_LIBINPUT_VERSION_MAJOR = 0 QMAKE_LIBINPUT_VERSION_MINOR = 19 QMAKE_INCDIR_LIBINPUT = /opt/rpi/sysroot/usr/local/include  QMAKE_LIBS_LIBINPUT = -L/opt/rpi/sysroot/usr/local/lib -linput  QMAKE_LIBXI_VERSION_MAJOR = 1 QMAKE_LIBXI_VERSION_MINOR = 6 QMAKE_LIBXI_VERSION_PATCH = 1 QMAKE_X11_PREFIX = /usr DEFINES += QT_NO_XKB QMAKE_XKB_CONFIG_ROOT = /usr/share/X11/xkb QMAKE_CFLAGS_XCB =  QMAKE_LIBS_XCB = -L/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf -lxcb-sync -lxcb-xfixes -lxcb-render -lxcb-randr -lxcb-image -lxcb-shm -lxcb-keysyms -lxcb-icccm -lxcb-shape -lxcb  sql-drivers =  sql-plugins =  odbc sqlite sqlite2 tds qmake switches ......... 

Build options:
  Configuration .......... accessibility accessibility-atspi-bridge alsa audio-backend c++11 clock-gettime clock-monotonic compile_examples concurrent cross_compile cups dbus egl eglfs eglfs_brcm enable_new_dtags evdev eventfd fontconfig full-config getaddrinfo getifaddrs glib gstreamer-1.0 gtk2 gtkstyle harfbuzz iconv icu inotify ipv6ifname large-config largefile libinput libproxy libudev linuxfb medium-config minimal-config mremap mtdev nis opengl opengles2 openssl pcre png posix_fallocate pulseaudio qpa qpa reduce_exports release rpath shared small-config system-freetype system-jpeg system-png system-zlib tslib use_gold_linker xcb xcb-glx xcb-plugin xcb-render xcb-sm xcb-xlib xinput2 xkbcommon-qt xlib xrender 
  Build parts ............  libs examples
  Mode ................... release
  Using sanitizer(s)...... none
  Using C++11 ............ yes
  Using gold linker....... yes
  Using new DTAGS ........ yes
  Using PCH .............. no
  Target compiler supports:
    Neon ................. no

Qt modules and options:
  Qt D-Bus ............... yes (loading dbus-1 at runtime)
  Qt Concurrent .......... yes
  Qt GUI ................. yes
  Qt Widgets ............. yes
  Large File ............. yes
  QML debugging .......... yes
  Use system proxies ..... no

Support enabled for:
  Accessibility .......... yes
  ALSA ................... yes
  CUPS ................... yes
  Evdev .................. yes
  FontConfig ............. yes
  FreeType ............... yes (system library)
  Glib ................... yes
  GStreamer .............. yes (1.0)
  GTK theme .............. yes
  HarfBuzz ............... yes (bundled copy)
  Iconv .................. yes
  ICU .................... yes
  Image formats: 
    GIF .................. yes (plugin, using bundled copy)
    JPEG ................. yes (plugin, using system library)
    PNG .................. yes (in QtGui, using system library)
  journald ............... no
  libinput................ yes
  mtdev .................. yes (system library)
  Networking: 
    getaddrinfo .......... yes
    getifaddrs ........... yes
    IPv6 ifname .......... yes
    libproxy.............. yes
    OpenSSL .............. yes (loading libraries at run-time)
  NIS .................... yes
  OpenGL / OpenVG: 
    EGL .................. yes
    OpenGL ............... yes (OpenGL ES 2.0+)
    OpenVG ............... no
  PCRE ................... yes (bundled copy)
  pkg-config ............. yes 
  PulseAudio ............. yes
  QPA backends: 
    DirectFB ............. no
    EGLFS ................ yes
      EGLFS i.MX6....... . no
      EGLFS KMS .......... no
      EGLFS Mali ......... no
      EGLFS Raspberry Pi . yes
      EGLFS X11 .......... no
    LinuxFB .............. yes
    XCB .................. yes (system library)
      EGL on X ........... no
      GLX ................ yes
      MIT-SHM ............ yes
      Xcb-Xlib ........... yes
      Xcursor ............ yes (loaded at runtime)
      Xfixes ............. yes (loaded at runtime)
      Xi ................. no
      Xi2 ................ yes
      Xinerama ........... yes (loaded at runtime)
      Xrandr ............. yes (loaded at runtime)
      Xrender ............ yes
      XKB ................ no
      XShape ............. yes
      XSync .............. yes
      XVideo ............. yes
  Session management ..... yes
  SQL drivers: 
    DB2 .................. no
    InterBase ............ no
    MySQL ................ no
    OCI .................. no
    ODBC ................. yes (plugin)
    PostgreSQL ........... no
    SQLite 2 ............. yes (plugin)
    SQLite ............... yes (plugin, using bundled copy)
    TDS .................. yes (plugin)
  tslib .................. yes
  udev ................... yes
  xkbcommon-x11........... yes (bundled copy, XKB config root: /usr/share/X11/xkb)
  xkbcommon-evdev......... no
  zlib ................... yes (system library)

**Qt Configuration for Raspberry Pi 2

   Configure summary

Building on:   linux-g++ (x86_64, CPU features: mmx sse sse2)
Building for:  devices/linux-rasp-pi2-g++ (arm, CPU features: neon)
Platform notes:

            - Also available for Linux: linux-kcc linux-icc linux-cxx
        
qmake vars .......... styles += mac fusion windows QT_CFLAGS_GLIB = -pthread -I/opt/rpi/sysroot/usr/include/glib-2.0 -I/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf/glib-2.0/include  QT_LIBS_GLIB = -L/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf -lgthread-2.0 -pthread -lrt -lglib-2.0  QT_CFLAGS_PULSEAUDIO = -D_REENTRANT -I/opt/rpi/sysroot/usr/include/glib-2.0 -I/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf/glib-2.0/include  QT_LIBS_PULSEAUDIO = -L/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf -lpulse-mainloop-glib -lpulse -lglib-2.0  QMAKE_CFLAGS_FONTCONFIG = -I/opt/rpi/sysroot/usr/include/freetype2  QMAKE_LIBS_FONTCONFIG = -L/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf -lfontconfig -lfreetype  QMAKE_INCDIR_LIBUDEV =  QMAKE_LIBS_LIBUDEV = -ludev  QMAKE_LIBINPUT_VERSION_MAJOR = 0 QMAKE_LIBINPUT_VERSION_MINOR = 19 QMAKE_INCDIR_LIBINPUT = /opt/rpi/sysroot/usr/local/include  QMAKE_LIBS_LIBINPUT = -L/opt/rpi/sysroot/usr/local/lib -linput  QMAKE_LIBXI_VERSION_MAJOR = 1 QMAKE_LIBXI_VERSION_MINOR = 6 QMAKE_LIBXI_VERSION_PATCH = 1 QMAKE_X11_PREFIX = /usr DEFINES += QT_NO_XKB QMAKE_XKB_CONFIG_ROOT = /usr/share/X11/xkb QMAKE_CFLAGS_XCB =  QMAKE_LIBS_XCB = -L/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf -lxcb-sync -lxcb-xfixes -lxcb-render -lxcb-randr -lxcb-image -lxcb-shm -lxcb-keysyms -lxcb-icccm -lxcb-shape -lxcb  sql-drivers =  sql-plugins =  odbc sqlite sqlite2 tds qmake switches ......... 

Build options:
  Configuration .......... accessibility accessibility-atspi-bridge alsa audio-backend c++11 clock-gettime clock-monotonic compile_examples concurrent cross_compile cups dbus egl eglfs eglfs_brcm enable_new_dtags evdev eventfd fontconfig full-config getaddrinfo getifaddrs glib gstreamer-1.0 harfbuzz iconv icu inotify ipv6ifname large-config largefile libinput libproxy libudev linuxfb medium-config minimal-config mremap mtdev neon nis opengl opengles2 openssl pcre png posix_fallocate pulseaudio qpa qpa reduce_exports release rpath shared small-config system-freetype system-jpeg system-png system-zlib tslib use_gold_linker xcb xcb-glx xcb-plugin xcb-render xcb-xlib xinput2 xkbcommon-qt xlib xrender 
  Build parts ............  libs examples
  Mode ................... release
  Using sanitizer(s)...... none
  Using C++11 ............ yes
  Using gold linker....... yes
  Using new DTAGS ........ yes
  Using PCH .............. no
  Target compiler supports:
    Neon ................. yes

Qt modules and options:
  Qt D-Bus ............... yes (loading dbus-1 at runtime)
  Qt Concurrent .......... yes
  Qt GUI ................. yes
  Qt Widgets ............. yes
  Large File ............. yes
  QML debugging .......... yes
  Use system proxies ..... no

Support enabled for:
  Accessibility .......... yes
  ALSA ................... yes
  CUPS ................... yes
  Evdev .................. yes
  FontConfig ............. yes
  FreeType ............... yes (system library)
  Glib ................... yes
  GStreamer .............. yes (1.0)
  GTK theme .............. no
  HarfBuzz ............... yes (bundled copy)
  Iconv .................. yes
  ICU .................... yes
  Image formats: 
    GIF .................. yes (plugin, using bundled copy)
    JPEG ................. yes (plugin, using system library)
    PNG .................. yes (in QtGui, using system library)
  journald ............... no
  libinput................ yes
  mtdev .................. yes (system library)
  Networking: 
    getaddrinfo .......... yes
    getifaddrs ........... yes
    IPv6 ifname .......... yes
    libproxy.............. yes
    OpenSSL .............. yes (loading libraries at run-time)
  NIS .................... yes
  OpenGL / OpenVG: 
    EGL .................. yes
    OpenGL ............... yes (OpenGL ES 2.0+)
    OpenVG ............... no
  PCRE ................... yes (bundled copy)
  pkg-config ............. yes 
  PulseAudio ............. yes
  QPA backends: 
    DirectFB ............. no
    EGLFS ................ yes
      EGLFS i.MX6....... . no
      EGLFS KMS .......... no
      EGLFS Mali ......... no
      EGLFS Raspberry Pi . yes
      EGLFS X11 .......... no
    LinuxFB .............. yes
    XCB .................. yes (system library)
      EGL on X ........... no
      GLX ................ yes
      MIT-SHM ............ yes
      Xcb-Xlib ........... yes
      Xcursor ............ yes (loaded at runtime)
      Xfixes ............. yes (loaded at runtime)
      Xi ................. no
      Xi2 ................ yes
      Xinerama ........... yes (loaded at runtime)
      Xrandr ............. yes (loaded at runtime)
      Xrender ............ yes
      XKB ................ no
      XShape ............. yes
      XSync .............. yes
      XVideo ............. yes
  Session management ..... yes
  SQL drivers: 
    DB2 .................. no
    InterBase ............ no
    MySQL ................ no
    OCI .................. no
    ODBC ................. yes (plugin)
    PostgreSQL ........... no
    SQLite 2 ............. yes (plugin)
    SQLite ............... yes (plugin, using bundled copy)
    TDS .................. yes (plugin)
  tslib .................. yes
  udev ................... yes
  xkbcommon-x11........... yes (bundled copy, XKB config root: /usr/share/X11/xkb)
  xkbcommon-evdev......... no
  zlib ................... yes (system library)

94 comments:

  1. Hi! I put the Qt-rasp(2)-5.5.0 to /usr/local/Qt-rasp(2)-5.5.0, and configured the Qt Creator according to this article https://wiki.qt.io/RaspberryPi_Beginners_Guide (Tool Chain, Qt version (/opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.0/bin/bin/qmake), kits) and i'm having some errors:
    - Qt version not properly installed - at the Qt Versions section
    - Project ERROR: CROSS_COMPILE needs to be set via -device-option CROSS_COMPILE=
    Could not read qmake configuration file /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.0/mkspecs/devices/linux-rasp-pi2-g++/qmake.conf. - at the Kits section

    The qmake.conf exists in the location mentioned above...

    ReplyDelete
    Replies
    1. This path seems wrong: /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.0/bin/bin/qmake.

      Delete
  2. Can I set up a Qt Creator on the raspberryPi with your builded binaries?

    ReplyDelete
    Replies
    1. I don't know but I do not think so. qmake is for arm.

      Delete
    2. Sorry, I meant the opposite. qmake was not built for arm.

      Delete
  3. Hi Luca,

    thanks a lot for this 5.5 build!
    I managed to create a working kit configuration, but there's a problem with my Camera in Qml:

    defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.camera"
    qml: Camera Error: The camera service is missing

    - libgstreamer1.0-dev is installed - do I have to remove gstreamer libs?
    - copying plugins/mediaservice to binary directory does not change anything

    Would be very glad if you had a clue.

    Best regards!
    Florian

    ReplyDelete
    Replies
    1. Might be of interest: I copied the binaries from plugins/mediaservice/gstreamer one level up. The camera does work now
      But when I do some work on the main thread (calling an external program), the camera gets stuck with:

      CameraBin error: "Internal data flow error."

      With the 5.4.1 stack I got messages like:
      - virtual bool QSGVideoItemSurface::present(const QVideoFrame&) I'm getting bad frames here...
      - Rendering video frame to deleted surface, skip the frame
      but the camera never got stuck.

      Delete
    2. Hello, yes, if you need the gstreamer plugins you can find those in that directory. I had to place it there to avoid the loading procedure to select the gstreamer video plugin instead of the OpenMAX one.
      For the rest I'm sorry, I didn't test anything related to the camera. This build of Qt 5.5.0 is now using gstreamer 1.0 while 5.4.1 was probably still using gstreamer 0.10. Try with another 5.5.0 build of Qt and see if it works there. Not sure if my patch broke something related to the camera, it seems unlikely though.

      Delete
    3. Hi Flosen and Luca,
      I could run the compiled player on my Raspberry Pi 2 without any problem and very good performance, however I can't use the provided Qt 5.5.0 to build my own apps.
      Could you explain how you did manage to create a working Qt Kit within Qt Creator?
      Whatever Qt Creator version I'm using, creating a kit by choosing Qt-rasp2-5.5.0/bin/qmake (or Qt-rasp2-5.5.0/bin/bin/qmake) always results by a "Qt version is not installed properly installed, please run make install".
      Any idea?

      Delete
    4. Sorry, no idea. You may try asking Qt guys. Maybe they can help, I do not know.
      Maybe something related to paths? Where did you place your sysroot? I commonly use /opt/rpi/sysroot. Maybe for some reason Qt wants the same, you can try.

      Delete
    5. Hello Pierre,

      If you still have this problem, it occurs because of qmake is not working without sysroot is on the proper path. In that case you need to copy your raspberry's root file system to your host machine and it should be copied on '/opt/rpi/sysroot'

      Delete
  4. Hi Luca,
    I download PiOmxTextures 4.5.1, and paste Qt-rasp(2)-5.5.0 and qtdeps in /usr/local. And then register the PATH and LD_LIBRARY_PATH. I found that qmake and piomxtextures_pocplayer didn't work, but the expample worked well. How would I used the PiOmxTextures 4.5.1 binaries?

    Would be very glad if you had a clue.

    Thanks,
    King Chen

    ReplyDelete
    Replies
    1. qmake:cannot execute binary file.
      export PATH= /usr/local/Qt-rasp2-5.5.0/bin:/usr/local/qtdeps/bin:$PATH.
      piomxtextures_pocplayer:
      I execute:./piomxtextures_pocplayer 720p_h264.mov
      The movite didn't display. Print below message:
      08:09:18.356 DEBUG: Renderer thread is: 0x1f066e8.
      08:09:18.842 INFORMATION: Showing media: 720p_h264.mov.
      08:09:18.846 VERBOSE: Can't find extension for .
      08:09:18.847 VERBOSE: Can't find extension for image/jp2.
      08:09:18.847 VERBOSE: Can't find extension for image/vnd.microsoft.icon.
      08:09:18.848 VERBOSE: Can't find extension for image/x-dds.
      08:09:18.849 VERBOSE: Can't find extension for image/x-icns.
      08:09:18.849 VERBOSE: Can't find extension for image/x-mng.
      08:09:18.850 DEBUG: Entering: virtual void OpenMAXILPlayerControl::stop().
      08:09:18.851 VERBOSE: Stop
      08:09:18.852 DEBUG: Entering: virtual void OpenMAXILPlayerControl::setMedia(const QMediaContent&, QIODevice*).
      08:09:18.852 DEBUG: Media: .
      08:09:18.853 DEBUG: setMedia thread is: 0x1bc68e0.
      08:09:18.855 VERBOSE: Deferring setMedia()...
      08:09:18.855 DEBUG: Entering: virtual void OpenMAXILPlayerControl::play().
      08:09:18.855 VERBOSE: Deferring play() command...
      08:09:18.971 VERBOSE: Processing post setMedia()...
      08:09:18.971 DEBUG: Entering: void OpenMAXILPlayerControl::setMediaInt(const QMediaContent&).
      08:09:18.971 VERBOSE: Stop
      08:09:18.971 VERBOSE: Entering: bool OMX_MediaProcessor::setFilenameInt(QString, OMX_TextureData*&).
      08:09:18.971 VERBOSE: Opening ...
      08:09:19.056 ERROR: Failed to open source .

      Best regrads,

      Delete
    2. Are you running qmake on the Pi? It is not an ARM binary.
      piomxtextures_pocplayer sometimes requires a path to the media and some others a URI to it. Check the sources to know more.

      Delete
  5. Oh, I see. I ran qmake in Pi 2. It was my mistake. Thank you for your answer.
    By the way, I ran piomxtextures_pocplayer with the detail URI path. This issue came up also.
    Does the piomxtextures_pocplayer running need paramter such as "--loop","--animations","--seektest"?
    Could you tell me about the playing video format with hardware accelerated? H.264 .mov?

    Thanks,

    ReplyDelete
    Replies
    1. Something like this works for me: ./piomxtextures_pocplayer file:///home/pi/big_buck_bunny_1080p_h264.mov. Try with Big Buck Bunny and see if it works for you.
      Video codec depends on the available hardware accelerated codecs: h264 is always included. For the others you'll have to check. Multiple containers are available: I tested mkv, mov, mp4, avi etc...

      Delete
    2. This comment has been removed by the author.

      Delete
    3. piomxtextures_pocplayer ran perfectly. But we must note that there is something problem with running piomxtextures_pocplayer, if you set GPU size default(64M). And it will show massage that "GL error: GL_OUT_OF_MEMORY'. After I extand it with 128M(my display resolution is 800X600), it ran prefectly. Maybe it depends on our display resolution.
      By the way, how can I set the audio out put by 3.5 headphone in piomxtextures_pocplayer ?
      Could I cross compile my programm by qmake in ubuntu 12.04 32bit? Does it need a high version ubuntu 15.04 64bit?

      Thank you for your help!

      Delete
    4. Should I set the AUDIO_OUT env variable (possible values are both, local and hdmi; default: hdmi)?

      Delete
    5. Yes use that variable. Memory is needed to create front and back buffers. 4 are used at the moment. I used kununtu 15.04 64 bit. Not sure which versions can run it and which cannot.

      Delete
    6. Does piomxtextures_pocplayer support RTSP playing? Just like with omxplayer,eg. omxplayer rtsp://root:yourcamerapassword@192.168.0.200/axis-media/media.amp?resolution=800x600?

      Delete
    7. I tested http but never RTSP sorry. You should try by yourself. There is also some code for improving buffering, but I never tested it.

      Delete
    8. How can I run it with http?

      Delete
    9. Could you give me some tips about improving buffering? if I try to use RTSP.
      I am looking forward your guide.
      Thank you!

      Delete
    10. There is some macro in the media processor implementation. You can have a look at that.

      Delete
  6. Hi Luca,

    I am trying to build QT from your package on Rpi2 but I am no expert at that. Can you please point me to a page which talks about how to use the package for installation. I was following "https://wiki.qt.io/Native_Build_of_Qt_5.4.1_on_a_Raspberry_Pi" but seems I am missing something.

    Thanks,
    Manish

    ReplyDelete
    Replies
    1. Not sure I understand what you need sorry.

      Delete
    2. ok, I will try to again :)

      Being new with the QT installation; I am unable to use your package for building QT for raspberrypi2.
      Can you please point me to some steps for the same

      Delete
    3. You don't have to build Qt. I provided it already. You just have to write your code and run it.

      Delete
    4. So I should just copy the code onto raspberry pi ; set the ENV variables for QT and that should do the trick.
      That way I will be able to compile my program with qmake and make.

      Delete
    5. No, you should copy the binaries to your Pi, not the code. You can build your code using qmake and then move that build to the Pi and run it.

      Delete
  7. Anyone tried with a touchscreen. The touch is functional with the raspbian, but dont work in the applications compiled with these binaries...

    ReplyDelete
    Replies
    1. *The first sentence is a question... I mistyped, sorry...

      Delete
    2. Are you using libinput? Was it working with the 4.4.0 release of the binaries? That was running Qt 5.4. I do not have a touch device to test so I can't test anyway.

      Delete
  8. I did not tried with earlier builds. I'm using an eGalax Touchscreen connected through usb, listed at /dev/input/event0. I also tried the following commands:
    ./TouchTest -plugin evdevtouch:/dev/input/event0; (The clicks happen below my application, open the raspbian menu, open programs, but in my qt program nothing happens)
    ./TouchTest -plugin evdevmouse:/dev/input/event0; (Appear a mouse in the screen, and i can move it, very slow, but i cannot click)
    ./TouchTest -plugin tslib:/dev/input/event0 (Appears a nessage "selected device is not a touchscreen I understand", and the touch is not working)

    ReplyDelete
    Replies
    1. I do not understand what you mean by "The clicks happen below my application, open the raspbian menu, open programs, but in my qt program nothing happens".
      However does this work with the version of Qt provided by raspbian?

      Delete
  9. With your binaries, the qt programs run in an EGLFS layer. With the raspbian qt, it runs with the X11 system, I think (the touch works well here, but I don't have the video capability with omxplayer, developed by you:( ). In my opinion, the touchscreen don't want to communicate with the EGLFS layer, and communicate with the X11 layer instead...
    I mean that I touch a button in my qt app and nothing happens, but when I close the app, I can observ that the touch command was executed in the X11 layer.

    ReplyDelete
    Replies
    1. Can I compile my applications with your binaries, without EGLFS?

      Delete
    2. I tried to run my app with "plugin -libinput". Now it works, but it needs calibration. The "export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS="rotate=180" has no effect... :(

      Delete
    3. PiOmxTextures was only tested on eglfs. Not sure if X11 has OpenGL support on Pi. I was never interested in this.
      You need to shut it down. Then also try evdev test to see if the touch is working properly with the drivers in the Pi. You should follow regular guides to do this, unless you see there is something different in the build I provided.

      Delete
    4. I solved with the touchpad. If someone is interested:
      https://www.raspberrypi.org/forums/viewtopic.php?t=39027&f=64
      https://github.com/kergoth/tslib

      Install these packets needed for building libts:
      sudo apt-get install git automake libtool

      Clone the tslib repo, and build::
      git clone git://github.com/kergoth/tslib.git
      cd tslib
      ./autogen.sh
      ./configure
      make
      sudo make install

      Add the following to /usr/local/etc/ts.conf (ensuring all over module_raw lines are commented out):
      module_raw galax

      Note: You may have to modify the /etc/ts.conf too. (Not sure)

      Add the following to a bash script, and calibrate the touchscreen:
      #!/bin/bash
      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
      export TSLIB_CONSOLEDEVICE=none
      export TSLIB_FBDEVICE=/dev/fb0
      export TSLIB_TSDEVICE=/dev/input/event0
      export TSLIB_CALIBFILE=/home/pi/pointercal
      export TSLIB_CONFFILE=/usr/local/etc/ts.conf
      export TSLIB_PLUGINDIR=/usr/local/lib/ts
      ts_calibrate

      Note: I added these exports to my .bashrc.

      Note: You may have to verify your devices. In case of errors, you have to link the library file:
      cd /usr/local/lib
      sudo ln -s libts-1.0.so.0 libts-0.0.so.0

      Delete
    5. Thanks for sharing that!
      So you mean that neither evdev nor libinput was sufficient? tslib was strictly needed?

      Delete
    6. I did not manage to rotate touch under EGLFS as well ... but it did work by doing
      export QT_QPA_FB_DISABLE_INPUT=1
      export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=rotate=90
      export QT_QPA_EGLFS_DISABLE_INPUT=0
      export QT_QPA_EGLFS_NO_LIBINPUT=1
      Dont know why, just glad it works now.

      Delete
  10. Hi Luca,
    Could you post the source code into you git repository?
    Thanks as always!

    ReplyDelete
    Replies
    1. Sorry Luca,
      I haven't read this: "NOTE: This is not available in github yet. But it will shortly."

      My bad...

      Delete
  11. Hello,

    thanks for providing these binaries.
    I'd like to report a bug: I'm using POT 4.5.1 for Raspberry Pi 2 and whenever I try to pause a video the application crashes with the following error:
    /home/luca/project/pi/pi/piomxtextures_src/omxplayer_lib/OMXVideo.cpp:81: OMX_ERRORTYPE fill_buffer_done_callback(OMX_HANDLETYPE, OMX_PTR, OMX_BUFFERHEADERTYPE*): Assertion `provider->registerFilledBuffer(pBuffer)' failed.

    The full output is provided here:

    13:17:21.091 DEBUG: Entering: virtual void OpenMAXILPlayerControl::pause().
    13:17:21.093 VERBOSE: Processing post pause()...
    13:17:21.093 DEBUG: Entering: void OpenMAXILPlayerControl::pauseInt().
    13:17:21.094 VERBOSE: Pause
    13:17:21.095 DEBUG: State changed...
    13:17:21.113 INFORMATION: Pause command issued.
    13:17:21.985 DEBUG: Entering: virtual void OpenMAXILPlayerControl::play().
    13:17:21.986 VERBOSE: Deferring play() command...
    13:17:22.001 VERBOSE: Processing post play()...
    13:17:22.001 DEBUG: Entering: void OpenMAXILPlayerControl::playInt().
    13:17:22.001 VERBOSE: Play
    13:17:22.001 VERBOSE: Cleaning textures...
    13:17:22.002 INFORMATION: Play command issued.
    13:17:22.017 DEBUG: State changed...
    13:17:22.047 WARNING: Can't register a filled buffer. None is being filled.
    qml: started playback!
    qmltest: /home/luca/project/pi/pi/piomxtextures_src/omxplayer_lib/OMXVideo.cpp:81: OMX_ERRORTYPE fill_buffer_done_callback(OMX_HANDLETYPE, OMX_PTR, OMX_BUFFERHEADERTYPE*): Assertion `provider->registerFilledBuffer(pBuffer)' failed.
    bash: line 1: 5957 Aborted DISPLAY=':0.0' /opt/qmltest/bin/qmltest
    Application finished with exit code 134.

    ReplyDelete
    Replies
    1. The steps for reproducing this bug are as following:
      1.) Create a VideoOutput and load a video
      2.) Start the playback (video.play())
      3.) Pause it (video.pause())
      4.) Start it again -> this results in a crash

      Can this bug be reproduced by someone else?

      Delete
    2. Thanks, please file a bugreport on github. I'll have a look when possible.

      Delete
    3. Done: https://github.com/carlonluca/pi/issues/27

      Delete
    4. This comment has been removed by the author.

      Delete
  12. Hi Luca...

    Can you upload the sources of the latest binaries?
    Currently I'm working with a different version of Qt, and I also need some additional pulgins like QMySql, so I haven't been able to use your latest improvements and that for I currently have problems with stopping videos and starting another one just after.

    Thanks in advance

    ReplyDelete
  13. Hello,
    could you provide binaries with webkit plugins compiled ? Or guide how to compile them or install from other builds ?
    Many thanks!

    Jan

    ReplyDelete
    Replies
    1. I'm sorry. I have no interest in webkit at the moment. WebKit should be included in the binaries. As for plugins, I don't know what you are referring to.

      Delete
    2. Download the sources provided at
      http://www.linuxfromscratch.org/blfs/view/svn/x/qt5.html

      If you use git and get the latest of qt it will download (today at least) the version Qt5.5.1, and Luca compiled Qt5.5.0 and there could be incompatibility issues as I had.

      If you still have questions about the compiling process, give a look also to https://wiki.qt.io/Building_Qt_5_from_Git, but again don't use the git sources.

      sysroot should be placed at /opt/rpi/sysroot and that for Lucas binaries go at /opt/rpi/sysroot/usr/local/

      Take a look to this instructions also: http://thebugfreeblog.blogspot.it/p/build-procedure-for-piomxtextures.html

      Delete
    3. Thanks for reply.

      I have successfuly compiled and installed Qt with qtmultimedia patched (according to http://thebugfreeblog.blogspot.it/p/build-procedure-for-piomxtextures.html), webkit and other components included.

      But when I run pocplayer ( or my own application using qtmultimedia ) I get following error:
      pi@raspberrypi ~ $ ./piomxtextures_pocplayer filecache/VIDEO_http192168200658001getResource8.mpg
      [9;0]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).
      12:21:28.978 VERBOSE: Instantiating player service...
      12:21:28.979 VERBOSE: Instantiating QMediaService...
      12:21:28.983 DEBUG: Entering: OpenMAXILPlayerControl::OpenMAXILPlayerControl(QObject*).
      12:21:28.984 VERBOSE: Metadata update requested.
      Requesting control for org.qt-project.qt.metadatareadercontrol/5.0...
      Requesting control for org.qt-project.qt.mediaavailabilitycontrol/5.0...
      Requesting control for org.qt-project.qt.mediaplayercontrol/5.0...
      12:21:28.985 DEBUG: Entering: virtual void OpenMAXILPlayerControl::setMediaPlayer(QMediaPlayer*).
      Requesting control for org.qt-project.qt.medianetworkaccesscontrol/5.0...
      12:21:28.986 DEBUG: Entering: virtual QMediaPlayer::State OpenMAXILPlayerControl::state() const.
      12:21:28.986 DEBUG: Entering: virtual QMediaPlayer::MediaStatus OpenMAXILPlayerControl::mediaStatus() const.
      QDeclarativeAudio::itemChange
      QMediaPlayer::onItemChanged
      12:21:29.097 DEBUG: MetaData request for key: Title.
      12:21:29.097 DEBUG: MetaData request for key: SubTitle.
      12:21:29.098 DEBUG: MetaData request for key: Author.
      12:21:29.098 DEBUG: MetaData request for key: Date.
      12:21:29.099 DEBUG: MetaData request for key: AlbumTitle.
      12:21:29.099 DEBUG: MetaData request for key: AlbumArtist.
      Requesting control for org.qt-project.qt.videorenderercontrol/5.0...
      12:21:29.172 DEBUG: Entering: virtual void OpenMAXILVideoRendererControl::setSurface(QAbstractVideoSurface*).
      QDeclarativeAudio::itemChange
      QMediaPlayer::onItemChanged
      12:21:29.669 DEBUG: Renderer thread is: 0x1d9d3c0.
      12:21:30.192 INFORMATION: Showing media: filecache/VIDEO_http192168200658001getResource8.mpg.
      12:21:30.195 VERBOSE: Can't find extension for .
      12:21:30.196 VERBOSE: Can't find extension for image/jp2.
      12:21:30.197 VERBOSE: Can't find extension for image/vnd.microsoft.icon.
      12:21:30.197 VERBOSE: Can't find extension for image/x-dds.
      12:21:30.198 VERBOSE: Can't find extension for image/x-icns.
      12:21:30.199 VERBOSE: Can't find extension for image/x-mng.
      12:21:30.200 VERBOSE: Can't handle this media, sorry.

      Any ideas?

      Thanks, Jan.

      Delete
    4. Use a complete URI, not a relative path.

      Delete
    5. Thanks, but that leads to Segfault :(

      shell: http://pastie.org/10365607

      gdb backtrace: http://pastie.org/10365609

      strace: http://pastie.org/10365610

      I tried to recompile qtmultimedia, recompile lib, etc... but no luck.

      I would appreciate your help!

      Jan

      Delete
    6. Not sure why it segfaults, that backtrace is useless without the symbols, but I said an URI, not an absolute path. also try with the provided binaries.

      Delete
  14. I have started from scratch, re-downloaded and re-compiled whole sources, now it works :)

    now I'm trying to use this in my non-QML application which uses QtMultimedia. I hope I will figure it out :)

    Thanks for awesome work ! I'll be happy to see any updates.

    Jan

    ReplyDelete
    Replies
    1. (sorry for accidentaly posting this comment out of thread)
      Jan

      Delete
    2. I only worked on QML integration. Never tried outside. Good luck.

      Delete
  15. Hello,

    I'm trying to play udp/http streams using your backend (compiled from git sources). These streams are interlaced mpeg2.

    When I set deinterlace = VS_DEINTERLACEMODE_AUTO; or deinterlace = VS_DEINTERLACEMODE_FORCE; in OMXVideo.h, it deinterlaces just fine, but this message appears in console every ~1s or more and the video 'lags' when it does:

    07:50:53.328 WARNING: One frame couldn't be shown.

    (this message then appers also when playing local file)

    When I turn off deinterlacing and force my TV to play interlaced video it works just fine, but frames are missordered (i guess it plays half-frames in wrong order).

    In regular omxplayer it works perfect (when I just run omxplayer udp://... with right TV settings).

    I use slightly modified pocplayer to test this (just commented out mime-type check, so I can easily play streams and various local files)

    What am I doing wrong ?

    Thanks for any help, Jan

    ReplyDelete
    Replies
    1. I'm sorry but I do not have the license key for the mpeg2 decoder so I cannot test. However that log means that for some reason one frame was decoded but it was too late to show it.

      Delete
    2. Now it plays better... but only under weird circumstances... when start playing, the picture shakes (like misordered frames). But when I put a load on network interface (eg. big load of pings), it starts playing perfect just like omxplayer.

      Thanks, Jan.

      Delete
    3. It seems that recent builds somehow improved that issue of out of order frames.
      Are you playing streams coming from DVB-T/S? In that case deinterlacing may be useful... In the next build I'll add an env variable to control the deinterlacing. But you'll have to test it cause, as said, I can't.

      Delete
    4. Yes, I'm playing streams from DVB-T.

      I'll be happy to test it :) I can possibly record any video artifacts and provide console output.

      Or, if you want to test it yourself, I can donate you the mpeg2 license :)

      BTW, when do you plan to publish latest sources on github ?
      Now I'm trying to fix stream playing issues in code that is currently on github, but latest binaries seems to play way better (so it would make sense to operate with updated sources)

      Thanks for reply! Jan.

      Delete
    5. Very good then. I'll provide the build soon. File anything you want on github.
      Actually I see that near that interlacing enum I placed a clear comment: "keep if off, not working". So I probably got some issue myself in the past. Were you able to make it work then? I understand in some way yes, you made it work.
      I can't guarantee much time on it, not sure how much it is. If you want I can give a try.

      Yes, sources are getting old, you're right. I need to take some time to update properly. I plan to do it soon.

      Delete
    6. Yes, in your current sources on github, deinterlacing is working (when I set deinterlace AUTO or FORCE), but it causes annoying framedrops (not an performance problem with CPU, that quad core is around 10% usage when playing HD stream)

      Now I discovered that it started doing the same thing in pure omxplayer, so maybe I messed up something in my raspbian (I'll dd fresh install and report any progress)

      btw are you online on some IRC or so? It is kind of slow to communicate this way :) (maybe it should be public IRC)

      I'd like to solve this. Me (and probably many other people) would like to see full capabilities of omxplayer in their Qt application :) (It would be fatal for my project - if I'll not manage this to work, I'll have to go for another platform, and probably much more expensive)

      Thank you for your effort !

      Jan

      Delete
    7. Of course if omxplayer is not working either then it is very unlikely it works in POT. If it works there I may have a look if you can provide a license. Not sure how it can be acquired.

      Delete
    8. I have fixed it, problem is in latest rpi2 firmware, so I temporarily downgraded it.

      Latest binaries (not beta) is playing very smoothly, but interlaced (Thats why I need latest sources, to try to enable deinterlacing and because I have some other modifications in Qt (I can't just use your binaries as they are))

      I can provide license, but I need your rpi2 serial number, see: http://www.raspberrypi.com/mpeg-2-license-key/

      Thanks, jan

      Delete
    9. v5.0.0-beta1 introduces a new env variable INTERLACE_MODE. Setting it to 0, 1 or 2 sets the deinterlace mode to off, auto and force respectively.
      But if still does not work, I have no idea without debugging it directly. If you want me to have a look please contact me in private (linked for instance) so that I can send you the serial.
      Regards.

      Delete
  16. Hello Luca,

    Thanks for your efforts. I would like to use your build to develop Qt application for my Raspberry Pi 2.

    Actually I have already cross compiled Qt5.5.1 for my Raspbery Pi 2 but QtMultimedia player is not effectively plays videos :S. So I guess your implementation might be perfect for my purpose. But I need your guidance a bit.

    So I have downloaded 2nd package (PiOmxTextures 4.5.1 (for armv7)) which include "piomxtextures_pocplayer qtdeps and Qt-rasp2-5.5.0". I would like to ask you few questions.
    First one, I guess I need to copy "Qt-rasp2-5.5.0" tree to my host "/usr/local" tree and also to my Raspberry Pi 2 "/usr/local" ?
    Secondly, should I copy content of "qtdeps" to my Raspberry Pi 2's corresponding directory on "/usr"? I mean, "qtdeps/bin" -> "usr/bin" and "qtdeps/include" -> "usr/include" and etc. ?
    And what about "piomxtextures_pocplayer" ? Where should I move it on my Raspberry Pi 2's root tree?

    I am going to implement all of these to a clean rasbian image. would it be proper?

    And also can you please share or point an example Qt project so I can study on it to develop my own application?

    Thanks for helping
    Sina,

    I excuse for my english.

    ReplyDelete
    Replies
    1. Actually your english is better than mine... :-)
      I'll write an article about this in the next days if I'll find the time to do it. Too many people are asking these questions. It means the setup is not trivial as I thought on new machines...

      Delete
    2. You can probably have a look at this in the meantime: https://github.com/raspberrypi/firmware/issues/449#issuecomment-129036795. Won't answer all your questions though.

      Delete
    3. Hello Sina:

      "Qt-rasp2-5.5.0" must be placed at "/usr/local" in your RPI, and in your local image... following Luca's tree you should mount your RPI Image at "/opt/rpi/sysroot", and therefore you sould also place "Qt-rasp2-5.5.0" at "/opt/rpi/sysroot/usr/local"

      This sysroot should be sync with your RPI in order to have all the libraries and get a successful cross-compile environment. I guess you already know this, because you said you did it with Qt5.5.1.

      About qtdeps I placed all those libraries at "/usr/", but I didn't give it a thought, maybe I could be wrong.

      "piomxtextures_pocplayer" can be placed anywhere as it is an executable file

      and finally, about doing all these in a clean rasbian image... I haven't tried it yet, but as far as I know you still need the libraries in the RPI, even if you are cross-compiling, because at runtime Qt will check for them to use them... again I could be wrong...

      Delete
    4. Hello, just note:

      instead of manipulating with raspbian image, I have mounted running rpi via sshfs, it works pretty well.
      Sometimes it needs remount (especially when installing new libs). It is pretty good for debugging.

      I have raspberry mounted as root (you need to enable root ssh login) and succesfully cross compiled Qt 5.5.0 with Carlon's lib. I can just run 'make install' when I want to try some module and test it without reboots and 'dd'...

      Hope it helps

      Jan

      Delete
    5. This comment has been removed by the author.

      Delete
    6. Ah Hello Nicolas, Jan and Luca,

      I have already make my setup and tried it. But I guess this "QtMultimedia Backend" depends on some packages. And since I have deploy that setup over an clean Rasbian image, it lacks some of them. Because when I ran a command like, "piomxtextures_pocplayer file:///home/pi/Videos/H264_test1_480x360.mov" player starts but not playing the video. I have test if video has something wrong, but "omxplayer" was able to play it. So I guess it is not about the video. And since the "piomxtextures_pocplayer" able to run, I guess my Raspberry Pi 2 system lack some packages.

      Also after I quit "piomxtextures_pocplayer" program, there are some warnings over console output which says, "WARNING: No decoded frame to show at all. Let' render black."

      Luca, do you mind if I request you something? As you said you are going to write an article about how to setup an environment with hardware accelerated QtMultimedia, what about if you provide it for clean Rasbian image? So everyone who tries to have this environment can work from scratch. I am not so well exprienced with UNIX/Linux to hunt down the decoding packages for particular formats but if you able provide at least for H264 we would be able to test our environment to understand if everything works.

      I guess those are fairly much to ask you but atleast I guess it will decrease the amount of questions :).

      I will be waiting for your article. I really like to make my own player with some shiny icons over video :) and have hardware support to play videos. I guess I might try to embed "omxplayer" to QWidget and put some shiny icons over that widget to control it but not sure if it is possible. Also your way is more nature than that :).

      Also this weekend I will read your blog to understand how you actually made it possible :)

      To Jan; ahh, I might misunderstand you Jan. What do you exactly mean with "I have raspberry mounted as root and succesfully cross compiled Qt 5.5.0 with Carlon's lib." As I thought, Luca has shared the binaries? is there a need to build them again?

      Thank you,
      Sina

      Delete
    7. Yes, you need some packages to make it work. Use the QT_DEBUG_PLUGINS env variable to know what is missing.
      You don't need to build anything unless you want to customise/fix something. But as said, if you want to build an application that requires cross-build then mounting the Pi is practical.
      The problem with the complete image is that it requires time to upload and it is not very quick to update when new versions are available.

      Delete
    8. I published an article that explains the steps I followed to create e new image including the binaries. If you have further questions let me know, it might be useful to make it more useful.

      Delete
  17. Good morning Luca,

    I have read and follow your instructions at http://thebugfreeblog.blogspot.it/p/using-pot-builds.html

    I thank you for supporting, and for your efforts.
    I copied Qt builds to my Pi's /usr/local and qtdeps to / (root) aswell as piomxtextures_player.
    I added a newline at the end of the config.txt file at boot which is "gpu_mem=256".
    I created a new env variable, LD_LIBRARY_PATH="/qtdeps/lib/" and
    cd /
    ./piomxtextures_pocplayer /home/pi/big_buck_bunny_1080p_h264.mov
    and the output was,
    "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"
    Also tried with uri and the result was same. And also tried with "/usr/local/Qt-rasp2-5.5.0/bin/qmlscene video_position.qml file:///.../big_buck_bunny_1080p_h264.mov" and not different.

    Also I was not able to find out that env variable, QT_DEBUG_PLUGINS where is it?

    Thank you Luca,
    Sina

    ReplyDelete
  18. Luca,

    Successfully I runned POT_pocplayer :),

    The problem was I was missing setting LD_LIBRARY_PATH variable to /qtdeps/lib...

    So here is how I manage to do it,

    $export QT_DEBUG_PLUGINS=1

    than I have runned "./piomxtextures_pocplayer file:///home/pi/big_buck_bunny_1080p_h264.mov" and it gives missing packages, so it was the libinput.so which is you have already shared in "/qtdeps/lib" so I have

    $export LD_LIBRARY_PATH=/qtdeps/lib (btw, my qtdeps is on / (root))

    and everything was ok so it just worked! Thank you Luca :)

    But I have another problem, when I try to run your sample directory examples on qmlscene it gives error, here is the log;

    $/usr/local/Qt-rasp2-5.5.0/bin/qmlscene /home/pi/piomxtextures_samples/video_position.qml /home/pi/big_buck_bunny_1080p_h264.mov
    it gives that output:
    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).
    QFactoryLoader::QFactoryLoader() checking directory path "/usr/local/Qt-rasp2-5.5.0/plugins/styles" ...
    QFactoryLoader::QFactoryLoader() checking directory path "/usr/local/Qt-rasp2-5.5.0/bin/styles" ...
    file:///home/pi/big_buck_bunny_1080p_h264.mov:1 Expected token `numeric literal'
    file:///home/pi/big_buck_bunny_1080p_h264.mov:1 Expected a qualified name id

    Thank you,
    Sina

    ReplyDelete
    Replies
    1. Try to provide a URI. Not sure that is the problem though.

      Delete
    2. I just tried with URI but not working :S

      By the way Luca, since I am not so well exprienced with Qt neither with UNIX/Linux, I would like to ask you the difference between your implementation vs gst-omx. I have two SD cards, one has your Qt with your build and the other one is with gstreamer1.0. For my first expriences, build with gstreamer1.0 is also providing sufficient video playing quality.

      So what are the advantages and disadvantages between those builds? Would you please explain it roughly?

      Thank you for support,
      I will keep following you,
      Cheers,
      Sina

      Delete
    3. I'm sorry, but I have no information to provide about gst-omx.
      POT was born more than 3 years ago when gst-omx was not working or its performance was horrible. Shortly I stopped working on it cause I hoped gst-omx would become more performant with the introduction of gst 1.0. Instead, since then, I was asked by many to keep improving POT for their use case. I have not tested nor used recently in any way gst-omx cause I have no practical interest in doing it.

      Delete
    4. I do understand,
      Thanks for your highly helpful support and your valuable efforts. I'll try to get more experienced and try to found out the difference by myself. But at this time, your implementation would be a perfect example through my media player implementation.

      Cheers,
      Sina

      Delete
  19. Hello Luca,

    I am back to your implementation. Until now, my experience with your implementation is much better then gstreamer1.0. Your backend is using much less CPU then gstreamer1.0 implementation(gstreamer1.0 CPU usage is ~35%, POT CPU usage is ~10%). And also gstreamer1.0 has some undesirable shades on the video..

    But on the other hand, while the performance much better then gstreamer1.0 backend, some of the properties does not working. For example MediaPlayer's 'loops' property. I have set it to MediaPlayer.Infinite but somehow it does not loop the video and also it gives that message output on the debug output;

    11:43:19.291 VERBOSE: Stopping OMX clock...
    11:43:19.292 INFORMATION: Cleaning up...
    11:43:19.293 VERBOSE: Closing players...
    11:43:19.413 VERBOSE: Metadata update requested.
    11:43:19.415 VERBOSE: Freeing texture...
    11:43:19.415 INFORMATION: Cleanup done.
    11:43:19.416 DEBUG: State changed...

    Can you please help me how to loop it infinitely?

    Thank you,
    Sina

    ReplyDelete
    Replies
    1. You can report the bug to github and use the stopped signal.

      Delete
    2. Ok Luca, Thank you, I'll do it.

      Delete
  20. Hello,

    Do you think that hardware acceleration on QT 5.5 is not present on QT 5.3 ?

    Thanks,

    ReplyDelete
  21. I mean that QT is using EGL and opengl and it is not hardware accelerated in versions 5.3 and below ?
    The hardware acceleration comes from version 5.5 ?

    I am talking about qml graphical interface hardware acceleration and not video playback hardware acceleration.

    Thanks

    ReplyDelete
    Replies
    1. AFAIK it was hw accelerated in 4.7 but probably even before that. QML is hw accelerated since its creation.

      Delete