summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Mira <samuel.mira@qt.io>2022-07-13 17:05:28 +0300
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-07-22 07:28:40 +0000
commit8b7dd02e4f1666eec511a2f8b7125c141629e13d (patch)
treeaf468641db099b11c968450311cf1aa4816aa6b3
parentfd38190be1496f9b48d7d7356f353a1c157f7282 (diff)
downloadqtmultimedia-8b7dd02e4f1666eec511a2f8b7125c141629e13d.tar.gz
Android: Fix changes in preview resolution after taking a photo
This patch fixes the changes in preview resolution after taking photos. As a side effect also prevents freezing the photo on the declarative camera example. Fixes: QTBUG-102772 Change-Id: Id8d6e3c63002f275d651c7f1aba59324f96f3857 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io> (cherry picked from commit 579a0423b8b3c62c582a706d338a9eb1bcd788a3) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/multimedia/android/mediacapture/qandroidcamerasession.cpp8
-rw-r--r--src/plugins/multimedia/android/mediacapture/qandroidcapturesession.cpp5
2 files changed, 8 insertions, 5 deletions
diff --git a/src/plugins/multimedia/android/mediacapture/qandroidcamerasession.cpp b/src/plugins/multimedia/android/mediacapture/qandroidcamerasession.cpp
index 5b851fd8b..d96b13238 100644
--- a/src/plugins/multimedia/android/mediacapture/qandroidcamerasession.cpp
+++ b/src/plugins/multimedia/android/mediacapture/qandroidcamerasession.cpp
@@ -233,6 +233,8 @@ void QAndroidCameraSession::applyResolution(const QSize &captureSize, bool resta
// -- adjust resolution
QSize adjustedViewfinderResolution;
+ const QList<QSize> previewSizes = m_camera->getSupportedPreviewSizes();
+
const bool validCaptureSize = captureSize.width() > 0 && captureSize.height() > 0;
if (validCaptureSize
&& m_camera->getPreferredPreviewSizeForVideo().isEmpty()) {
@@ -244,8 +246,6 @@ void QAndroidCameraSession::applyResolution(const QSize &captureSize, bool resta
if (validCaptureSize)
captureAspectRatio = qreal(captureSize.width()) / qreal(captureSize.height());
- const QList<QSize> previewSizes = m_camera->getSupportedPreviewSizes();
-
if (validCaptureSize) {
// search for viewfinder resolution with the same aspect ratio
qreal minAspectDiff = 1;
@@ -292,7 +292,8 @@ void QAndroidCameraSession::applyResolution(const QSize &captureSize, bool resta
// fix the resolution of output based on the orientation
QSize outputResolution = adjustedViewfinderResolution;
const int rotation = currentCameraRotation();
- if (rotation == 90 || rotation == 270)
+ // only transpose if it's valid for the preview
+ if ((rotation == 90 || rotation == 270) && previewSizes.contains(outputResolution.transposed()))
outputResolution.transpose();
if (currentViewfinderResolution != outputResolution
@@ -576,7 +577,6 @@ int QAndroidCameraSession::captureImage()
m_currentImageCaptureId = newImageCaptureId;
- applyImageSettings();
applyResolution(m_actualImageSettings.resolution());
m_camera->takePicture();
diff --git a/src/plugins/multimedia/android/mediacapture/qandroidcapturesession.cpp b/src/plugins/multimedia/android/mediacapture/qandroidcapturesession.cpp
index a05ce710d..b8a7cbeb3 100644
--- a/src/plugins/multimedia/android/mediacapture/qandroidcapturesession.cpp
+++ b/src/plugins/multimedia/android/mediacapture/qandroidcapturesession.cpp
@@ -124,7 +124,6 @@ void QAndroidCaptureSession::start(QMediaEncoderSettings &settings, const QUrl &
// Set audio/video sources
if (validCameraSession) {
m_cameraSession->camera()->stopPreviewSynchronous();
- m_cameraSession->applyResolution(settings.videoResolution(), false);
m_cameraSession->camera()->unlock();
m_mediaRecorder->setCamera(m_cameraSession->camera());
@@ -398,6 +397,10 @@ void QAndroidCaptureSession::onCameraOpened()
std::sort(m_supportedResolutions.begin(), m_supportedResolutions.end(), qt_sizeLessThan);
std::sort(m_supportedFramerates.begin(), m_supportedFramerates.end());
+
+ QMediaEncoderSettings defaultSettings;
+ applySettings(defaultSettings);
+ m_cameraSession->applyResolution(defaultSettings.videoResolution());
}
QAndroidCaptureSession::CaptureProfile QAndroidCaptureSession::getProfile(int id)