summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Mira <samuel.mira@qt.io>2022-07-28 18:53:20 +0300
committerSamuel Mira <samuel.mira@qt.io>2022-07-29 10:21:03 +0300
commit4b1ba8a4aaa42fc54ee83f2463735452dd3c8fc7 (patch)
treea9db32ba70ea5a74d3b46a9abd614b6494c39e6b
parentcd5a5156105ab53c11bea66275d74a4dbf721dbd (diff)
downloadqtmultimedia-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.cpp8
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp5
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)