diff options
author | Samuel Mira <samuel.mira@qt.io> | 2022-07-13 17:05:28 +0300 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-07-22 07:28:40 +0000 |
commit | 8b7dd02e4f1666eec511a2f8b7125c141629e13d (patch) | |
tree | af468641db099b11c968450311cf1aa4816aa6b3 | |
parent | fd38190be1496f9b48d7d7356f353a1c157f7282 (diff) | |
download | qtmultimedia-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.cpp | 8 | ||||
-rw-r--r-- | src/plugins/multimedia/android/mediacapture/qandroidcapturesession.cpp | 5 |
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) |