diff options
author | Samuel Mira <samuel.mira@qt.io> | 2021-09-29 14:32:16 +0300 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-10-01 06:52:18 +0000 |
commit | 3ab23fe9daec468fe90ec59971910a0ec8e65686 (patch) | |
tree | d7aee7b6814d04fae4ec3658067cb47e2b75481f | |
parent | 6b398eceb28820982fd9eab2a1f9ff2cf4a7fc97 (diff) | |
download | qtmultimedia-3ab23fe9daec468fe90ec59971910a0ec8e65686.tar.gz |
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
Change-Id: Ic90297bd0962fecd6a420ef6e84164b1df1a3bce
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
(cherry picked from commit 29f829183b28b950c0396c26d7d50a03353796de)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp | 20 | ||||
-rw-r--r-- | src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h | 3 |
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 596752bc0..6491e3296 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); } @@ -745,14 +747,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; |