qmlglsink from gstreamer1.0-plugins-good 1.14.1 is not built with proper QPA headers

Bug #1804452 reported by dv_ on 2018-11-21
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
gst-plugins-good1.0 (Ubuntu)
Undecided
Unassigned

Bug Description

Qt5 can render directly to KMS (that is, without X11 or Wayland running) based on its EGLFS platform and the Mesa3D GBM library. This is generally useful for scenarios with fullscreen applications that run all the time, like a media center on a HTPC. Using a system like X11 or Wayland in such cases is overkill, since as said, there will only ever be one graphical application active at the same time, and said application will run in fullscreen mode.

Qt5 based applications that want to use GStreamer 1.x for video playback currently can choose to either use QtMultimedia or qmlglsink+extra playback code. A common choice is qmlglsink+gstplayer. The benefit of qmlglsink is that it is maintained by the GStreamer developers, and is integrated with the GStreamer OpenGL stack.

However, the qmlglsink from the current gstreamer1.0-plugins-good package from Ubuntu 18.04 does not work when using EGLFS on top of KMS. This is because qmlglsink needs to access the EGLDisplay handle that Qt5 is using. Currently, this is done through the QPlatformNativeInterface nativeResourceForWindow() function. This class can be found in the qpa/qplatformnativeinterface.h header. And this header in turn is present in the qtbase5-private-dev package.

Relevant bits in the qmlglsink code are:

https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/blob/master/configure.ac#L894
https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/blob/master/ext/qt/meson.build#L31
https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/blob/master/ext/qt/gstqtglutility.cc#L45
https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/blob/master/ext/qt/gstqtglutility.cc#L118

The simple solution to this is to make sure that the qpa/qplatformnativeinterface.h header is present when gstreamer1.0-plugins-good is being built. Then, the relevant code paths in ext/qt/gstqtglutility.cc are activated (via #ifdefs), and qmlglsink can run with EGLFS on top of KMS.

dv_ (dv-9) on 2018-11-21
description: updated
description: updated
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers