summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBartlomiej Moskal <bartlomiej.moskal@qt.io>2024-03-27 09:07:14 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-04-26 15:10:11 +0000
commit34f96c6d5187d3ab9199b60bf803bfb5c9b9b259 (patch)
treed858f08887b7effd261ac625a46cb8f9854a4ad6
parentf50893d8bb141ee3672c54c9e1576075c557e37f (diff)
Android: Restart camera after QCameraFormat changes
Before this change, QCameraFormat was not immediately updated. It was remembered and updated only after restarting the camera. Because of this, the camera continued to generate frames with the old resolution. When recording the video, each frame had to be scaled to obtain the desired resolution. Task-number: QTBUG-122140 Pick-to: 6.5 Change-Id: If30ef071f0140bfde4e08afe43bbb9e392dc6e82 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> (cherry picked from commit 562fc1ea0ae2feb76cba0ff55ed2acc92944a3f4) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/multimedia/ffmpeg/qandroidcamera.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/plugins/multimedia/ffmpeg/qandroidcamera.cpp b/src/plugins/multimedia/ffmpeg/qandroidcamera.cpp
index df583ce0e..97448c707 100644
--- a/src/plugins/multimedia/ffmpeg/qandroidcamera.cpp
+++ b/src/plugins/multimedia/ffmpeg/qandroidcamera.cpp
@@ -332,10 +332,18 @@ void QAndroidCamera::setState(QAndroidCamera::State newState)
bool QAndroidCamera::setCameraFormat(const QCameraFormat &format)
{
- if (!format.isNull() && !m_cameraDevice.videoFormats().contains(format))
+ const auto chosenFormat = format.isNull() ? getDefaultCameraFormat() : format;
+
+ if (chosenFormat == m_cameraFormat || !m_cameraDevice.videoFormats().contains(chosenFormat))
return false;
- m_cameraFormat = format.isNull() ? getDefaultCameraFormat() : format;
+ m_cameraFormat = chosenFormat;
+
+ if (isActive()) {
+ // Restart the camera to set new camera format
+ setActive(false);
+ setActive(true);
+ }
return true;
}