From 7415e4c879e930927afae21790eede7f7c35c965 Mon Sep 17 00:00:00 2001 From: Lev Zelenskiy Date: Fri, 3 Feb 2012 13:01:38 +1000 Subject: Gst player backend: fixed prerolled frames rendering Don't use queued render request if it's called from the object own thread. Change-Id: I61ac11f5cf68edf82d0681c95123e804869d0647 Reviewed-by: Dmytro Poplavskiy --- src/gsttools/qvideosurfacegstsink.cpp | 15 +++++++++------ 1 file 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() -- cgit v1.2.3