diff --git a/src/private/shmrenderer.cpp b/src/private/shmrenderer.cpp index 9a327dab16fd8cedfd69c62fd3cf3717b4a2e7de..a014ffbc2c79150886d52af03a4a0ccdbc3b5031 100644 --- a/src/private/shmrenderer.cpp +++ b/src/private/shmrenderer.cpp @@ -128,8 +128,10 @@ bool Video::ShmRendererPrivate::renderToBitmap() return false; } - if(!VideoRendererManager::instance()->startStopMutex()->tryLock()) + if(!VideoRendererManager::instance()->startStopMutex()->tryLock()) { + shmUnlock(); return false; + } // wait for a new buffer while (m_BufferGen == m_pShmArea->m_BufferGen) { @@ -169,6 +171,7 @@ bool Video::ShmRendererPrivate::renderToBitmap() if (!q_ptr->resizeShm()) { qDebug() << "Could not resize shared memory"; VideoRendererManager::instance()->startStopMutex()->unlock(); + shmUnlock(); return false; } @@ -176,10 +179,10 @@ bool Video::ShmRendererPrivate::renderToBitmap() static_cast<Video::Renderer*>(q_ptr)->d_ptr->otherFrame().resize(m_pShmArea->m_BufferSize); memcpy(static_cast<Video::Renderer*>(q_ptr)->d_ptr->otherFrame().data(),m_pShmArea->m_Data,m_pShmArea->m_BufferSize); m_BufferGen = m_pShmArea->m_BufferGen; - shmUnlock(); static_cast<Video::Renderer*>(q_ptr)->d_ptr->updateFrameIndex(); - VideoRendererManager::instance()->startStopMutex()->unlock(); + shmUnlock(); + return true; #else return false; @@ -306,8 +309,8 @@ void Video::ShmRendererPrivate::timedEvents() ///Start the rendering loop void Video::ShmRenderer::startRendering() { + QMutexLocker locker {mutex()}; VideoRendererManager::instance()->startStopMutex()->lock(); - QMutexLocker locker(mutex()); startShm(); if (!d_ptr->m_pTimer) { d_ptr->m_pTimer = new QTimer(nullptr); @@ -331,8 +334,8 @@ void Video::ShmRenderer::startRendering() ///Stop the rendering loop void Video::ShmRenderer::stopRendering() { + QMutexLocker locker {mutex()}; VideoRendererManager::instance()->startStopMutex()->lock(); - QMutexLocker locker(mutex()); setRendering(false); qDebug() << "Stopping rendering on" << this; if (d_ptr->m_pTimer)