summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Mira <samuel.mira@qt.io>2021-09-29 14:32:16 +0300
committerSamuel Mira <samuel.mira@qt.io>2021-10-01 06:36:45 +0000
commit29f829183b28b950c0396c26d7d50a03353796de (patch)
tree77d7753241055a949dc38cbb2d0d3e80be95e5bd
parent665060d740b37094d87f9bd71a54d95aa5ced548 (diff)
Fix recorder example crash while switching between apps
The onApplicationStateChanged m_state was being changed on setActive rewriting the state that was supposed to save Fixes: QTBUG-96944 Pick-to: 6.2 Change-Id: Ic90297bd0962fecd6a420ef6e84164b1df1a3bce Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp20
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h3
2 files changed, 13 insertions, 10 deletions
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp
index e2b7cf521..096701535 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp
@@ -108,15 +108,17 @@ void QAndroidCameraSession::setActive(bool active)
if (m_active == active)
return;
- m_active = active;
-
// If the application is inactive, the camera shouldn't be started. Save the desired state
// instead and it will be set when the application becomes active.
- if (qApp->applicationState() == Qt::ApplicationActive)
- setActiveHelper(active);
- else
+ if (active && qApp->applicationState() == Qt::ApplicationInactive) {
+ m_isStateSaved = true;
m_savedState = active;
+ return;
+ }
+ m_isStateSaved = false;
+ m_active = active;
+ setActiveHelper(m_active);
emit activeChanged(m_active);
}
@@ -753,14 +755,14 @@ void QAndroidCameraSession::onApplicationStateChanged(Qt::ApplicationState state
case Qt::ApplicationInactive:
if (!m_keepActive && m_active) {
m_savedState = m_active;
- close();
setActive(false);
+ m_isStateSaved = true;
}
break;
case Qt::ApplicationActive:
- if (m_savedState != -1) {
- setActiveHelper(m_savedState);
- m_savedState = -1;
+ if (m_isStateSaved) {
+ setActive(m_savedState);
+ m_isStateSaved = false;
}
break;
default:
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h b/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h
index 995c0528b..8c3bb5b63 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h
@@ -169,7 +169,8 @@ private:
QAndroidVideoOutput *m_videoOutput;
bool m_active = false;
- int m_savedState = -1;
+ bool m_isStateSaved = false;
+ bool m_savedState = false;
bool m_previewStarted;
bool m_rotationEnabled = false;