diff options
author | André de la Rocha <andre.rocha@qt.io> | 2022-03-15 14:20:13 -0300 |
---|---|---|
committer | André de la Rocha <andre.rocha@qt.io> | 2022-03-17 12:20:31 -0300 |
commit | 8543287b45ddd1e7b0749a8d32fa81e383c27cba (patch) | |
tree | f9dd6e6945b06a354a6a4494986dfaf9a4458064 | |
parent | 0558f4c8352a5654939cbd4531bb818d40eb241f (diff) | |
download | qtmultimedia-8543287b45ddd1e7b0749a8d32fa81e383c27cba.tar.gz |
Windows: Restore device session state when ending media recordings
The device session active/inactive status should be restored after the
end of media recordings, otherwise the input devices may remain in use
and cause other issues.
Fixes: QTBUG-101434
Fixes: QTBUG-101591
Change-Id: I35c8ed7a36556472b7c015e6fd2044aac40314eb
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
(cherry picked from commit 152530f9295ec7580b93c68640cca09484dbeb73)
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
-rw-r--r-- | src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder.cpp | 19 | ||||
-rw-r--r-- | src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder_p.h | 1 |
2 files changed, 15 insertions, 5 deletions
diff --git a/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder.cpp b/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder.cpp index 82cb407b6..ee2ba3c6a 100644 --- a/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder.cpp +++ b/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder.cpp @@ -81,12 +81,17 @@ void QWindowsMediaEncoder::record(QMediaEncoderSettings &settings) if (m_state != QMediaRecorder::StoppedState) return; - m_mediaDeviceSession->setActive(true); + m_sessionWasActive = m_mediaDeviceSession->isActive(); - if (!m_mediaDeviceSession->isActive() && !m_mediaDeviceSession->isActivating()) { - error(QMediaRecorder::ResourceError, - QMediaRecorderPrivate::msgFailedStartRecording()); - return; + if (!m_sessionWasActive) { + + m_mediaDeviceSession->setActive(true); + + if (!m_mediaDeviceSession->isActivating()) { + error(QMediaRecorder::ResourceError, + QMediaRecorderPrivate::msgFailedStartRecording()); + return; + } } const auto audioOnly = settings.videoCodec() == QMediaFormat::VideoCodec::Unspecified; @@ -137,6 +142,8 @@ void QWindowsMediaEncoder::stop() { if (m_mediaDeviceSession && m_state != QMediaRecorder::StoppedState) m_mediaDeviceSession->stopRecording(); + if (!m_sessionWasActive) + m_mediaDeviceSession->setActive(false); } @@ -214,6 +221,8 @@ void QWindowsMediaEncoder::onStreamingError(int errorCode) if (m_state != QMediaRecorder::StoppedState) { m_mediaDeviceSession->stopRecording(); + if (!m_sessionWasActive) + m_mediaDeviceSession->setActive(false); } } diff --git a/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder_p.h b/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder_p.h index 9269e0748..22295791a 100644 --- a/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder_p.h +++ b/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder_p.h @@ -99,6 +99,7 @@ private: QString m_fileName; QMediaMetaData m_metaData; qint64 m_duration = 0; + bool m_sessionWasActive = false; }; QT_END_NAMESPACE |