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:
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user