Wednesday, November 11, 2015

Binaries for Hardware Accelerated Qt 5.5.1 Multimedia Backend on Raspbian Jessie (POT 5.1.0)

This is a build of version 5.1.0 for Raspbian Jessie of POT that includes Qt 5.5.1. As many asked in the past, this version also includes the QtWebKit module (WebKit1 and WebKit2). The changes are:
  • Fixed bugs reported on github.
  • New environment variables used for controlling deinterlacing:
    • 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.
  • Added watchdogs to monitor the video capabilities and discover instability. These are currently disable but you can enable if needed.
  • Some other minor fixes and improvements.
Please remember to update the firmware to the latest possible version as it includes a fix relevant to POT.
Please file bugs to github if you experience issues.
Bye! ;-)

Download PiOmxTextures 5.1.0 for Raspbian Jessie Pi2 here (extraction code is: bd4f).
Download PiOmxTextures 5.1.0 for Raspbian Jessie Pi2 with Bluetooth (BLE) here.

This is the configure summary of the Qt build:
   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-clang 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 -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 = -L/opt/rpi/sysroot/usr/lib/arm-linux-gnueabihf -ludev  QMAKE_LIBINPUT_VERSION_MAJOR = 1 QMAKE_LIBINPUT_VERSION_MINOR = 0 QMAKE_INCDIR_LIBINPUT = /opt/rpi/sysroot/home/pi/qtdeps/include  QMAKE_LIBS_LIBINPUT = -L/opt/rpi/sysroot/home/pi/qtdeps/lib -linput  QMAKE_LIBXI_VERSION_MAJOR = 1 QMAKE_LIBXI_VERSION_MINOR = 7 QMAKE_LIBXI_VERSION_PATCH = 4 QMAKE_X11_PREFIX = /usr 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  INCLUDEPATH +=  "/opt/rpi/sysroot/home/pi/qtdeps/include" LIBS +=  -L"/opt/rpi/sysroot/home/pi/qtdeps/lib" sql-drivers =  sql-plugins =  sqlite 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 ................ yes
      XShape ............. yes
      XSync .............. yes
      XVideo ............. yes
  Session management ..... yes
  SQL drivers: 
    DB2 .................. no
    InterBase ............ no
    MySQL ................ no
    OCI .................. no
    ODBC ................. no
    PostgreSQL ........... no
    SQLite 2 ............. no
    SQLite ............... yes (plugin, using bundled copy)
    TDS .................. no
  tslib .................. yes
  udev ................... yes
  xkbcommon-x11........... yes (bundled copy, XKB config root: /usr/share/X11/xkb)
  xkbcommon-evdev......... no
  zlib ................... yes (system library)

