summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Shusharin <pmdvsh@gmail.com>2021-07-30 17:20:07 +0700
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>2021-08-16 11:25:58 +0000
commit211aaaf8b8acbaf7efeb299d81f0782c8cdaea22 (patch)
tree641198f958469d7b4c508596c14382837ad05e7e
parent9af6ce974a7f2dc0bee37fcd4763842669aee723 (diff)
downloadgstreamer-plugins-good-211aaaf8b8acbaf7efeb299d81f0782c8cdaea22.tar.gz
gstqmlgl: create helper QRunnable-based class for render jobs
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1032>
-rw-r--r--ext/qt/gstqtglutility.h12
-rw-r--r--ext/qt/qtitem.cc24
-rw-r--r--ext/qt/qtitem.h3
-rw-r--r--ext/qt/qtwindow.cc23
-rw-r--r--ext/qt/qtwindow.h3
5 files changed, 14 insertions, 51 deletions
diff --git a/ext/qt/gstqtglutility.h b/ext/qt/gstqtglutility.h
index 6b878ca7a..7b02bca7a 100644
--- a/ext/qt/gstqtglutility.h
+++ b/ext/qt/gstqtglutility.h
@@ -25,9 +25,21 @@
#include <gst/gl/gl.h>
#include <QVariant>
+#include <QRunnable>
G_BEGIN_DECLS
+struct RenderJob : public QRunnable {
+ using Callable = std::function<void()>;
+
+ explicit RenderJob(Callable c) : _c(c) { }
+
+ void run() { _c(); }
+
+private:
+ Callable _c;
+};
+
GstGLDisplay * gst_qt_get_gl_display (gboolean sink);
gboolean gst_qt_get_gl_wrapcontext (GstGLDisplay * display,
GstGLContext **wrap_glcontext, GstGLContext **context);
diff --git a/ext/qt/qtitem.cc b/ext/qt/qtitem.cc
index e16533fd4..9876f8ec0 100644
--- a/ext/qt/qtitem.cc
+++ b/ext/qt/qtitem.cc
@@ -29,7 +29,6 @@
#include "gstqsgtexture.h"
#include "gstqtglutility.h"
-#include <QtCore/QRunnable>
#include <QtCore/QMutexLocker>
#include <QtCore/QPointer>
#include <QtGui/QGuiApplication>
@@ -90,27 +89,6 @@ struct _QtGLVideoItemPrivate
GQueue potentially_unbound_buffers;
};
-class InitializeSceneGraph : public QRunnable
-{
-public:
- InitializeSceneGraph(QtGLVideoItem *item);
- void run();
-
-private:
- QPointer<QtGLVideoItem> item_;
-};
-
-InitializeSceneGraph::InitializeSceneGraph(QtGLVideoItem *item) :
- item_(item)
-{
-}
-
-void InitializeSceneGraph::run()
-{
- if(item_)
- item_->onSceneGraphInitialized();
-}
-
QtGLVideoItem::QtGLVideoItem()
{
static gsize _debug;
@@ -625,7 +603,7 @@ QtGLVideoItem::handleWindowChanged(QQuickWindow *win)
{
if (win) {
if (win->isSceneGraphInitialized())
- win->scheduleRenderJob(new InitializeSceneGraph(this), QQuickWindow::BeforeSynchronizingStage);
+ win->scheduleRenderJob(new RenderJob(std::bind(&QtGLVideoItem::onSceneGraphInitialized, this)), QQuickWindow::BeforeSynchronizingStage);
else
connect(win, SIGNAL(sceneGraphInitialized()), this, SLOT(onSceneGraphInitialized()), Qt::DirectConnection);
diff --git a/ext/qt/qtitem.h b/ext/qt/qtitem.h
index 6fc18083d..649bccc20 100644
--- a/ext/qt/qtitem.h
+++ b/ext/qt/qtitem.h
@@ -60,8 +60,6 @@ private:
QMutex lock;
};
-class InitializeSceneGraph;
-
class QtGLVideoItem : public QQuickItem, protected QOpenGLFunctions
{
Q_OBJECT
@@ -108,7 +106,6 @@ protected:
private:
- friend class InitializeSceneGraph;
void setViewportSize(const QSize &size);
void shareContext();
diff --git a/ext/qt/qtwindow.cc b/ext/qt/qtwindow.cc
index 39959669e..a2d931b29 100644
--- a/ext/qt/qtwindow.cc
+++ b/ext/qt/qtwindow.cc
@@ -31,7 +31,6 @@
#include "gstqtglutility.h"
#include <QtCore/QDateTime>
-#include <QtCore/QRunnable>
#include <QtGui/QGuiApplication>
#include <QtQuick/QQuickWindow>
#include <QOpenGLFramebufferObject>
@@ -80,26 +79,6 @@ struct _QtGLWindowPrivate
quint64 stop;
};
-class InitQtGLContext : public QRunnable
-{
-public:
- InitQtGLContext(QtGLWindow *window);
- void run();
-
-private:
- QtGLWindow *window_;
-};
-
-InitQtGLContext::InitQtGLContext(QtGLWindow *window) :
- window_(window)
-{
-}
-
-void InitQtGLContext::run()
-{
- window_->onSceneGraphInitialized();
-}
-
QtGLWindow::QtGLWindow ( QWindow * parent, QQuickWindow *src ) :
QQuickWindow( parent ), source (src)
{
@@ -124,7 +103,7 @@ QtGLWindow::QtGLWindow ( QWindow * parent, QQuickWindow *src ) :
connect (source, SIGNAL(afterRendering()), this, SLOT(afterRendering()), Qt::DirectConnection);
connect (app, SIGNAL(aboutToQuit()), this, SLOT(aboutToQuit()), Qt::DirectConnection);
if (source->isSceneGraphInitialized())
- source->scheduleRenderJob(new InitQtGLContext(this), QQuickWindow::BeforeSynchronizingStage);
+ source->scheduleRenderJob(new RenderJob(std::bind(&QtGLWindow::onSceneGraphInitialized, this)), QQuickWindow::BeforeSynchronizingStage);
else
connect (source, SIGNAL(sceneGraphInitialized()), this, SLOT(onSceneGraphInitialized()), Qt::DirectConnection);
diff --git a/ext/qt/qtwindow.h b/ext/qt/qtwindow.h
index a607a316c..b6b529ee2 100644
--- a/ext/qt/qtwindow.h
+++ b/ext/qt/qtwindow.h
@@ -31,8 +31,6 @@
typedef struct _QtGLWindowPrivate QtGLWindowPrivate;
-class InitQtGLContext;
-
class QtGLWindow : public QQuickWindow, protected QOpenGLFunctions
{
Q_OBJECT
@@ -52,7 +50,6 @@ private Q_SLOTS:
void aboutToQuit();
private:
- friend class InitQtGLContext;
QQuickWindow * source;
QScopedPointer<QOpenGLFramebufferObject> fbo;
};