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
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
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
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
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
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
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
5e9f80c79a
qtitem: fix leak of caps
2020-03-18 11:22:39 +00:00
Jochen Henneberg
a0d526a2a8
qmlglsink: Expose itemInitialized as property
...
Instead of just signalling when ready exposing the state
as a property allows us to bind at any time if player is
loaded async.
2017-09-14 15:12:12 +10:00
Carlos Rafael Giani
d9a294ac9f
qmlglsink: Add itemInitialized signal to QML item
...
This is useful for autoplay for example. With autoplay, it is necessary to
wait until the scene graph is fully set up. This signal is emitted once the
QML item node is ready. So, inside a connected slot, the pipeline's state
can be set to PLAYING to automatically start playback as soon as the QML
script is loaded.
https://bugzilla.gnome.org/show_bug.cgi?id=786246
2017-08-14 14:51:43 +03:00
Jan Schmidt
ac068bd2b9
qt: Use a proxy object for access to the QML widget
...
QML can destroy the video widget at any time, leaving
us with a dangling pointer. Use a lock and a proxy
object to cope with that, and block in the widget
destructor if there are ongoing calls into the widget.
2017-07-12 15:51:11 +10:00
Jan Schmidt
c4eabb1a87
qt: Remove misleading reference to GTK in qtitem.cc
2017-06-22 01:01:40 +10:00
Matthew Waters
01b6c38ec9
qml/item: also unref the display on destruction
...
Leaking objects (and a thread!) is never a good idea.
https://bugzilla.gnome.org/show_bug.cgi?id=775746
2016-12-07 23:02:02 +11:00
Haihua Hu
669600617c
qt: implement qmlglsrc for qml view grab
...
[Matthew Waters]: gst-indent sources
https://bugzilla.gnome.org/show_bug.cgi?id=768160
2016-08-03 22:11:11 +10:00
Haihua Hu
04fd6dc6c4
qmlglsink: Fix build error when don't have QPA installed.
...
Check header file existance and wrap the header file include
in the necessary #ifdef to avoid build error.
https://bugzilla.gnome.org/show_bug.cgi?id=767553
2016-06-27 22:44:56 +10:00
Matthew Waters
3be4b85a43
qmlglsink: add win32 support
...
The current state of c++ ABI's on Window's and Gst's/Qt's conflicting
mingw builds means that we cannot use mingw for building the qt plugin.
Instead, a qmake .pro file is provided that is expected to be used with the
msvc binaries provided by Qt like so:
(with the PATH environment variable containing the path to the qt biniaries
and PKG_CONFIG_PATH containing the path to GStreamer modules)
cd /path/to/sources/gst-plugins-bad/ext/qt
qmake -tp vc
Then open the resulting VS project and build the library. Then
cp debug/libgstqtsink.dll /path/to/prefix/lib/gstreamer-1.0/libgstqtsink.cll
https://bugzilla.gnome.org/show_bug.cgi?id=761260
2016-06-22 14:26:05 +10:00
Sergey Borovkov
c9dd45393e
qml: Enable qmlglsink for eglfs
...
https://bugzilla.gnome.org/show_bug.cgi?id=763044
2016-06-16 01:49:16 +10:00
Matthew Waters
486d3c3b59
qmlglsink: propagate GL context creation failure upwards
...
Otherwise an application cannot know if the qmlglsink will be displaying frames
incorrectly/at all.
2016-06-16 01:49:16 +10:00
Matthew Waters
f17e58f888
qmlglsink: also allow wayland-egl as a platform name
2016-06-16 01:49:16 +10:00
Haihua Hu
a07a9b0bc3
qmlglsink: Add Wayland support
...
Don't use gstgldisplay to get wayland display. Should use QPA on wayland
to get wayland display for QT.
https://bugzilla.gnome.org/show_bug.cgi?id=767553
2016-06-16 01:49:16 +10:00
Sergey Borovkov
c2f17d4834
qml: Fix leak of the OpenGL contexts
...
[Matthew Waters]: add NULL checks before unreffing
https://bugzilla.gnome.org/show_bug.cgi?id=762999
2016-03-03 13:13:26 +11:00
Matthew Waters
6c6a9cf509
qt: use a static_cast instead of dynamic one
...
The dynamic_cast is a little but of overkill as the app will still crash if it
fails in the later g_assert.
Allows compilation with -fno-rtti
https://bugzilla.gnome.org/show_bug.cgi?id=762526
2016-02-24 21:20:18 +11:00
Sergey Borovkov
472b396528
qmlglsink: Schedule onSceneGrpahInitialized to execute on render thread
...
onSceneGraphInitialized() is called from non render thread currently when
scene graph is already initialized.
https://bugzilla.gnome.org/show_bug.cgi?id=761003
2016-02-22 20:26:41 +11:00
Sergey Borovkov
1d41990b26
qml: Mark material dirty when texture buffer is updated
...
Qt might not redraw the scene otherwise.
https://bugzilla.gnome.org/show_bug.cgi?id=758286
2016-01-15 14:11:52 +11:00
Roman Nowicki
1dc889c6d0
qml: reuse existing GstQSGTexture
...
Fixes a memory leak leaking the texture objects.
https://bugzilla.gnome.org/show_bug.cgi?id=758286
2015-11-20 11:18:43 +11:00
Roman Nowicki
21ca4ac9d3
qml: proper initialization if scene is already initialized
...
The scene graph can be initialized when the we receive window handle change
notification and so we will not receive a scenegraph initialization
notification. Initialize ourself in this case.
https://bugzilla.gnome.org/show_bug.cgi?id=758337
2015-11-20 09:41:56 +11:00
Matthew Waters
b2718cbd81
gl: be consistent in gobject boilerpate
...
GST_GL_IS_* vs GST_IS_GL_*
git grep -l 'GST_GL_IS_' | xargs sed -i 's/GST_GL_IS_/GST_IS_GL_/g'
2015-10-19 15:15:30 +11:00
Matthew Waters
c6d03bc7d4
qt: add support for building on osx/ios
...
Including:
- Necessary configure checks
- Necessary compile time platform checks
- Necessary runtime qt iOS/OSX platform detection
https://bugzilla.gnome.org/show_bug.cgi?id=755100
2015-10-02 22:29:45 +10:00
Luis de Bethencourt
704f97defd
qml: remove overwritten value
...
Value in tex is overwritten before being used. Removing it.
CID 1320715
https://bugzilla.gnome.org/show_bug.cgi?id=754253
2015-09-28 18:17:22 +10:00
Matthew Waters
d47398de3b
qt: add support for building/running on android
...
Including:
- Necessary configure checks
- Necessary compile time platform checks
- Necessary runtime qt android platform detection
- Escaping GLsync definition with Qt's GLES2 implementation
https://bugzilla.gnome.org/show_bug.cgi?id=754466
2015-09-28 16:47:00 +10:00
Matthew Waters
f1cb602476
gtk, qt: more specifically define the compile time requirements
...
Otherwise we could include headers/configurations that will
never been installed.
https://bugzilla.gnome.org/show_bug.cgi?id=754732
2015-09-10 13:11:06 +10:00
Nirbheek Chauhan
e99c591dc9
qmlsink: Ensure that at least one windowing system is available
...
Otherwise, we'll just crash at runtime because the gl context is NULL
https://bugzilla.gnome.org/show_bug.cgi?id=754108
2015-08-31 23:16:07 +01:00
Tim-Philipp Müller
9846984c63
gtk, qt, gl: fix typo in debug and error messages
2015-08-31 18:06:31 +01:00
Matthew Waters
b8bb4cc50f
qml: implement the required multiple GL context synchonisation
...
From GStreamer's GL context into the QML context
2015-08-08 17:30:42 +02:00
Matthew Waters
e56df237ee
glcontext: fix get_current_gl_api on x11/nvidia drivers
...
They require to get_proc_address some functions through the
platform specific {glX,egl}GetProcAddress rather than the default
GL library symbol lookup.
2015-07-18 18:18:22 +10:00
Edward Hervey
d1ad64fca7
configure/qt: Fix build without Qt5X11Extras
2015-07-10 14:01:59 +02:00
Matthew Waters
b1bbdceeb2
new qt5 qml GL video sink
...
Very much in the same spirit as the Gtk GL sink
Two things are provided
1. A QQuickItem subclass that renders out RGBA filled GstGLMemory
buffers that is instantiated from qml.
2. A sink element that will push buffers into (1)
To use
1. Declare the GstGLVideoItem in qml with an appropriate
objectName property set.
2. Get the aforementioned GstGLVideoItem from qml using something like
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QObject *rootObject = engine.rootObjects().first();
QQuickItem *videoItem = rootObject->findChild<QQuickItem *> ("videoItem");
3. Set the videoItem on the sink
https://bugzilla.gnome.org/show_bug.cgi?id=752185
2015-07-10 15:25:26 +10:00