summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVal Doroshchuk <valentyn.doroshchuk@qt.io>2019-02-05 11:52:01 +0100
committerVaL Doroshchuk <valentyn.doroshchuk@qt.io>2019-02-06 07:59:10 +0000
commit5c8ed3a67384bc22eb1a876ed2fb29063657a675 (patch)
tree329cba8e36bf1ff8df4b0c78f9ca2c7b75241bf8
parentdee506f70536dd10f3e00c42f685ead9283433b9 (diff)
downloadqtmultimedia-5c8ed3a67384bc22eb1a876ed2fb29063657a675.tar.gz
DirectShow: Fix crash when camera is being destroyed
If a camera is going to be destroyed, a service plugin releases media service, (which releases ds camera session) and might call CoUninitialize. This leads to a crash when DirectShowSampleGrabber is destroyed after releasing the camera. Added a fix to release the sample grabber together with camera session. Task-number: QTBUG-73461 Change-Id: I8e518d0242d983c8d2bb00c30ad87c7e8e1e2c93 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
-rw-r--r--src/plugins/directshow/camera/dscamerasession.cpp5
1 files changed, 1 insertions, 4 deletions
diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp
index d23b7f1e2..5ab9f67d8 100644
--- a/src/plugins/directshow/camera/dscamerasession.cpp
+++ b/src/plugins/directshow/camera/dscamerasession.cpp
@@ -439,9 +439,6 @@ bool DSCameraSession::unload()
setStatus(QCamera::UnloadingStatus);
- m_previewSampleGrabber->deleteLater();
- m_previewSampleGrabber = nullptr;
-
m_needsHorizontalMirroring = false;
m_supportedViewfinderSettings.clear();
m_supportedFormats.clear();
@@ -808,7 +805,7 @@ bool DSCameraSession::createFilterGraph()
// Sample grabber filter
if (!m_previewSampleGrabber) {
- m_previewSampleGrabber = new DirectShowSampleGrabber;
+ m_previewSampleGrabber = new DirectShowSampleGrabber(this);
connect(m_previewSampleGrabber, &DirectShowSampleGrabber::bufferAvailable,
this, &DSCameraSession::onFrameAvailable, Qt::DirectConnection);
}