diff options
-rw-r--r-- | src/plugins/multimedia/darwin/avfvideobuffer.mm | 1 | ||||
-rw-r--r-- | src/plugins/multimedia/darwin/avfvideosink.mm | 1 | ||||
-rw-r--r-- | src/plugins/multimedia/darwin/avfvideosink_p.h | 4 |
3 files changed, 6 insertions, 0 deletions
diff --git a/src/plugins/multimedia/darwin/avfvideobuffer.mm b/src/plugins/multimedia/darwin/avfvideobuffer.mm index 13776056f..6dab857cc 100644 --- a/src/plugins/multimedia/darwin/avfvideobuffer.mm +++ b/src/plugins/multimedia/darwin/avfvideobuffer.mm @@ -136,6 +136,7 @@ quint64 AVFVideoBuffer::textureHandle(int plane) const height = textureDescription->heightForPlane(height, plane); // Create a CoreVideo pixel buffer backed Metal texture image from the texture cache. + QMutexLocker locker(sink->textureCacheMutex()); auto ret = CVMetalTextureCacheCreateTextureFromImage( kCFAllocatorDefault, sink->cvMetalTextureCache, diff --git a/src/plugins/multimedia/darwin/avfvideosink.mm b/src/plugins/multimedia/darwin/avfvideosink.mm index cb43f234b..e4ace6084 100644 --- a/src/plugins/multimedia/darwin/avfvideosink.mm +++ b/src/plugins/multimedia/darwin/avfvideosink.mm @@ -100,6 +100,7 @@ void AVFVideoSinkInterface::setVideoSink(AVFVideoSink *sink) void AVFVideoSinkInterface::setRhi(QRhi *rhi) { + QMutexLocker locker(&m_textureCacheMutex); if (m_rhi == rhi) return; freeTextureCaches(); diff --git a/src/plugins/multimedia/darwin/avfvideosink_p.h b/src/plugins/multimedia/darwin/avfvideosink_p.h index da0bf2e3a..bc91c2265 100644 --- a/src/plugins/multimedia/darwin/avfvideosink_p.h +++ b/src/plugins/multimedia/darwin/avfvideosink_p.h @@ -15,6 +15,7 @@ // We mean it. // +#include <QtCore/QMutex> #include "private/qplatformvideosink_p.h" Q_FORWARD_DECLARE_OBJC_CLASS(CALayer); @@ -66,6 +67,8 @@ public: virtual void setLayer(CALayer *layer); virtual void setOutputSettings(NSDictionary *settings); + QMutex *textureCacheMutex() { return &m_textureCacheMutex; } + QRhi *rhi() const { return m_rhi; } void updateLayerBounds(); @@ -87,6 +90,7 @@ protected: QRhi *m_rhi = nullptr; CALayer *m_layer = nullptr; NSDictionary *m_outputSettings = nullptr; + QMutex m_textureCacheMutex; }; |