diff options
-rw-r--r-- | src/multimedia/audio/qsamplecache_p.cpp | 18 | ||||
-rw-r--r-- | src/multimedia/audio/qsamplecache_p.h | 2 | ||||
-rw-r--r-- | src/plugins/android/src/wrappers/jni/androidcamera.cpp | 91 | ||||
-rw-r--r-- | src/plugins/common/evr/evrcustompresenter.cpp | 28 | ||||
-rw-r--r-- | src/plugins/common/evr/evrcustompresenter.h | 2 | ||||
-rw-r--r-- | src/plugins/directshow/common/directshowbasefilter.cpp | 21 | ||||
-rw-r--r-- | src/plugins/directshow/common/directshowbasefilter.h | 2 | ||||
-rw-r--r-- | src/plugins/directshow/common/directshowpin.cpp | 23 | ||||
-rw-r--r-- | src/plugins/directshow/common/directshowpin.h | 2 | ||||
-rw-r--r-- | src/plugins/directshow/player/videosurfacefilter.cpp | 35 | ||||
-rw-r--r-- | src/plugins/directshow/player/videosurfacefilter.h | 2 |
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; |