diff options
author | Samuel Mira <samuel.mira@qt.io> | 2021-09-09 18:39:56 +0300 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-09-10 16:57:10 +0000 |
commit | 5205f17aef80c3b4f9f7e4d5bc88f62ec7601ccf (patch) | |
tree | a52cabfdb5ef57606c97c91c34ac13485d07436a | |
parent | 6a1434363c68eae8d0f105555dcfd52566425552 (diff) |
Disable update orientation when recording on Android
In Android, when the orientation is enabled it will restart the preview
Doing so when the mediaRecorder is recording will crash the app when the
recording stops. So this patch adds a flag in qandroidcamerasession to
prevent updating orientation.
Change-Id: Ibe22035ecb39e95481087e53212fb10c4a6153c5
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
(cherry picked from commit ccb199bba91882981341a2539f2dace2d874c967)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
3 files changed, 24 insertions, 5 deletions
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp index d89e494b1..11cfd73f3 100644 --- a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp +++ b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp @@ -78,9 +78,11 @@ QAndroidCameraSession::QAndroidCameraSession(QObject *parent) this, &QAndroidCameraSession::onApplicationStateChanged); auto screen = qApp->primaryScreen(); - if (screen) - connect(screen, &QScreen::orientationChanged, - this, &QAndroidCameraSession::updateOrientation); + if (screen) { + connect(screen, &QScreen::orientationChanged, this, + &QAndroidCameraSession::updateOrientation); + enableRotation(); + } } } @@ -433,9 +435,19 @@ void QAndroidCameraSession::setImageSettings(const QImageEncoderSettings &settin applyResolution(m_actualImageSettings.resolution()); } +void QAndroidCameraSession::enableRotation() +{ + m_rotationEnabled = true; +} + +void QAndroidCameraSession::disableRotation() +{ + m_rotationEnabled = false; +} + void QAndroidCameraSession::updateOrientation() { - if (!m_camera) + if (!m_camera || !m_rotationEnabled) return; m_camera->setDisplayOrientation(currentCameraRotation()); diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h b/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h index fd225ae04..fc3efef26 100644 --- a/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h +++ b/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h @@ -112,6 +112,9 @@ public: void setVideoSink(QVideoSink *surface); + void disableRotation(); + void enableRotation(); + Q_SIGNALS: void activeChanged(bool); void error(int error, const QString &errorString); @@ -168,6 +171,8 @@ private: int m_savedState = -1; bool m_previewStarted; + bool m_rotationEnabled = false; + QVideoSink *m_sink = nullptr; QAndroidTextureVideoOutput *m_textureOutput = nullptr; diff --git a/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp b/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp index ac2dad0d6..913a75ee9 100644 --- a/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp +++ b/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp @@ -219,6 +219,8 @@ void QAndroidCaptureSession::start(QMediaEncoderSettings &settings, const QUrl & m_mediaRecorder->setSurfaceTexture(m_cameraSession->videoOutput()->surfaceTexture()); else if (m_cameraSession->videoOutput()->surfaceHolder()) m_mediaRecorder->setSurfaceHolder(m_cameraSession->videoOutput()->surfaceHolder()); + + m_cameraSession->disableRotation(); } if (!m_mediaRecorder->prepare()) { @@ -362,7 +364,6 @@ void QAndroidCaptureSession::restartViewfinder() { if (!m_cameraSession) return; - m_cameraSession->camera()->reconnect(); // This is not necessary on most devices, but it crashes on some if we don't stop the @@ -376,6 +377,7 @@ void QAndroidCaptureSession::restartViewfinder() m_cameraSession->camera()->startPreview(); m_cameraSession->setReadyForCapture(true); + m_cameraSession->enableRotation(); } void QAndroidCaptureSession::updateDuration() |