summaryrefslogtreecommitdiffstats
path: root/src/multimedia
diff options
context:
space:
mode:
authorSamuel Mira <samuel.mira@qt.io>2021-09-09 18:39:56 +0300
committerSamuel Mira <samuel.mira@qt.io>2021-09-10 11:31:29 +0300
commitccb199bba91882981341a2539f2dace2d874c967 (patch)
treebde2b93512aa0cedfd24f08cadc85aa2e731cdc6 /src/multimedia
parent3c6f6ae6b49ae397e1071245bea9d94a0cf919e8 (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. Pick-to: 6.2 6.2.0 Change-Id: Ibe22035ecb39e95481087e53212fb10c4a6153c5 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'src/multimedia')
-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()