diff options
author | Val Doroshchuk <valentyn.doroshchuk@qt.io> | 2019-02-05 11:52:01 +0100 |
---|---|---|
committer | VaL Doroshchuk <valentyn.doroshchuk@qt.io> | 2019-02-06 07:59:10 +0000 |
commit | 5c8ed3a67384bc22eb1a876ed2fb29063657a675 (patch) | |
tree | 329cba8e36bf1ff8df4b0c78f9ca2c7b75241bf8 /src | |
parent | dee506f70536dd10f3e00c42f685ead9283433b9 (diff) |
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>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/directshow/camera/dscamerasession.cpp | 5 |
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); } |