summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2019-06-28 16:23:49 +0200
committerMarc Mutz <marc.mutz@kdab.com>2019-08-01 13:15:39 +0300
commitd89a4269ce1d9729842a508d97e1f1aeaf7305ee (patch)
tree0f13df650acb187ca8b1cc05c17b9577cb3e4cab
parent435557691c3c28e9c63aa4bb5f4b9ec8fe3f8923 (diff)
Port from QMutex::Recursive to QRecursiveMutex
Also port from QMutexLocker to std::lock_guard or std::unique_lock, as the former will not support QRecursiveMutex going forward. Change-Id: I1ed1a129e2b9b77aa0a729e8cab03c673566a345 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
-rw-r--r--src/multimedia/audio/qsamplecache_p.cpp18
-rw-r--r--src/multimedia/audio/qsamplecache_p.h2
-rw-r--r--src/plugins/android/src/wrappers/jni/androidcamera.cpp91
-rw-r--r--src/plugins/common/evr/evrcustompresenter.cpp28
-rw-r--r--src/plugins/common/evr/evrcustompresenter.h2
-rw-r--r--src/plugins/directshow/common/directshowbasefilter.cpp21
-rw-r--r--src/plugins/directshow/common/directshowbasefilter.h2
-rw-r--r--src/plugins/directshow/common/directshowpin.cpp23
-rw-r--r--src/plugins/directshow/common/directshowpin.h2
-rw-r--r--src/plugins/directshow/player/videosurfacefilter.cpp35
-rw-r--r--src/plugins/directshow/player/videosurfacefilter.h2
11 files changed, 116 insertions, 110 deletions
diff --git a/src/multimedia/audio/qsamplecache_p.cpp b/src/multimedia/audio/qsamplecache_p.cpp
index 35234f8bb..8c4fdc210 100644
--- a/src/multimedia/audio/qsamplecache_p.cpp
+++ b/src/multimedia/audio/qsamplecache_p.cpp
@@ -47,6 +47,8 @@
#include <QtCore/QDebug>
//#define QT_SAMPLECACHE_DEBUG
+#include <mutex>
+
QT_BEGIN_NAMESPACE
@@ -98,7 +100,6 @@ QT_BEGIN_NAMESPACE
QSampleCache::QSampleCache(QObject *parent)
: QObject(parent)
, m_networkAccessManager(nullptr)
- , m_mutex(QMutex::Recursive)
, m_capacity(0)
, m_usage(0)
, m_loadingRefCount(0)
@@ -117,7 +118,7 @@ QNetworkAccessManager& QSampleCache::networkAccessManager()
QSampleCache::~QSampleCache()
{
- QMutexLocker m(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_loadingThread.quit();
m_loadingThread.wait();
@@ -157,7 +158,7 @@ bool QSampleCache::isLoading() const
bool QSampleCache::isCached(const QUrl &url) const
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
return m_samples.contains(url);
}
@@ -174,7 +175,7 @@ QSample* QSampleCache::requestSample(const QUrl& url)
#ifdef QT_SAMPLECACHE_DEBUG
qDebug() << "QSampleCache: request sample [" << url << "]";
#endif
- QMutexLocker locker(&m_mutex);
+ std::unique_lock<QRecursiveMutex> locker(m_mutex);
QMap<QUrl, QSample*>::iterator it = m_samples.find(url);
QSample* sample;
if (it == m_samples.end()) {
@@ -194,7 +195,7 @@ QSample* QSampleCache::requestSample(const QUrl& url)
void QSampleCache::setCapacity(qint64 capacity)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_capacity == capacity)
return;
#ifdef QT_SAMPLECACHE_DEBUG
@@ -227,7 +228,7 @@ void QSampleCache::unloadSample(QSample *sample)
// Called in both threads
void QSampleCache::refresh(qint64 usageChange)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_usage += usageChange;
if (m_capacity <= 0 || m_usage <= m_capacity)
return;
@@ -265,7 +266,7 @@ void QSampleCache::refresh(qint64 usageChange)
// Called in both threads
void QSampleCache::removeUnreferencedSample(QSample *sample)
{
- QMutexLocker m(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_staleSamples.remove(sample);
}
@@ -301,7 +302,8 @@ bool QSampleCache::notifyUnreferencedSample(QSample* sample)
if (m_loadingThread.isRunning())
m_loadingThread.wait();
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
+
if (m_capacity > 0)
return false;
m_samples.remove(sample->m_url);
diff --git a/src/multimedia/audio/qsamplecache_p.h b/src/multimedia/audio/qsamplecache_p.h
index 094e3281e..4c2384743 100644
--- a/src/multimedia/audio/qsamplecache_p.h
+++ b/src/multimedia/audio/qsamplecache_p.h
@@ -143,7 +143,7 @@ private:
QMap<QUrl, QSample*> m_samples;
QSet<QSample*> m_staleSamples;
QNetworkAccessManager *m_networkAccessManager;
- mutable QMutex m_mutex;
+ mutable QRecursiveMutex m_mutex;
qint64 m_capacity;
qint64 m_usage;
QThread m_loadingThread;
diff --git a/src/plugins/android/src/wrappers/jni/androidcamera.cpp b/src/plugins/android/src/wrappers/jni/androidcamera.cpp
index a92a3373a..2f32fb742 100644
--- a/src/plugins/android/src/wrappers/jni/androidcamera.cpp
+++ b/src/plugins/android/src/wrappers/jni/androidcamera.cpp
@@ -52,6 +52,8 @@
#include <QtCore/qmutex.h>
#include <QtMultimedia/private/qmemoryvideobuffer_p.h>
+#include <mutex>
+
QT_BEGIN_NAMESPACE
static const char QtCameraListenerClassName[] = "org/qtproject/qt5/android/multimedia/QtCameraListener";
@@ -263,7 +265,7 @@ public:
Q_INVOKABLE QStringList callParametersStringListMethod(const QByteArray &methodName);
int m_cameraId;
- QMutex m_parametersMutex;
+ QRecursiveMutex m_parametersMutex;
QSize m_previewSize;
int m_rotation;
QJNIObjectPrivate m_info;
@@ -823,8 +825,7 @@ void AndroidCamera::stopPreviewSynchronous()
}
AndroidCameraPrivate::AndroidCameraPrivate()
- : QObject(),
- m_parametersMutex(QMutex::Recursive)
+ : QObject()
{
}
@@ -911,7 +912,7 @@ int AndroidCameraPrivate::getNativeOrientation()
QSize AndroidCameraPrivate::getPreferredPreviewSizeForVideo()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return QSize();
@@ -929,7 +930,7 @@ QList<QSize> AndroidCameraPrivate::getSupportedPreviewSizes()
{
QList<QSize> list;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (m_parameters.isValid()) {
QJNIObjectPrivate sizeList = m_parameters.callObjectMethod("getSupportedPreviewSizes",
@@ -950,7 +951,7 @@ QList<QSize> AndroidCameraPrivate::getSupportedPreviewSizes()
QList<AndroidCamera::FpsRange> AndroidCameraPrivate::getSupportedPreviewFpsRange()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QJNIEnvironmentPrivate env;
@@ -987,7 +988,7 @@ QList<AndroidCamera::FpsRange> AndroidCameraPrivate::getSupportedPreviewFpsRange
AndroidCamera::FpsRange AndroidCameraPrivate::getPreviewFpsRange()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QJNIEnvironmentPrivate env;
@@ -1012,7 +1013,7 @@ AndroidCamera::FpsRange AndroidCameraPrivate::getPreviewFpsRange()
void AndroidCameraPrivate::setPreviewFpsRange(int min, int max)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1024,7 +1025,7 @@ void AndroidCameraPrivate::setPreviewFpsRange(int min, int max)
AndroidCamera::ImageFormat AndroidCameraPrivate::getPreviewFormat()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return AndroidCamera::UnknownImageFormat;
@@ -1034,7 +1035,7 @@ AndroidCamera::ImageFormat AndroidCameraPrivate::getPreviewFormat()
void AndroidCameraPrivate::setPreviewFormat(AndroidCamera::ImageFormat fmt)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1047,7 +1048,7 @@ QList<AndroidCamera::ImageFormat> AndroidCameraPrivate::getSupportedPreviewForma
{
QList<AndroidCamera::ImageFormat> list;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (m_parameters.isValid()) {
QJNIObjectPrivate formatList = m_parameters.callObjectMethod("getSupportedPreviewFormats",
@@ -1066,7 +1067,7 @@ QList<AndroidCamera::ImageFormat> AndroidCameraPrivate::getSupportedPreviewForma
QSize AndroidCameraPrivate::getPreviewSize()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return QSize();
@@ -1082,7 +1083,7 @@ QSize AndroidCameraPrivate::getPreviewSize()
void AndroidCameraPrivate::updatePreviewSize()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (m_previewSize.isValid()) {
m_parameters.callMethod<void>("setPreviewSize", "(II)V", m_previewSize.width(), m_previewSize.height());
@@ -1117,7 +1118,7 @@ void AndroidCameraPrivate::setDisplayOrientation(int degrees)
bool AndroidCameraPrivate::isZoomSupported()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return false;
@@ -1127,7 +1128,7 @@ bool AndroidCameraPrivate::isZoomSupported()
int AndroidCameraPrivate::getMaxZoom()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1137,7 +1138,7 @@ int AndroidCameraPrivate::getMaxZoom()
QList<int> AndroidCameraPrivate::getZoomRatios()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QList<int> ratios;
@@ -1159,7 +1160,7 @@ QList<int> AndroidCameraPrivate::getZoomRatios()
int AndroidCameraPrivate::getZoom()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1169,7 +1170,7 @@ int AndroidCameraPrivate::getZoom()
void AndroidCameraPrivate::setZoom(int value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1180,7 +1181,7 @@ void AndroidCameraPrivate::setZoom(int value)
QString AndroidCameraPrivate::getFlashMode()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QString value;
@@ -1196,7 +1197,7 @@ QString AndroidCameraPrivate::getFlashMode()
void AndroidCameraPrivate::setFlashMode(const QString &value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1209,7 +1210,7 @@ void AndroidCameraPrivate::setFlashMode(const QString &value)
QString AndroidCameraPrivate::getFocusMode()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QString value;
@@ -1225,7 +1226,7 @@ QString AndroidCameraPrivate::getFocusMode()
void AndroidCameraPrivate::setFocusMode(const QString &value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1241,7 +1242,7 @@ int AndroidCameraPrivate::getMaxNumFocusAreas()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return 0;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1256,7 +1257,7 @@ QList<QRect> AndroidCameraPrivate::getFocusAreas()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return areas;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (m_parameters.isValid()) {
QJNIObjectPrivate list = m_parameters.callObjectMethod("getFocusAreas",
@@ -1282,7 +1283,7 @@ void AndroidCameraPrivate::setFocusAreas(const QList<QRect> &areas)
if (QtAndroidPrivate::androidSdkVersion() < 14)
return;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1330,7 +1331,7 @@ bool AndroidCameraPrivate::isAutoExposureLockSupported()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return false;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return false;
@@ -1343,7 +1344,7 @@ bool AndroidCameraPrivate::getAutoExposureLock()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return false;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return false;
@@ -1356,7 +1357,7 @@ void AndroidCameraPrivate::setAutoExposureLock(bool toggle)
if (QtAndroidPrivate::androidSdkVersion() < 14)
return;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1370,7 +1371,7 @@ bool AndroidCameraPrivate::isAutoWhiteBalanceLockSupported()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return false;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return false;
@@ -1383,7 +1384,7 @@ bool AndroidCameraPrivate::getAutoWhiteBalanceLock()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return false;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return false;
@@ -1396,7 +1397,7 @@ void AndroidCameraPrivate::setAutoWhiteBalanceLock(bool toggle)
if (QtAndroidPrivate::androidSdkVersion() < 14)
return;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1407,7 +1408,7 @@ void AndroidCameraPrivate::setAutoWhiteBalanceLock(bool toggle)
int AndroidCameraPrivate::getExposureCompensation()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1417,7 +1418,7 @@ int AndroidCameraPrivate::getExposureCompensation()
void AndroidCameraPrivate::setExposureCompensation(int value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1428,7 +1429,7 @@ void AndroidCameraPrivate::setExposureCompensation(int value)
float AndroidCameraPrivate::getExposureCompensationStep()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1438,7 +1439,7 @@ float AndroidCameraPrivate::getExposureCompensationStep()
int AndroidCameraPrivate::getMinExposureCompensation()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1448,7 +1449,7 @@ int AndroidCameraPrivate::getMinExposureCompensation()
int AndroidCameraPrivate::getMaxExposureCompensation()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1458,7 +1459,7 @@ int AndroidCameraPrivate::getMaxExposureCompensation()
QString AndroidCameraPrivate::getSceneMode()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QString value;
@@ -1474,7 +1475,7 @@ QString AndroidCameraPrivate::getSceneMode()
void AndroidCameraPrivate::setSceneMode(const QString &value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1487,7 +1488,7 @@ void AndroidCameraPrivate::setSceneMode(const QString &value)
QString AndroidCameraPrivate::getWhiteBalance()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QString value;
@@ -1503,7 +1504,7 @@ QString AndroidCameraPrivate::getWhiteBalance()
void AndroidCameraPrivate::setWhiteBalance(const QString &value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1518,7 +1519,7 @@ void AndroidCameraPrivate::setWhiteBalance(const QString &value)
void AndroidCameraPrivate::updateRotation()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
m_parameters.callMethod<void>("setRotation", "(I)V", m_rotation);
applyParameters();
@@ -1526,7 +1527,7 @@ void AndroidCameraPrivate::updateRotation()
QList<QSize> AndroidCameraPrivate::getSupportedPictureSizes()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QList<QSize> list;
@@ -1549,7 +1550,7 @@ QList<QSize> AndroidCameraPrivate::getSupportedPictureSizes()
void AndroidCameraPrivate::setPictureSize(const QSize &size)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1560,7 +1561,7 @@ void AndroidCameraPrivate::setPictureSize(const QSize &size)
void AndroidCameraPrivate::setJpegQuality(int quality)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1669,7 +1670,7 @@ void AndroidCameraPrivate::applyParameters()
QStringList AndroidCameraPrivate::callParametersStringListMethod(const QByteArray &methodName)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QStringList stringList;
diff --git a/src/plugins/common/evr/evrcustompresenter.cpp b/src/plugins/common/evr/evrcustompresenter.cpp
index 3de8d3ac3..ef2e02220 100644
--- a/src/plugins/common/evr/evrcustompresenter.cpp
+++ b/src/plugins/common/evr/evrcustompresenter.cpp
@@ -50,6 +50,9 @@
#include <qcoreapplication.h>
#include <qmath.h>
#include <QtCore/qdebug.h>
+
+#include <mutex>
+
#include <float.h>
#include <evcode.h>
@@ -542,7 +545,6 @@ EVRCustomPresenter::EVRCustomPresenter(QAbstractVideoSurface *surface)
, m_sampleFreeCB(this, &EVRCustomPresenter::onSampleFree)
, m_refCount(1)
, m_renderState(RenderShutdown)
- , m_mutex(QMutex::Recursive)
, m_scheduler(this)
, m_tokenCounter(0)
, m_sampleNotify(false)
@@ -658,7 +660,7 @@ HRESULT EVRCustomPresenter::InitServicePointers(IMFTopologyServiceLookup *lookup
HRESULT hr = S_OK;
DWORD objectCount = 0;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
// Do not allow initializing when playing or paused.
if (isActive())
@@ -738,7 +740,7 @@ HRESULT EVRCustomPresenter::ProcessMessage(MFVP_MESSAGE_TYPE message, ULONG_PTR
{
HRESULT hr = S_OK;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
hr = checkShutdown();
if (FAILED(hr))
@@ -805,7 +807,7 @@ HRESULT EVRCustomPresenter::GetCurrentMediaType(IMFVideoMediaType **mediaType)
*mediaType = NULL;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
hr = checkShutdown();
if (FAILED(hr))
@@ -819,7 +821,7 @@ HRESULT EVRCustomPresenter::GetCurrentMediaType(IMFVideoMediaType **mediaType)
HRESULT EVRCustomPresenter::OnClockStart(MFTIME, LONGLONG clockStartOffset)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
// We cannot start after shutdown.
HRESULT hr = checkShutdown();
@@ -854,7 +856,7 @@ HRESULT EVRCustomPresenter::OnClockStart(MFTIME, LONGLONG clockStartOffset)
HRESULT EVRCustomPresenter::OnClockRestart(MFTIME)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
HRESULT hr = checkShutdown();
if (FAILED(hr))
@@ -878,7 +880,7 @@ HRESULT EVRCustomPresenter::OnClockRestart(MFTIME)
HRESULT EVRCustomPresenter::OnClockStop(MFTIME)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
HRESULT hr = checkShutdown();
if (FAILED(hr))
@@ -898,7 +900,7 @@ HRESULT EVRCustomPresenter::OnClockStop(MFTIME)
HRESULT EVRCustomPresenter::OnClockPause(MFTIME)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
// We cannot pause the clock after shutdown.
HRESULT hr = checkShutdown();
@@ -915,7 +917,7 @@ HRESULT EVRCustomPresenter::OnClockSetRate(MFTIME, float rate)
// The presenter reports its maximum rate through the IMFRateSupport interface.
// Here, we assume that the EVR honors the maximum rate.
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
HRESULT hr = checkShutdown();
if (FAILED(hr))
@@ -943,7 +945,7 @@ HRESULT EVRCustomPresenter::GetSlowestRate(MFRATE_DIRECTION, BOOL, float *rate)
if (!rate)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
HRESULT hr = checkShutdown();
@@ -960,7 +962,7 @@ HRESULT EVRCustomPresenter::GetFastestRate(MFRATE_DIRECTION direction, BOOL thin
if (!rate)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
float maxRate = 0.0f;
@@ -982,7 +984,7 @@ HRESULT EVRCustomPresenter::GetFastestRate(MFRATE_DIRECTION direction, BOOL thin
HRESULT EVRCustomPresenter::IsRateSupported(BOOL thin, float rate, float *nearestSupportedRate)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
float maxRate = 0.0f;
float nearestRate = rate; // If we support rate, that is the nearest.
@@ -1016,7 +1018,7 @@ HRESULT EVRCustomPresenter::IsRateSupported(BOOL thin, float rate, float *neares
void EVRCustomPresenter::supportedFormatsChanged()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_canRenderToSurface = false;
m_presentEngine->setHint(D3DPresentEngine::RenderToTexture, false);
diff --git a/src/plugins/common/evr/evrcustompresenter.h b/src/plugins/common/evr/evrcustompresenter.h
index bd04bd952..5b7140b58 100644
--- a/src/plugins/common/evr/evrcustompresenter.h
+++ b/src/plugins/common/evr/evrcustompresenter.h
@@ -339,7 +339,7 @@ private:
RenderState m_renderState;
FrameStep m_frameStep;
- QMutex m_mutex;
+ QRecursiveMutex m_mutex;
// Samples and scheduling
Scheduler m_scheduler; // Manages scheduling of samples.
diff --git a/src/plugins/directshow/common/directshowbasefilter.cpp b/src/plugins/directshow/common/directshowbasefilter.cpp
index dfea2460f..3a13dce0e 100644
--- a/src/plugins/directshow/common/directshowbasefilter.cpp
+++ b/src/plugins/directshow/common/directshowbasefilter.cpp
@@ -41,13 +41,12 @@
#include "directshowpinenum.h"
+#include <mutex>
+
QT_BEGIN_NAMESPACE
DirectShowBaseFilter::DirectShowBaseFilter()
- : m_mutex(QMutex::Recursive)
-{
-
-}
+ = default;
DirectShowBaseFilter::~DirectShowBaseFilter()
{
@@ -78,7 +77,7 @@ HRESULT DirectShowBaseFilter::NotifyEvent(long eventCode, LONG_PTR eventParam1,
HRESULT DirectShowBaseFilter::Run(REFERENCE_TIME tStart)
{
Q_UNUSED(tStart)
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_startTime = tStart;
@@ -95,7 +94,7 @@ HRESULT DirectShowBaseFilter::Run(REFERENCE_TIME tStart)
HRESULT DirectShowBaseFilter::Pause()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_state == State_Stopped) {
const QList<DirectShowPin *> pinList = pins();
@@ -115,7 +114,7 @@ HRESULT DirectShowBaseFilter::Pause()
HRESULT DirectShowBaseFilter::Stop()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
HRESULT hr = S_OK;
@@ -142,7 +141,7 @@ HRESULT DirectShowBaseFilter::GetState(DWORD dwMilliSecsTimeout, FILTER_STATE *p
if (!pState) {
return E_POINTER;
} else {
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
*pState = m_state;
@@ -152,7 +151,7 @@ HRESULT DirectShowBaseFilter::GetState(DWORD dwMilliSecsTimeout, FILTER_STATE *p
HRESULT DirectShowBaseFilter::SetSyncSource(IReferenceClock *pClock)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_clock)
m_clock->Release();
@@ -192,7 +191,7 @@ HRESULT DirectShowBaseFilter::FindPin(LPCWSTR Id, IPin **ppPin)
if (!ppPin || !Id)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
const QList<DirectShowPin *> pinList = pins();
for (DirectShowPin *pin : pinList) {
if (pin->name() == QStringView(Id)) {
@@ -208,7 +207,7 @@ HRESULT DirectShowBaseFilter::FindPin(LPCWSTR Id, IPin **ppPin)
HRESULT DirectShowBaseFilter::JoinFilterGraph(IFilterGraph *pGraph, LPCWSTR pName)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_filterName = QString::fromWCharArray(pName);
m_graph = pGraph;
diff --git a/src/plugins/directshow/common/directshowbasefilter.h b/src/plugins/directshow/common/directshowbasefilter.h
index ea5b8fafe..ce30891d7 100644
--- a/src/plugins/directshow/common/directshowbasefilter.h
+++ b/src/plugins/directshow/common/directshowbasefilter.h
@@ -78,7 +78,7 @@ public:
STDMETHODIMP QueryVendorInfo(LPWSTR *pVendorInfo) override;
protected:
- QMutex m_mutex;
+ QRecursiveMutex m_mutex;
FILTER_STATE m_state = State_Stopped;
IFilterGraph *m_graph = nullptr;
IReferenceClock *m_clock = nullptr;
diff --git a/src/plugins/directshow/common/directshowpin.cpp b/src/plugins/directshow/common/directshowpin.cpp
index 390d410a4..d8129748c 100644
--- a/src/plugins/directshow/common/directshowpin.cpp
+++ b/src/plugins/directshow/common/directshowpin.cpp
@@ -45,11 +45,12 @@
#include <qdebug.h>
+#include <mutex>
+
QT_BEGIN_NAMESPACE
DirectShowPin::DirectShowPin(DirectShowBaseFilter *filter, const QString &name, PIN_DIRECTION direction)
- : m_mutex(QMutex::Recursive)
- , m_filter(filter)
+ : m_filter(filter)
, m_name(name)
, m_direction(direction)
{
@@ -63,7 +64,7 @@ HRESULT DirectShowPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
return E_POINTER;
HRESULT hr = E_FAIL;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_peerPin)
return VFW_E_ALREADY_CONNECTED;
@@ -169,7 +170,7 @@ HRESULT DirectShowPin::ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *
if (!pConnector || !pmt)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_peerPin)
return VFW_E_ALREADY_CONNECTED;
@@ -206,7 +207,7 @@ HRESULT DirectShowPin::ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *
HRESULT DirectShowPin::Disconnect()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_filter->state() != State_Stopped)
return VFW_E_NOT_STOPPED;
@@ -232,7 +233,7 @@ HRESULT DirectShowPin::ConnectedTo(IPin **ppPin)
if (!ppPin)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (!m_peerPin) {
*ppPin = nullptr;
return VFW_E_NOT_CONNECTED;
@@ -247,7 +248,7 @@ HRESULT DirectShowPin::ConnectionMediaType(AM_MEDIA_TYPE *pmt)
if (!pmt)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (!m_peerPin) {
DirectShowMediaType::init(pmt);
return VFW_E_NOT_CONNECTED;
@@ -531,14 +532,14 @@ HRESULT DirectShowInputPin::EndOfStream()
HRESULT DirectShowInputPin::BeginFlush()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_flushing = true;
return S_OK;
}
HRESULT DirectShowInputPin::EndFlush()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_flushing = false;
m_inErrorState = false;
return S_OK;
@@ -549,7 +550,7 @@ HRESULT DirectShowInputPin::GetAllocator(IMemAllocator **ppAllocator)
if (!ppAllocator)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (!m_allocator) {
m_allocator = com_new<IMemAllocator>(CLSID_MemoryAllocator);;
@@ -570,7 +571,7 @@ HRESULT DirectShowInputPin::NotifyAllocator(IMemAllocator *pAllocator, BOOL bRea
if (!pAllocator)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_allocator)
m_allocator->Release();
diff --git a/src/plugins/directshow/common/directshowpin.h b/src/plugins/directshow/common/directshowpin.h
index bb5a07ad7..160191ef3 100644
--- a/src/plugins/directshow/common/directshowpin.h
+++ b/src/plugins/directshow/common/directshowpin.h
@@ -96,7 +96,7 @@ public:
protected:
DirectShowPin(DirectShowBaseFilter *filter, const QString &name, PIN_DIRECTION direction);
- QMutex m_mutex;
+ QRecursiveMutex m_mutex;
DirectShowBaseFilter *m_filter;
QString m_name;
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;
diff --git a/src/plugins/directshow/player/videosurfacefilter.h b/src/plugins/directshow/player/videosurfacefilter.h
index f11d015f1..9e56f4b65 100644
--- a/src/plugins/directshow/player/videosurfacefilter.h
+++ b/src/plugins/directshow/player/videosurfacefilter.h
@@ -141,7 +141,7 @@ private:
QList<GUID> m_supportedTypes;
QReadWriteLock m_typesLock;
- QMutex m_renderMutex;
+ QRecursiveMutex m_renderMutex;
bool m_running = false;
IMediaSample *m_pendingSample = nullptr;
REFERENCE_TIME m_pendingSampleEndTime = 0;