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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7562>
This commit is contained in:
Nicolas Dufresne 2024-08-13 15:07:07 -04:00 committed by Backport Bot
parent b2a2c4c840
commit e3265375ef
2 changed files with 3 additions and 3 deletions

View file

@ -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;

View file

@ -45,7 +45,7 @@ public:
private Q_SLOTS:
void beforeRendering ();
void afterRendering ();
void afterFrameEnd ();
void onSceneGraphInitialized ();
void onSceneGraphInvalidated ();