summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Mira <samuel.mira@qt.io>2021-09-09 18:39:56 +0300
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-09-10 16:57:10 +0000
commit5205f17aef80c3b4f9f7e4d5bc88f62ec7601ccf (patch)
treea52cabfdb5ef57606c97c91c34ac13485d07436a
parent6a1434363c68eae8d0f105555dcfd52566425552 (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>
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp20
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h5
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp4
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()