I created a test image for the Raspberry Pi 3 board, using the best compilation flags I found available, and added a recipe for POT to include hardware acceleration in Qt. The result is good: just invoke qmlscene on a little QML code and you have a hardware accelerated OpenGL scene rendering video with Qt API (QML) in your Yocto image.
You can find the layer here: https://github.com/carlonluca/meta-pot. It is based on the POT project that can be found here: https://github.com/carlonluca/pot.
Images
In the repo I also added a couple of examples of images I created for me. I'll improve those in case I'll find the time to do it.All you have to do is include the recipe and POT will be installed in the image (satisfy the dependencies if some were missing).
Example
I created some images using this setup (I included many things that are not mandatory at all for POT):BBLAYERS ?= " \
${WORKSPACE}/poky-pyro/meta \
${WORKSPACE}/poky-pyro/meta-poky \
${WORKSPACE}/poky-pyro/meta-openembedded/meta-oe \
${WORKSPACE}/poky-pyro/meta-openembedded/meta-multimedia \
${WORKSPACE}/poky-pyro/meta-openembedded/meta-networking \
${WORKSPACE}/poky-pyro/meta-openembedded/meta-python \
${WORKSPACE}/poky-pyro/meta-raspberrypi-crypto \
${WORKSPACE}/poky-pyro/meta-qt5 \
${WORKSPACE}/poky-pyro/meta-oracle-java \
${WORKSPACE}/poky-pyro/meta-java \
${WORKSPACE}/poky-pyro/meta-office \
${WORKSPACE}/meta-pot \
"
in my layer.conf I placed:
LICENSE_FLAGS_WHITELIST = "commercial oracle_java"
DISTRO_FEATURES = "ext2 ext3 ext4 pam gles2 usbhost ${DISTRO_FEATURES_LIBC}"
DISTRO_FEATURES_BACKFILL_CONSIDERED += "pulseaudio"
PACKAGE_CLASSES = "package_deb"
IMAGE_FEATURES += "package-management ssh-server-openssh"
DISTRO_FEATURES_remove = "X11 wayland"
EXTRA_IMAGE_FEATURES = "debug-tweaks dev-pkgs tools-sdk tools-debug"
PREFERRED_PROVIDER_jpeg = "libjpeg-turbo"
PREFERRED_PROVIDER_jpeg-native = "libjpeg-turbo-native"
PREFERRED_PROVIDER_udev = "eudev"
PREFERRED_PROVIDER_virtual/java-initial-native = "cacao-initial-native"
PREFERRED_PROVIDER_virtual/java-native = "cacao-native"
PREFERRED_PROVIDER_virtual/javac-native = "ecj-bootstrap-native"
VIRTUAL_RUNTIME_init_manager = "sysvinit"
MACHINE_FEATURES_remove = "apm"
IMAGE_FSTYPES ?= "rpi-sdimg"
MACHINE = "raspberrypi3"
DISTRO = "poky"
At this point you can use something like pot-minimal (https://github.com/carlonluca/meta-pot/blob/master/images/pot-minimal.bb) and you should have a working image.
You can test it pretty simply by using a trivial QML like this:
import QtQuick 2.2
import QtMultimedia 5.5
Rectangle {
color: "orange"
Video {
autoLoad: true
autoPlay: true
source: "file:///home/root/bbb_3m.mov"
anchors.fill: parent
}
}
and you should see your video in the QML scene right away with the command:
qmlscene -platform eglfs main.qml
Optimization
I wanted to also create an image fully optimized for the Raspberry Pi 3 board, which is a Cortex-A53 armv8-a architecture which includes crc and new A64, A32, and T32 instructions to Advanced SIMD that accelerate Advanced Encryption Standard (AES) encryption and decryption, and the Secure Hash Algorithm (SHA) functions SHA-1, SHA-224, and SHA-256. Still I wanted a fully 32-bit system as hardware libraries are only supported for this bitness. To do this I had to apply a few patches to the Yocto repos. I uploaded every patch to these forks:https://github.com/carlonluca/poky.git (branch: pyro_cortexa53)
https://github.com/carlonluca/meta-raspberrypi (branch: pyro_cortexa53)
Bye! ;-)