diff options
author | Samuel Mira <samuel.mira@qt.io> | 2022-07-28 18:53:20 +0300 |
---|---|---|
committer | Samuel Mira <samuel.mira@qt.io> | 2022-07-29 10:21:03 +0300 |
commit | 4b1ba8a4aaa42fc54ee83f2463735452dd3c8fc7 (patch) | |
tree | a9db32ba70ea5a74d3b46a9abd614b6494c39e6b | |
parent | cd5a5156105ab53c11bea66275d74a4dbf721dbd (diff) | |
download | qtmultimedia-4b1ba8a4aaa42fc54ee83f2463735452dd3c8fc7.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)
-rw-r--r-- | src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp | 8 | ||||
-rw-r--r-- | src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp | 5 |
2 files changed, 8 insertions, 5 deletions
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp index 1c60789c2..2ee2b9a70 100644 --- a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp +++ b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp @@ -269,6 +269,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()) { @@ -280,8 +282,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; @@ -328,7 +328,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 @@ -613,7 +614,6 @@ int QAndroidCameraSession::captureImage() m_currentImageCaptureId = newImageCaptureId; - applyImageSettings(); applyResolution(m_actualImageSettings.resolution()); m_camera->takePicture(); diff --git a/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp b/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp index d274fc9e9..4dad80dce 100644 --- a/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp +++ b/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp @@ -160,7 +160,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()); @@ -434,6 +433,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) |