summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorArtem Dyomin <artem.dyomin@qt.io>2023-01-25 14:39:21 +0100
committerArtem Dyomin <artem.dyomin@qt.io>2023-01-31 13:43:34 +0000
commit365ef2fcc34ae3a269dd019b232e3dc9c9550f60 (patch)
tree2da6ada88e93e330ce8ef4078f009f3fe7c9c690 /src/plugins
parent2fd190a23e1d24a26de1196d96d926df7358beb2 (diff)
Fix random crash with windows backend
It's not clear how to reproduce the crash, but we have crash reports. The assumption is the crash is a side effect of used deleteLater for a few objects in the windows backend design. In theory, objects can have enqueued events that are handled between deleteLater() and delete, at this time QAudioSink is already deleted. As a result, I propose using qpointer in order to check if the object exists. Task-number: QTBUG-108693 Pick-to: 6.5 6.4 Change-Id: I0c974b1faa6f0a434e95781f22984b532671daa4 Reviewed-by: Lars Knoll <lars@knoll.priv.no>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/multimedia/windows/evr/evrcustompresenter_p.h3
-rw-r--r--src/plugins/multimedia/windows/evr/evrd3dpresentengine_p.h3
-rw-r--r--src/plugins/multimedia/windows/player/mfvideorenderercontrol_p.h5
3 files changed, 7 insertions, 4 deletions
diff --git a/src/plugins/multimedia/windows/evr/evrcustompresenter_p.h b/src/plugins/multimedia/windows/evr/evrcustompresenter_p.h
index 590285be5..5d49c1db9 100644
--- a/src/plugins/multimedia/windows/evr/evrcustompresenter_p.h
+++ b/src/plugins/multimedia/windows/evr/evrcustompresenter_p.h
@@ -22,6 +22,7 @@
#include <qrect.h>
#include <qvideoframeformat.h>
#include <qvideosink.h>
+#include <qpointer.h>
#include <d3d9.h>
#include <dxva2api.h>
@@ -347,7 +348,7 @@ private:
IMediaEventSink *m_mediaEventSink; // The EVR's event-sink interface.
IMFMediaType *m_mediaType; // Output media type
- QVideoSink *m_videoSink;
+ QPointer<QVideoSink> m_videoSink;
bool m_canRenderToSurface;
qint64 m_positionOffset; // Seek position in microseconds.
QRect m_cropRect; // Video crop rectangle
diff --git a/src/plugins/multimedia/windows/evr/evrd3dpresentengine_p.h b/src/plugins/multimedia/windows/evr/evrd3dpresentengine_p.h
index c9ad5e9c1..b3be7f560 100644
--- a/src/plugins/multimedia/windows/evr/evrd3dpresentengine_p.h
+++ b/src/plugins/multimedia/windows/evr/evrd3dpresentengine_p.h
@@ -19,6 +19,7 @@
#include <QSize>
#include <QVideoFrameFormat>
#include <private/qwindowsiupointer_p.h>
+#include <qpointer.h>
#include <d3d9.h>
@@ -130,7 +131,7 @@ private:
QVideoFrameFormat m_surfaceFormat;
- class QVideoSink *m_sink = nullptr;
+ QPointer<QVideoSink> m_sink;
bool m_useTextureRendering = false;
#if QT_CONFIG(opengl)
WglNvDxInterop m_wglNvDxInterop;
diff --git a/src/plugins/multimedia/windows/player/mfvideorenderercontrol_p.h b/src/plugins/multimedia/windows/player/mfvideorenderercontrol_p.h
index 09b7acc2d..3944ba7b6 100644
--- a/src/plugins/multimedia/windows/player/mfvideorenderercontrol_p.h
+++ b/src/plugins/multimedia/windows/player/mfvideorenderercontrol_p.h
@@ -15,7 +15,8 @@
// We mean it.
//
-#include "qobject.h"
+#include <qobject.h>
+#include <qpointer.h>
#include <qrect.h>
#include <mfapi.h>
#include <mfidl.h>
@@ -48,7 +49,7 @@ private Q_SLOTS:
private:
void clear();
- QVideoSink *m_sink = nullptr;
+ QPointer<QVideoSink> m_sink;
IMFActivate *m_currentActivate = nullptr;
IMFSampleGrabberSinkCallback *m_callback = nullptr;