From 8543287b45ddd1e7b0749a8d32fa81e383c27cba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20de=20la=20Rocha?= Date: Tue, 15 Mar 2022 14:20:13 -0300 Subject: Windows: Restore device session state when ending media recordings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 (cherry picked from commit 152530f9295ec7580b93c68640cca09484dbeb73) Reviewed-by: André de la Rocha --- .../windows/mediacapture/qwindowsmediaencoder.cpp | 19 ++++++++++++++----- .../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 -- cgit v1.2.1