From 03cf7f6445d50afcf8de5eaabc916bd0b5620f4d Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Tue, 13 Aug 2024 15:07:07 -0400 Subject: [PATCH] qml6glsrc: Reduce capture delay In qml6glsrc, we capture the application by copying the back buffer into our own FBO. The afterRendering() signal is too soon as from the apitrace, the application has been rendered into a QT internal buffer, to be used as a cache for refresh. Use afterFrameEnd() signal instead. This works with no delay on GLES. With GL it seems to reduce from 2 to 1 frame delay (this may be platform specific). A different recording technique would need to be used to completely remove this delay. Part-of: --- subprojects/gst-plugins-good/ext/qt6/qt6glwindow.cc | 4 ++-- subprojects/gst-plugins-good/ext/qt6/qt6glwindow.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/subprojects/gst-plugins-good/ext/qt6/qt6glwindow.cc b/subprojects/gst-plugins-good/ext/qt6/qt6glwindow.cc index 3486c54e79..661187c6eb 100644 --- a/subprojects/gst-plugins-good/ext/qt6/qt6glwindow.cc +++ b/subprojects/gst-plugins-good/ext/qt6/qt6glwindow.cc @@ -103,7 +103,7 @@ Qt6GLWindow::Qt6GLWindow (QWindow * parent, QQuickWindow *src) this->priv->internal_format = GL_RGBA; connect (source, SIGNAL(beforeRendering()), this, SLOT(beforeRendering()), Qt::DirectConnection); - connect (source, SIGNAL(afterRendering()), this, SLOT(afterRendering()), Qt::DirectConnection); + connect (source, SIGNAL(afterFrameEnd()), this, SLOT(afterFrameEnd()), Qt::DirectConnection); if (source->isSceneGraphInitialized()) source->scheduleRenderJob(new RenderJob(std::bind(&Qt6GLWindow::onSceneGraphInitialized, this)), QQuickWindow::BeforeSynchronizingStage); else @@ -201,7 +201,7 @@ Qt6GLWindow::beforeRendering() } void -Qt6GLWindow::afterRendering() +Qt6GLWindow::afterFrameEnd() { gboolean ret; guint width, height; diff --git a/subprojects/gst-plugins-good/ext/qt6/qt6glwindow.h b/subprojects/gst-plugins-good/ext/qt6/qt6glwindow.h index c964da23b0..3c0fc14d97 100644 --- a/subprojects/gst-plugins-good/ext/qt6/qt6glwindow.h +++ b/subprojects/gst-plugins-good/ext/qt6/qt6glwindow.h @@ -45,7 +45,7 @@ public: private Q_SLOTS: void beforeRendering (); - void afterRendering (); + void afterFrameEnd (); void onSceneGraphInitialized (); void onSceneGraphInvalidated ();