diff options
author | Dmitry Shusharin <pmdvsh@gmail.com> | 2021-07-30 17:20:07 +0700 |
---|---|---|
committer | GStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org> | 2021-08-16 11:25:58 +0000 |
commit | 211aaaf8b8acbaf7efeb299d81f0782c8cdaea22 (patch) | |
tree | 641198f958469d7b4c508596c14382837ad05e7e | |
parent | 9af6ce974a7f2dc0bee37fcd4763842669aee723 (diff) | |
download | gstreamer-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.h | 12 | ||||
-rw-r--r-- | ext/qt/qtitem.cc | 24 | ||||
-rw-r--r-- | ext/qt/qtitem.h | 3 | ||||
-rw-r--r-- | ext/qt/qtwindow.cc | 23 | ||||
-rw-r--r-- | ext/qt/qtwindow.h | 3 |
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; }; |