diff options
Diffstat (limited to 'src/plugins/directshow/player/videosurfacefilter.cpp')
-rw-r--r-- | src/plugins/directshow/player/videosurfacefilter.cpp | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/src/plugins/directshow/player/videosurfacefilter.cpp b/src/plugins/directshow/player/videosurfacefilter.cpp index 8dd18dc1b..4b7afc266 100644 --- a/src/plugins/directshow/player/videosurfacefilter.cpp +++ b/src/plugins/directshow/player/videosurfacefilter.cpp @@ -47,6 +47,8 @@ #include <QtCore/qloggingcategory.h> #include <qabstractvideosurface.h> +#include <mutex> + #include <initguid.h> QT_BEGIN_NAMESPACE @@ -154,7 +156,7 @@ HRESULT VideoSurfaceInputPin::Disconnect() HRESULT VideoSurfaceInputPin::EndOfStream() { QMutexLocker lock(&m_videoSurfaceFilter->m_mutex); - QMutexLocker renderLock(&m_videoSurfaceFilter->m_renderMutex); + const std::lock_guard<QRecursiveMutex> renderLocker(m_videoSurfaceFilter->m_renderMutex); HRESULT hr = DirectShowInputPin::EndOfStream(); if (hr != S_OK) @@ -167,7 +169,7 @@ HRESULT VideoSurfaceInputPin::BeginFlush() { QMutexLocker lock(&m_videoSurfaceFilter->m_mutex); { - QMutexLocker renderLock(&m_videoSurfaceFilter->m_renderMutex); + const std::lock_guard<QRecursiveMutex> renderLocker(m_videoSurfaceFilter->m_renderMutex); DirectShowInputPin::BeginFlush(); m_videoSurfaceFilter->BeginFlush(); } @@ -179,7 +181,7 @@ HRESULT VideoSurfaceInputPin::BeginFlush() HRESULT VideoSurfaceInputPin::EndFlush() { QMutexLocker lock(&m_videoSurfaceFilter->m_mutex); - QMutexLocker renderLock(&m_videoSurfaceFilter->m_renderMutex); + const std::lock_guard<QRecursiveMutex> renderLocker(m_videoSurfaceFilter->m_renderMutex); HRESULT hr = m_videoSurfaceFilter->EndFlush(); if (SUCCEEDED(hr)) @@ -207,7 +209,7 @@ HRESULT VideoSurfaceInputPin::Receive(IMediaSample *pMediaSample) if (m_videoSurfaceFilter->state() != State_Stopped && !m_flushing && !m_inErrorState) { m_videoSurfaceFilter->NotifyEvent(EC_ERRORABORT, hr, 0); { - QMutexLocker renderLocker(&m_videoSurfaceFilter->m_renderMutex); + const std::lock_guard<QRecursiveMutex> renderLocker(m_videoSurfaceFilter->m_renderMutex); if (m_videoSurfaceFilter->m_running && !m_videoSurfaceFilter->m_EOSDelivered) m_videoSurfaceFilter->notifyEOS(); } @@ -223,7 +225,6 @@ VideoSurfaceFilter::VideoSurfaceFilter(QAbstractVideoSurface *surface, DirectSho : QObject(parent) , m_loop(loop) , m_surface(surface) - , m_renderMutex(QMutex::Recursive) , m_renderEvent(CreateEvent(nullptr, FALSE, FALSE, nullptr)) , m_flushEvent(CreateEvent(nullptr, TRUE, FALSE, nullptr)) { @@ -366,7 +367,7 @@ HRESULT VideoSurfaceFilter::Run(REFERENCE_TIME tStart) allocator->Release(); } - QMutexLocker renderLocker(&m_renderMutex); + const std::lock_guard<QRecursiveMutex> renderLocker(m_renderMutex); m_running = true; @@ -443,7 +444,7 @@ HRESULT VideoSurfaceFilter::Stop() HRESULT VideoSurfaceFilter::EndOfStream() { - QMutexLocker renderLocker(&m_renderMutex); + const std::lock_guard<QRecursiveMutex> renderLocker(m_renderMutex); qCDebug(qLcRenderFilter, "EndOfStream"); @@ -499,7 +500,7 @@ HRESULT VideoSurfaceFilter::Receive(IMediaSample *pMediaSample) } { - QMutexLocker locker(&m_renderMutex); + const std::lock_guard<QRecursiveMutex> locker(m_renderMutex); if (m_pendingSample || m_EOS) return E_UNEXPECTED; @@ -543,13 +544,13 @@ HRESULT VideoSurfaceFilter::Receive(IMediaSample *pMediaSample) return S_OK; } - QMutexLocker renderLock(&m_renderMutex); + std::unique_lock<QRecursiveMutex> renderLocker(m_renderMutex); // Flush or pause might have happened just before the lock if (m_pendingSample && m_running) { - renderLock.unlock(); + renderLocker.unlock(); renderPendingSample(); - renderLock.relock(); + renderLocker.lock(); } else { qCDebug(qLcRenderFilter, " discarding sample (%p)", pMediaSample); } @@ -602,7 +603,7 @@ void VideoSurfaceFilter::unscheduleSample() void VideoSurfaceFilter::clearPendingSample() { - QMutexLocker locker(&m_renderMutex); + const std::lock_guard<QRecursiveMutex> locker(m_renderMutex); if (m_pendingSample) { qCDebug(qLcRenderFilter, "clearPendingSample"); m_pendingSample->Release(); @@ -618,7 +619,7 @@ void QT_WIN_CALLBACK EOSTimerCallback(UINT, UINT, DWORD_PTR dwUser, DWORD_PTR, D void VideoSurfaceFilter::onEOSTimerTimeout() { - QMutexLocker locker(&m_renderMutex); + const std::lock_guard<QRecursiveMutex> locker(m_renderMutex); if (m_EOSTimer) { m_EOSTimer = 0; @@ -628,7 +629,7 @@ void VideoSurfaceFilter::onEOSTimerTimeout() void VideoSurfaceFilter::checkEOS() { - QMutexLocker locker(&m_renderMutex); + const std::lock_guard<QRecursiveMutex> locker(m_renderMutex); if (!m_EOS || m_EOSDelivered || m_EOSTimer) return; @@ -663,7 +664,7 @@ void VideoSurfaceFilter::checkEOS() void VideoSurfaceFilter::notifyEOS() { - QMutexLocker locker(&m_renderMutex); + const std::lock_guard<QRecursiveMutex> locker(m_renderMutex); if (!m_running) return; @@ -679,7 +680,7 @@ void VideoSurfaceFilter::resetEOS() { resetEOSTimer(); - QMutexLocker locker(&m_renderMutex); + const std::lock_guard<QRecursiveMutex> locker(m_renderMutex); if (m_EOS) qCDebug(qLcRenderFilter, "resetEOS (delivered=%s)", m_EOSDelivered ? "true" : "false"); @@ -754,7 +755,7 @@ void VideoSurfaceFilter::renderPendingSample() m_loop->postEvent(this, new QEvent(QEvent::Type(RenderSample))); m_waitSurface.wait(&m_mutex); } else { - QMutexLocker locker(&m_renderMutex); + const std::lock_guard<QRecursiveMutex> locker(m_renderMutex); if (!m_pendingSample) return; |