GStreamer 1.0: fix frames being presented too many times.

Presenting a frame originates from a gstreamer thread, we block there
until the frame is actually presented in the main thread. The problem
is that it was presented over and over again until the gstreamer thread
was unblocked.
Make sure a given frame is presented only once.

Change-Id: I46f246740313968637add802f509ebffcc5c19b8
Reviewed-by: Andrew den Exter <andrew.den.exter@qinetic.com.au>
This commit is contained in:
Yoann Lopes
2015-03-24 16:50:31 +01:00
parent de700906a1
commit 7bb8b76373

View File

@@ -300,8 +300,11 @@ bool QVideoSurfaceGstDelegate::handleEvent(QMutexLocker *locker)
gst_caps_unref(startCaps);
} else if (m_renderBuffer) {
GstBuffer *buffer = m_renderBuffer;
m_renderBuffer = 0;
m_renderReturn = GST_FLOW_ERROR;
if (m_activeRenderer && m_surface) {
GstBuffer *buffer = m_renderBuffer;
gst_buffer_ref(buffer);
locker->unlock();
@@ -312,15 +315,11 @@ bool QVideoSurfaceGstDelegate::handleEvent(QMutexLocker *locker)
locker->relock();
m_renderReturn = rendered
? GST_FLOW_OK
: GST_FLOW_ERROR;
m_renderCondition.wakeAll();
} else {
m_renderReturn = GST_FLOW_ERROR;
m_renderCondition.wakeAll();
if (rendered)
m_renderReturn = GST_FLOW_OK;
}
m_renderCondition.wakeAll();
} else {
m_setupCondition.wakeAll();