summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gsttools/qvideosurfacegstsink.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/gsttools/qvideosurfacegstsink.cpp b/src/gsttools/qvideosurfacegstsink.cpp
index 8809551a0..53b790edf 100644
--- a/src/gsttools/qvideosurfacegstsink.cpp
+++ b/src/gsttools/qvideosurfacegstsink.cpp
@@ -208,15 +208,18 @@ GstFlowReturn QVideoSurfaceGstDelegate::render(GstBuffer *buffer)
m_frame.setEndTime((startTime + duration)/G_GINT64_CONSTANT (1000000));
}
- QMetaObject::invokeMethod(this, "queuedRender", Qt::QueuedConnection);
+ m_renderReturn = GST_FLOW_OK;
- if (!m_renderCondition.wait(&m_mutex, 300)) {
- m_frame = QVideoFrame();
-
- return GST_FLOW_OK;
+ if (QThread::currentThread() == thread()) {
+ if (!m_surface.isNull())
+ m_surface->present(m_frame);
} else {
- return m_renderReturn;
+ QMetaObject::invokeMethod(this, "queuedRender", Qt::QueuedConnection);
+ m_renderCondition.wait(&m_mutex, 300);
}
+
+ m_frame = QVideoFrame();
+ return m_renderReturn;
}
void QVideoSurfaceGstDelegate::queuedStart()