summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorBartlomiej Moskal <bartlomiej.moskal@qt.io>2024-03-27 09:07:14 +0100
committerBartlomiej Moskal <bartlomiej.moskal@qt.io>2024-04-26 15:04:57 +0200
commit562fc1ea0ae2feb76cba0ff55ed2acc92944a3f4 (patch)
tree156fa1415d37d07107b06defc62eaca55f348396 /src/plugins
parentc8a20a5c99138d2fd064668bd0cccc1d8cadc75b (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.7 6.5 Change-Id: If30ef071f0140bfde4e08afe43bbb9e392dc6e82 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
Diffstat (limited to 'src/plugins')
-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;
}