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/7351>
This commit is contained in:
Nicolas Dufresne 2024-08-13 15:07:07 -04:00 committed by GStreamer Marge Bot
parent 90e58aec3c
commit 03cf7f6445
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 ();