diff options
author | Bartlomiej Moskal <bartlomiej.moskal@qt.io> | 2024-03-27 09:07:14 +0100 |
---|---|---|
committer | Bartlomiej Moskal <bartlomiej.moskal@qt.io> | 2024-04-26 15:04:57 +0200 |
commit | 562fc1ea0ae2feb76cba0ff55ed2acc92944a3f4 (patch) | |
tree | 156fa1415d37d07107b06defc62eaca55f348396 /src/plugins | |
parent | c8a20a5c99138d2fd064668bd0cccc1d8cadc75b (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.cpp | 12 |
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; } |