Matthew Waters
cfd4a9a6d9
qt: always update the sink_retrieved flag when the sink retrieves
...
Fixes a case where adding a qmlgloverlay element after an existing
qmlglsink elements was already in the pipeline would create an entirely
separate GstGLDisplay pointing to the same underlying display resource.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1050 >
2021-08-12 22:57:01 +10:00
Kai Uwe Broulik
4ed342db5d
qt: Support RGB format
...
In GstQSGTexture::hasAlphaChannel return value based on
whether the video format has alpha channel.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1040 >
2021-07-28 11:42:12 +00:00
Matthew Waters
b1fb787859
qmlglsrc: fix operation without any qmlglsink
...
E.g. a pipeline like qmlglsrc ! gldownload ! ... would currently fail to
run because the OpenGL context are not created in the correct order.
The QtWindow also needs to know the OpenGL context used by downstream
elements in order to set optimize for the correct GstGLSyncMeta for
synchonisation purposes.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1036 >
2021-07-28 02:11:44 +00:00
Philippe Normand
304a75a67a
qt: Fix clang build
...
The updatePaintNode method is part of the QQuickItem class interface, so needs
to be flagged as overriding the default implementation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/567 >
2021-07-05 16:12:57 +01:00
Philippe Normand
5f1b290fe8
qt: Add navigation events support
...
Currently handles only mouse events.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/567 >
2021-07-05 11:44:30 +01:00
Matthew Waters
fbf60a61a0
qtitem: don't potentially leak a large number of buffers
...
The only other place where these queued buffers are removed, is in
setCaps() but that is not called at all on shutdown so this list of
buffers could not be removed.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1004 >
2021-06-03 20:33:45 +10:00
Matthew Waters
c75bd32539
qml: don't use buffers that have invalid contents
...
If the GL context is not shareable, ignore it.
A future change may also not output the relevant output either.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/983 >
2021-05-12 02:55:51 +00:00
Matthew Waters
3b4673eba3
qml: also use the dummy texture when no buffer has been set
...
Fixes corrupted texture output when changing OpenGL display/contexts.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/983 >
2021-05-12 02:55:51 +00:00
Matthew Waters
c7181bedac
qt: return a different GstGLDisplay object when the first sink requests
...
This allows the 'replace-gstreamer-opengl-context' context machinery to
correctly replace the OpenGL context used by the pipeline when the first
qmlglsink is added to the pipeline.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/982 >
2021-05-11 06:40:38 +00:00
VaL Doroshchuk
36b794f9ff
qmloverlay: Use first found GstGLVideoItem as widget property
...
GstGLVideoItem is required to render input video in the overlay's qml.
And currently qmlgloverlay requires to set this GstGLVideoItem to its widget property.
Instead of fetching GstGLVideoItem from the overlay's root object (root-item prop),
and setting it back as a widget (widget prop),
proposing to use found GstGLVideoItem in the current object hierarchy (passed in qml-scene) by default.
Also useful in Python, which solves the issue when casting gpointer <=> QQuickItem* is required.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/919 >
2021-04-21 08:26:52 +00:00
Marco Felsch
8e8dab7a4d
qmlglsink: allow to set force-aspect-ratio property
...
Add the forceAspectRatio Q_PROPERTY to allow changing the aspect ratio
from QML code as well.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/937 >
2021-04-19 17:46:41 +00:00
Val Doroshchuk
597a226b92
gstqtoverlay: Add initialization and finalization to qml-scene prop
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/924 >
2021-03-31 12:05:14 +00:00
Matthew Waters
4c3906356c
qt: fix build warning with clang and c-linkage of user defined type
...
In file included from ../subprojects/gst-plugins-good/ext/qt/qtglrenderer.cc:17:
../subprojects/gst-plugins-good/ext/qt/gstqtglutility.h:35:16: error: 'qt_opengl_native_context_from_gst_gl_context' has C-linkage specified, but returns user-defined type 'QVariant' which is incompatible with C [-Werror,-Wreturn-type-c-linkage]
QVariant qt_opengl_native_context_from_gst_gl_context (GstGLContext * context);
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/928 >
2021-03-31 10:28:11 +11:00
Stéphane Cerveau
42b803ebb3
qt: hotfix: allow per feature registration
...
Fixes #869
Split plugin into features including
dynamic types which can be indiviually
registered during a static build.
More details here:
https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/925 >
2021-03-30 10:09:00 +02:00
Stéphane Cerveau
6cbba1e470
qt: allow per feature registration
...
Split plugin into features including
dynamic types which can be indiviually
registered during a static build.
More details here:
https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/876 >
2021-03-29 12:45:22 +02:00
Matthew Waters
612102fdbc
gst: don't use volatile to mean atomic
...
volatile is not sufficient to provide atomic guarantees and real atomics
should be used instead. GCC 11 has started warning about using volatile
with atomic operations.
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719
Discovered in https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/868
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/911 >
2021-03-18 19:52:53 +11:00
Matthew Waters
9d14ae4740
qml: add some docs on display and contexts
...
Especially considering some dynamic pipeline scenarios.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/822 >
2020-11-20 07:49:40 +00:00
Sebastian Dröge
e3c16d0194
qmlglsink: Keep old buffers around a bit longer if they were bound by QML
...
We don't know exactly when QML will stop using them but it should be
safe to unref them after at least 2 more buffers were bound.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/810 >
2020-11-11 11:37:27 +00:00
Dinesh Manajipet
aa264e6b07
qmlglsink: Set qtitem's implicit width/height
...
This can be useful to let the layouts automatically resize qtitem
and also easily query a video's width/height from QML
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/802 >
2020-11-02 13:53:46 +00:00
Bastien Reboulet
27ecd2c30d
qmlglsink: fix crash when created/destroyed in quick succession
...
The crash is caused by a race condition where the render thread
calls a method on the QtGLVideoItem instance that was
previously destroyed by the main thread.
Also, less frequently, QtGLVideoItem::onSceneGraphInitialized
is called when QQuickItem::window is null, also causing a crash.
Fixes #798
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/777 >
2020-10-20 18:12:20 +00:00
Dmitriy Purgin
e695991508
gstqmlgl: build on Windows with qmake without pkgconfig; update instructions on building for Windows
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/591 >
2020-08-24 23:31:47 +00:00
Matthew Waters
625e56d3b4
qmlgloverlay: fix multiple elements with Qt 5.15
...
With Qt 5.15 multiple qmlgloverlay elements would produce:
ASSERT: "!m_gl->property(QSG_RENDERCONTEXT_PROPERTY).isValid()" in file /path/to/qt5/qtdeclarative/src/quick/scenegraph/qsgdefaultrendercontext.cpp, line 121
Workaround by setting the (seeminigly unused) property before
initialization.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/695 >
2020-08-10 15:52:21 +10:00
Matthew Waters
3296a03d73
build: update for gl pkg-config file split
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/680 >
2020-08-07 07:58:29 +00:00
Raul Tambre
b471f75ea0
QtGLVideoItem: Use QSharedPointer::data() for better compatibility
...
Older Qt versions didn't have QSharedPointer::get(), which is just a modern alias for QSharedPointer::data().
FAILED: ext/qt/libgstqmlgl.so.p/qtitem.cc.o
c++ -Iext/qt/libgstqmlgl.so.p -Iext/qt -I../ext/qt -I. -I.. -I../gst-libs -I/usr/include/glib-2.0 -I/usr/lib/aarch64-linux-gnu/glib-2.0/include -I/usr/include/gstreamer-1.0 -I/usr/include/orc-0.4 -I/usr/lib/aarch64-linux-gnu/gstreamer-1.0/include -I/usr/include/aarch64-linux-gnu/qt5/QtCore -I/usr/include/aarch64-linux-gnu/qt5 -I/usr/include/aarch64-linux-gnu/qt5/QtGui -I/usr/include/aarch64-linux-gnu/qt5/QtQml -I/usr/include/aarch64-linux-gnu/qt5/QtNetwork -I/usr/include/aarch64-linux-gnu/qt5/QtQuick -I/usr/include/aarch64-linux-gnu/qt5/QtX11Extras -I/usr/include/libdrm -flto -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -std=c++11 -Wmissing-declarations -Wredundant-decls -Wwrite-strings -Winit-self -Wmissing-include-dirs -Wno-multichar -Wvla -Wpointer-arith -g -fdebug-prefix-map=/opt/good/src=. -Wformat -Werror=format-security -O3 -march=native -Wno-error -Wdate-time -fPIC -pthread -DHAVE_CONFIG_H -DHAVE_QT_X11 -DHAVE_QT_EGLFS -MD -MQ ext/qt/libgstqmlgl.so.p/qtitem.cc.o -MF ext/qt/libgstqmlgl.so.p/qtitem.cc.o.d -o ext/qt/libgstqmlgl.so.p/qtitem.cc.o -c ../ext/qt/qtitem.cc
In file included from /usr/include/gstreamer-1.0/gst/gst.h:55:0,
from /usr/include/gstreamer-1.0/gst/video/video.h:23,
from ../ext/qt/qtitem.cc:27:
../ext/qt/qtitem.cc: In destructor ‘virtual QtGLVideoItem::~QtGLVideoItem()’:
../ext/qt/qtitem.cc:138:86: error: ‘class QSharedPointer<QtGLVideoItemInterface>’ has no member named ‘get’
GST_INFO ("%p Destroying QtGLVideoItem and invalidating the proxy %p", this, proxy.get());
^
/usr/include/gstreamer-1.0/gst/gstinfo.h:682:31: note: in definition of macro ‘GST_CAT_LEVEL_LOG’
(GObject *) (object), __VA_ARGS__); \
^~~~~~~~~~~
../ext/qt/qtitem.cc:138:3: note: in expansion of macro ‘GST_INFO’
GST_INFO ("%p Destroying QtGLVideoItem and invalidating the proxy %p", this, proxy.get());
^
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/673 >
2020-07-15 12:38:50 +00:00
Matthew Waters
88775c2e18
qt/gloverlay: fix using OpenGL after destroying Qml
...
Qml somewhat unhelpfully seems to uncurrent our OpenGL context on its
destruction. Work around that by uncurrenting and recurrenting again.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/632 >
2020-07-10 06:11:48 +00:00
Nirbheek Chauhan
099712338f
qt: Rework how we find the Qt QPA header
...
Instead of querying the Qt include path from the dependency or from
qmake, rely on the qt5qml_dep to set the include path to QtGui
correctly, and look for the header inside the private includedir.
Then we can use that path to include the header directly.
Reported in https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/780#note_548092
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/640 >
2020-06-28 00:16:53 +05:30
Nirbheek Chauhan
ed457fe08f
qt: Only check for moc-qt5/moc in PATH if not cross-compiling
...
This is an extra check that's only needed for working around Linux
distribution packaging. `moc` is not required in the cross file.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/640 >
2020-06-28 00:16:53 +05:30
Matthew Waters
6fba2e3dd3
qt/gloverlay: reset OpenGL state after Qt drawing
...
Reset to the original OpenGL state as required by the GStreamer OpenGL
API contract. Fixes output with a glimagesink element downstream.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/623 >
2020-06-12 07:23:19 +00:00
Matthew Waters
ffe4d09efc
qt/gloverlay: reset current OpenGL context after Qt
...
Qt may replace the drawable with its own which breaks output if Qt is
not displaying the resulting video as used with e.g. glimagesink.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/623 >
2020-06-12 07:23:19 +00:00
Matthew Waters
8a8c8afc86
qtoverlay: add the root item as a property
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/595 >
2020-05-20 19:37:32 +00:00
Raul Tambre
37c1b1e13f
qtglrenderer.cc: Fix compiling
...
46bfb7d247
fixed a format warning without checking if it actually compiled.
toUtf8() returns QByteArray so we need to assign it to a temporary variable to be able to get the raw string data from it.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/593 >
2020-05-15 19:20:45 +03:00
Raul Tambre
46bfb7d247
qtglrenderer.cc: Fix -Wformat-security warning
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/592 >
2020-05-15 06:07:25 +00:00
Nirbheek Chauhan
fbd4afc64c
meson: Pass native: false to add_languages()
...
This is needed for cross-compiling without a build machine compiler
available. The option was added in 0.54, but we only need this in
Cerbero and it doesn't break older versions so it should be ok.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/589 >
2020-05-13 19:25:33 +05:30
Nirbheek Chauhan
553ac050f0
meson: Make C++ compiler detection not be automagic
...
It is now controlled by the qt5 and/or taglib options. We won't
silently fail to build taglib now.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/587 >
2020-05-12 04:33:43 +05:30
Nirbheek Chauhan
d67a658daf
meson: Fix gstgl checks for qt and gtk
...
Also rename from build_ to have_, which is more accurate.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/587 >
2020-05-12 04:32:01 +05:30
Nirbheek Chauhan
2ecba800bf
meson: Revamp qt5qml plugin and example build code
...
Stricter and simpler. For example, now we properly error out when
gstreamer-gl-1.0 was not found when the qt5 plugin is enabled or when
a C++ compiler is not enabled.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/587 >
2020-05-12 04:30:13 +05:30
Matthew Waters
7f6fb07f85
qt/x11: also pass the window for gstgl -> qt context
...
Removes this warning from Qt:
QGLXContext: Multiple configs for FBConfig ID -1
QSGContext::initialize: depth buffer support missing, expect rendering errors
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/575 >
2020-04-27 18:19:31 +10:00
Matthew Waters
05108c2898
qt: perform surface creation in the main thread
...
As is required when creating a QWindow instance set out in the Qt
documentation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/575 >
2020-04-27 18:19:31 +10:00
Matthew Waters
8be5c780bb
qmlgloverlay: fix usage without an qmlglsink in the pipeline
...
Without a qmlglsink, we need to retrieve the window system display
ourselves rather than relying solely on qmlglsink to have priority on
the choice of display.
2020-03-24 10:24:36 +00:00
Matthew Waters
6397d2f910
qmlgloverlay: don't leak resources freed on a different GL thread
...
deleting a QOpenGLFrameBufferObject needs to occur on the same thread it
was created on in order to actually free the relevant resources
immediately. Otherwise, they will be queued for deletion and not freed
until the associated QOpenGLContext is destroyed.
2020-03-23 14:05:18 +11:00
Matthew Waters
818dde2e02
qt: reorganize include defines
2020-03-20 21:23:03 +00:00
Dmitriy Purgin
40a82104ea
gstqmlgl: Link to opengl32.lib on MinGW
2020-03-20 06:25:28 +00:00
Matthew Waters
7a25fb5b08
qt: add a qml overlay filter element [part 2]
...
It takes a qml scene description and renders it using a possible input
stream.
Currently supported on GLX and WGL.
Follow up to (as that MR had an old version of the commit):
- https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/475
- 4778d7166a
: qt: add a qml overlay filter element
2020-03-19 17:26:54 +11:00
Matthew Waters
4778d7166a
qt: add a qml overlay filter element
...
It takes a qml scene description and renders it using a possible input
stream.
Currently supported on GLX and WGL.
2020-03-18 11:22:39 +00:00
Matthew Waters
21acf312f0
qt: don't always activate/deactivate our GstGLContext
...
Techincally it is enough to activate at the beginning and then forget.
2020-03-18 11:22:39 +00:00
Matthew Waters
a1f53b4f46
qmlglsink: propagate the context up the the application
...
Allows the application to be notified of the OpenGL context creation.
2020-03-18 11:22:39 +00:00
Matthew Waters
5e9f80c79a
qtitem: fix leak of caps
2020-03-18 11:22:39 +00:00
Niels De Graef
91c55bd920
qt: Use G_DECLARE_FINAL_TYPE
2020-03-16 09:20:07 +01:00
Milian Wolff
3e0d557744
qmlgl: ensure Qt defines GLsync to fix compile on some platforms
...
By explictly including QtGui/qopengl.h we force the code path that
defines GLsync in the Qt-specific way. Without that, some platforms
failed to compile the qmlgl plugin, since neither Qt nor gstreamer
defined GLsync then, leading to e.g.:
```
make[4]: Entering directory '/.../gst-plugins-good-1.16.1/ext/qt'
CXX libgstqmlgl_la-qtitem.lo
In file included from gstqtgl.h:32,
from qtitem.h:27,
from qtitem.cc:28:
/.../usr/include/gstreamer-1.0/
gst/gl/gstglfuncs.h:93:17: error: expected identifier before ‘*’ token
ret (GSTGLAPI *name) args;
^
/.../usr/include/gstreamer-1.0/
gst/gl/glprototypes/sync.h:27:1: note: in expansion of macro
‘GST_GL_EXT_FUNCTION’
GST_GL_EXT_FUNCTION (GLsync, FenceSync,
^~~~~~~~~~~~~~~~~~~
```
2020-03-05 03:21:48 +00:00
Philipp Zabel
c47a585052
qmlglsink: fix build on EGL platform without X11 headers
...
If Mesa is built without X11 headers, building against Mesa EGL headers
requires a dependency on egl.pc, to define MESA_EGL_NO_X11_HEADERS.
This fixes a build error when compiling ext/qt/gstqtglutility.cc:
In file included from /usr/include/EGL/egl.h:39,
from /usr/include/gstreamer-1.0/gst/gl/egl/gstegl.h:44,
from ../gst-plugins-good-1.16.1/ext/qt/gstqtglutility.cc:43:
/usr/include/EGL/eglplatform.h:124:10: fatal error: X11/Xlib.h: No such file or directory
2019-12-04 22:38:49 +00:00