16 comments:

  1. Hi Luca,
    does this run on the pi-1 as well? If not, will you upload that package as well?
    Would be great.

    ReplyDelete
    Replies
    1. No, as you can see Qt is built for armv7 with neon optimisations. You'll have to rebuild it. I'll provide the sources shortly.

      Delete
  2. Hello,

    I have this error message when I play a video with qt example (examples/multimedia/video/qmlvideo or qmlvideofx) :
    17:52:39.706 ERROR: Failed to get shared OGL context. Please enable it with the proper attr.

    What to do to fix this error ? I try with another video, but I had the same error message

    Raspberry Pi firmware is up-to-date. Full log :

    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).
    17:52:39.702 INFORMATION: POT build Nov 10 2015 21:01:04.
    17:52:39.705 INFORMATION: Initializing GPU context in media processor...
    Requesting control for org.qt-project.qt.metadatareadercontrol/5.0...
    17:52:39.705 INFORMATION: Initializing buffer provider...
    Requesting control for org.qt-project.qt.mediaavailabilitycontrol/5.0...
    Requesting control for org.qt-project.qt.mediaplayercontrol/5.0...

    Requesting control for org.qt-project.qt.medianetworkaccesscontrol/5.0...
    Requesting control for org.qt-project.qt.videorenderercontrol/5.0...
    Input #0, h264, from '/opt/vc/src/hello_pi/hello_video/test.h264':
    Duration: N/A, bitrate: N/A
    Stream #0:0: Video: h264 (Main), yuv420p(tv, bt709), 1920x1080, 25 fps, 25 tbr, 1200k tbn, 50 tbc
    17:52:41.278 INFORMATION: Instantiating texture data...
    17:52:41.279 INFORMATION: Creating EGLImageKHR...
    eglCreateImageKHR: failed to create image for buffer 0x74b57d5 target 12465 error 0x3008
    17:52:41.280 ERROR: Failed to create KHR image: 12296.
    17:52:41.280 INFORMATION: Instantiating texture data...
    17:52:41.280 INFORMATION: Creating EGLImageKHR...
    eglCreateImageKHR: failed to create image for buffer 0x74b57d5 target 12465 error 0x3008
    17:52:41.281 ERROR: Failed to create KHR image: 12296.
    17:52:41.283 INFORMATION: Instantiating texture data...
    17:52:41.283 INFORMATION: Creating EGLImageKHR...
    eglCreateImageKHR: failed to create image for buffer 0x74b57d5 target 12465 error 0x3008
    17:52:41.283 ERROR: Failed to create KHR image: 12296.
    17:52:41.283 INFORMATION: Instantiating texture data...
    17:52:41.283 INFORMATION: Creating EGLImageKHR...
    eglCreateImageKHR: failed to create image for buffer 0x74b57d5 target 12465 error 0x3008
    17:52:41.283 ERROR: Failed to create KHR image: 12296.
    17:52:41.284 WARNING: Couldn't get a valid texture.
    Video codec omx-h264 width 1920 height 1080 profile 77 fps 25.000000
    V:PortSettingsChanged: 1920x1080@25.00 interlace:0 deinterlace:0 anaglyph:0 par:inf layer:0 alpha:255

    Best regards

    ReplyDelete
    Replies
    1. You need to enable shared opengl context. Refer to Qt documentation for that.

      Delete
  3. Hello,

    I thank you for your support Luca, really appreciated. I would like to ask you about dependencies; I am trying to cross compile my project (which I have started on POT 5 beta 2) against POT 5.1 jessie on pi2. but when I try to compile it, it fails to compile, it could not find "libicui18n.so.55, libicuuc.so.55, libicudata.so.55". I have already have libicu-dev and libicu52 but those are provide "libicui18n.so.52, libicuuc.so.52, libicudata.so.52" but I could not be able to find "libicui18n.so.55, libicuuc.so.55, libicudata.so.55". Do you have any advice where can i find those or how can i solve this problem?

    Thank you,
    Sina

    ReplyDelete
    Replies
    1. Those libs are provided in qtdeps. What's the exact error?

      Delete
    2. /opt/rpi/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: warning: libicui18n.so.55, needed by /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so, not found (try using -rpath or -rpath-link)
      /opt/rpi/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: warning: libicuuc.so.55, needed by /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so, not found (try using -rpath or -rpath-link)
      /opt/rpi/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: warning: libicudata.so.55, needed by /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so, not found (try using -rpath or -rpath-link)

      Delete
    3. /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucnv_compareNames_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucnv_fromUnicode_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucnv_countAliases_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucal_get_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucol_open_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucal_openTimeZones_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `u_strToUpper_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucal_close_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucal_openTimeZoneIDEnumeration_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucal_getDSTSavings_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucnv_toUnicode_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucol_setAttribute_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucnv_open_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucol_strcoll_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucnv_close_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucal_getTimeZoneDisplayName_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucal_open_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucol_close_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucal_openCountryTimeZones_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucnv_getStandardName_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucol_getSortKey_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucnv_getAvailableName_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucal_setMillis_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `u_errorName_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucnv_getDefaultName_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `uenum_next_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `u_strToLower_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucal_inDaylightTime_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `uenum_close_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucal_clone_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucnv_getAlias_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucnv_getMaxCharSize_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucal_getDefaultTimeZone_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucnv_setSubstChars_55'
      /opt/rpi/sysroot/usr/local/Qt-rasp2-5.5.1/lib/libQt5Core.so: undefined reference to `ucnv_countAvailable_55'
      collect2: error: ld returned 1 exit status

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

      Delete
    5. Ah Luca, I found the why linker could not be able to find qtdeps, becasuse the rpath link has been setted to different path where I have copied them. I copied qtdeps to root but rpath link setted to /home/pi/qtdeps/lib.

      So everythink is ok now, I thank you so much.

      Sina

      Delete
  4. Thanks for your work on this.

    I have one error i can get rid off.
    eglCreateImageKHR: failed to create image for buffer 0x28 target 12465 error 0x300c
    22:55:04.546 ERROR: Failed to create KHR image: 12300.

    I have made a app who shows a image in a ListView slides and shows a video (using POT) after the video has been showed i destory the video object en plays a image or a video so on so... after 8 minutes i get the error escripted above... I think there is a leak... but i don't no how to fix it

    ReplyDelete
    Replies
    1. You can file the bug on github but you need to provide a simple way to reproduce. There are people running for weeks so it may be something related to your specific use case.

      Delete
    2. I have found the problem when you initialize the mediaplayer a lot of times and destroy It the player Will crash... there is a memoryleak when you destroy the mediaplayer. Solution I implementeren now is one mediaplayer which I overlap over my slider when he is finished. For the slider I have made a screenshot of the first and the last frame. And nog everything is working fine...

      Thanks for the great work...

      Cheers

      Delete
    3. What is the memory leaked? You can propose the fix if you found it.

      Delete
  5. Hi. I have tried to play video with audio. Video plays perfectly but I've got no audio. Then i tried to play just audio and got the same problem.
    Code:
    MediaPlayer {
    id: mpa
    source: "file:///home/pi/prest.mp3"
    autoPlay: true
    volume: 1.0
    onPlaying: {
    console.log("Volume: " + mpa.volume)
    }
    }
    Logs:

    [mp3 @ 0x67825ad0] Skipping 417 bytes of junk at 85.
    [mp3 @ 0x67825ad0] Estimating duration from bitrate, this may be inaccurate
    Input #0, mp3, from '/home/pi/prest.mp3':
    Metadata:
    artist : Quinn String Quartet
    album : Israeli Concertino
    genre : Classical
    Duration: 00:01:06.65, start: 0.000000, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
    Audio codec mp3 channels 2 samplerate 44100 bitspersample 16
    qml: Volume: 0.009999999776482582

    I get no errors in logs, but volume of my media player is near zero. Do you have idea what can be the issue? Without POT its OK but video is not accelerated.

    ReplyDelete
    Replies
    1. Open an issue in github, if I'll find the time I'll have a look.

      Delete