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
Matthew Waters
ae80fa4731
qmlglsrc: read from the back buffer when use-default-fbo = TRUE
...
glReadBuffer(GL_COLOR_ATTACHMENT0) on the default framebuffer (0) is
invalid GL API usage and would result in a GL error being thrown.
2019-10-25 22:09:20 +11:00
Matthew Waters
7f1e1d0d9d
qmlglsrc: fix vertical flip matrix
...
Some time ago libgstgl defined the majorness of matrices it uses.
The majorness used by qmlglsrc was incompatible with the libgstgl.
2019-10-25 22:09:20 +11:00
Tim-Philipp Müller
c9a47c0c8d
Remove autotools build system
2019-10-14 11:04:18 +01:00
Aaron Boxer
46989dca96
documentation: fix a number of typos
2019-10-05 22:38:11 +00:00
Tim-Philipp Müller
bf14759477
dv, gtk, qt, osxaudio, osxvideo, waveform: add to plugins list
...
Makes sure the paths for these plugins are included in the
uninstalled plugin paths list. And also for the docs.
Fixes #604
2019-05-29 14:56:37 +00:00
Benjamin Sigonneau
0375e53225
qmlglsink: fix compilation with Qt >= 5.5 on Windows
...
As of Qt >= 5.5, qmake do not link to opengl32 by default anymore. This commit adds opengl32.lib to the .pro
file so that the plugin can be build using QtCreator on Windows.
2019-04-18 17:14:18 +02:00
Nirbheek Chauhan
e40072630c
meson: Build qt plugin in C++11 mode explicitly
...
This works implicitly most of the time, but we need to set it
explicitly for building with Android.
2019-04-17 15:48:26 +05:30
Nirbheek Chauhan
f23724b8a6
meson: Only ensure that moc is available on Linux
...
On other OSes, it's not possible to have qmake or the qt5 pkg-config
files and not have moc, and `moc` will not be in `PATH`, so this only
causes problems.
2019-04-01 18:20:28 +05:30
Matthew Waters
c92dcf513d
qmlgl: Fix opengl header guard changes again
...
Reapply 3d708a5bfa
in the correct place
after the iOS additions.
2019-02-05 15:27:49 +11:00
Nirbheek Chauhan
d677e635fc
meson: qmlgl plugin iOS definitions
...
Tested with cross-ios-arm64 and cross-ios-x86, since those two are the
only archs shipped with the official Qt binaries.
2019-02-01 14:28:18 +05:30
Nirbheek Chauhan
0de89c0dbe
qt: Don't define GLsync inside gstglfuncs.h
...
This was originally added for fixing conflicting definitions between
Android and Qt, but times have changed and now this breaks the build
on iOS:
[...]/OpenGLES.framework/Headers/ES3/gl.h:1006:48: error: unknown type name 'gst_qt_GLsync'
GL_API void GL_APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) OPENGLES_DEPRECATED(ios(7.0, 12.0), tvos(9.0, 12.0));
^
../ext/qt/gstqtgl.h:49:16: note: expanded from macro 'GLsync'
#define GLsync gst_qt_GLsync
^
6 errors generated.
Instead, we simply avoid defining GLsync ourselves if we're using Qt.
2019-02-01 14:28:18 +05:30
Nirbheek Chauhan
1bdec4d055
meson: Fix indentation in qt plugin and add a FIXME comment
2019-02-01 14:28:18 +05:30
Nirbheek Chauhan
e9b5e78c9e
meson: Add macOS definitions for qmlgl plugin
...
Tested with Cerbero.
2019-01-29 12:19:37 +05:30
Nirbheek Chauhan
8f9ca07756
meson: Fix building of qmlgl plugin on Android
...
Needs gnustl for C++ STL support, which is the GNU STL on Android API
19 and older, and is a wrapper for the llvm-libc++ STL on newer APIs.
QtGui C++ templates use GL functions, so GLESv2 is needed at link time
2019-01-29 12:19:37 +05:30
George Kiagiadakis
0a1d048ee3
qmlgl: add README.md with information on building for non-linux platforms with qmake
2019-01-21 11:55:50 +02:00
George Kiagiadakis
f09807fc3d
qmlgl: meson: fix theoretical support for building for android
...
The android code path is slightly different than the EGLFS one,
so I added previously a HAVE_QT_ANDROID define for use with qmake.
Here I also add it in meson, although I expect nobody will ever use
meson to build this, as it's complicated.
2019-01-21 11:55:50 +02:00
George Kiagiadakis
eab642b1c3
qmlgl: qmake: add support for MacOS target
2019-01-21 11:55:50 +02:00
George Kiagiadakis
66d0c41161
qmlgl: qmake: remove cerbero's include dir from the include path
...
pkg-config should do it's job here, this is unnecessary and implies using cerbero
2019-01-21 11:55:50 +02:00
George Kiagiadakis
e279903857
qmlgl: qualify Qt includes with their module and remove module include dir from the .pro file
...
it is perfectly legal to use the <module/class> style of includes with Qt
and it avoids the need for having the module's include dir in the include path
2019-01-21 11:55:50 +02:00