From 26cc5cecd566d85dabbfd70b3468e98c808fd7f4 Mon Sep 17 00:00:00 2001 From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> Date: Tue, 8 Nov 2022 13:40:25 -0500 Subject: [PATCH] videosettings: restart the camera at the selected resolution Change-Id: I6c7942bda27377c6b83946c855a43c1a09f900ff GitLab: #872 --- src/app/commoncomponents/LocalVideo.qml | 6 +++--- src/app/settingsview/components/VideoSettings.qml | 2 +- src/app/videodevices.cpp | 10 ++++++++-- src/app/videodevices.h | 2 +- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/app/commoncomponents/LocalVideo.qml b/src/app/commoncomponents/LocalVideo.qml index 435ff9930..178ccf771 100644 --- a/src/app/commoncomponents/LocalVideo.qml +++ b/src/app/commoncomponents/LocalVideo.qml @@ -27,13 +27,13 @@ VideoView { crop: true - function startWithId(id) { + function startWithId(id, force = false) { if (id.length === 0) { VideoDevices.stopDevice(rendererId) rendererId = id } else { - if (rendererId !== id) - rendererId = VideoDevices.startDevice(id) + const forceRestart = rendererId === id + rendererId = VideoDevices.startDevice(id, forceRestart) } } } diff --git a/src/app/settingsview/components/VideoSettings.qml b/src/app/settingsview/components/VideoSettings.qml index fee9be760..26aaa6189 100644 --- a/src/app/settingsview/components/VideoSettings.qml +++ b/src/app/settingsview/components/VideoSettings.qml @@ -40,7 +40,7 @@ ColumnLayout { if (!visible) { return } - previewWidget.startWithId(VideoDevices.getDefaultDevice()) + previewWidget.startWithId(VideoDevices.getDefaultDevice(), force) } onVisibleChanged: { diff --git a/src/app/videodevices.cpp b/src/app/videodevices.cpp index f872cc87a..42b3d648c 100644 --- a/src/app/videodevices.cpp +++ b/src/app/videodevices.cpp @@ -236,13 +236,19 @@ VideoDevices::getDefaultDevice() } QString -VideoDevices::startDevice(const QString& id) +VideoDevices::startDevice(const QString& id, bool force) { if (id.isEmpty()) return {}; auto& avModel = lrcInstance_->avModel(); if (avModel.hasRenderer(id)) { - return id; + // If the device is already started AND we're NOT trying to + // force a format change, we can do nothing and return the + // renderer id. + if (!force) { + return id; + } + avModel.stopPreview(id); } deviceOpen_ = true; return avModel.startPreview(id); diff --git a/src/app/videodevices.h b/src/app/videodevices.h index 0ab4d5afe..84cccfefd 100644 --- a/src/app/videodevices.h +++ b/src/app/videodevices.h @@ -135,7 +135,7 @@ public: Q_INVOKABLE void setDefaultDevice(int index); Q_INVOKABLE const QString getDefaultDevice(); - Q_INVOKABLE QString startDevice(const QString& deviceId); + Q_INVOKABLE QString startDevice(const QString& deviceId, bool force = false); Q_INVOKABLE void stopDevice(const QString& deviceId); Q_INVOKABLE void setDefaultDeviceRes(int index); Q_INVOKABLE void setDefaultDeviceFps(int index); -- GitLab