summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré de la Rocha <andre.rocha@qt.io>2022-03-15 14:20:13 -0300
committerAndré de la Rocha <andre.rocha@qt.io>2022-03-17 12:20:31 -0300
commit8543287b45ddd1e7b0749a8d32fa81e383c27cba (patch)
treef9dd6e6945b06a354a6a4494986dfaf9a4458064
parent0558f4c8352a5654939cbd4531bb818d40eb241f (diff)
downloadqtmultimedia-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.cpp19
-rw-r--r--src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder_p.h1
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