From e807a52cfa476960fad0cc877622f21adef1c5a2 Mon Sep 17 00:00:00 2001 From: MoreOrLessSoftware Date: Mon, 24 Mar 2025 13:17:10 -0700 Subject: [PATCH] Add bitrate auto-adjustment toggle and reset button This change adds a 'Use Default' button next to the bitrate slider that resets the bitrate to the default value for the current resolution/FPS. It also implements an autoAdjustBitrate setting that controls whether the bitrate is automatically updated when resolution/FPS/YUV444 settings change. - When the user manually adjusts the bitrate slider, autoAdjustBitrate is set to false - When the user clicks the 'Use Default' button, autoAdjustBitrate is set to true - Bitrate is only updated automatically when settings change if autoAdjustBitrate is true --- app/gui/SettingsView.qml | 85 ++++++++++++++++++--------- app/settings/streamingpreferences.cpp | 3 + app/settings/streamingpreferences.h | 3 + 3 files changed, 62 insertions(+), 29 deletions(-) diff --git a/app/gui/SettingsView.qml b/app/gui/SettingsView.qml index 30b9ed78..c3d32f3e 100644 --- a/app/gui/SettingsView.qml +++ b/app/gui/SettingsView.qml @@ -281,11 +281,13 @@ Flickable { StreamingPreferences.width = selectedWidth StreamingPreferences.height = selectedHeight - StreamingPreferences.bitrateKbps = StreamingPreferences.getDefaultBitrate(StreamingPreferences.width, - StreamingPreferences.height, - StreamingPreferences.fps, - StreamingPreferences.enableYUV444); - slider.value = StreamingPreferences.bitrateKbps + if (StreamingPreferences.autoAdjustBitrate) { + StreamingPreferences.bitrateKbps = StreamingPreferences.getDefaultBitrate(StreamingPreferences.width, + StreamingPreferences.height, + StreamingPreferences.fps, + StreamingPreferences.enableYUV444); + slider.value = StreamingPreferences.bitrateKbps + } } lastIndexValue = currentIndex @@ -447,11 +449,13 @@ Flickable { if (StreamingPreferences.fps !== selectedFps) { StreamingPreferences.fps = selectedFps - StreamingPreferences.bitrateKbps = StreamingPreferences.getDefaultBitrate(StreamingPreferences.width, - StreamingPreferences.height, - StreamingPreferences.fps, - StreamingPreferences.enableYUV444); - slider.value = StreamingPreferences.bitrateKbps + if (StreamingPreferences.autoAdjustBitrate) { + StreamingPreferences.bitrateKbps = StreamingPreferences.getDefaultBitrate(StreamingPreferences.width, + StreamingPreferences.height, + StreamingPreferences.fps, + StreamingPreferences.enableYUV444); + slider.value = StreamingPreferences.bitrateKbps + } } lastIndexValue = currentIndex @@ -678,26 +682,47 @@ Flickable { wrapMode: Text.Wrap } - Slider { - id: slider + Row { + width: parent.width + spacing: 5 - value: StreamingPreferences.bitrateKbps + Slider { + id: slider - stepSize: 500 - from : 500 - to: StreamingPreferences.unlockBitrate ? 500000 : 150000 + value: StreamingPreferences.bitrateKbps - snapMode: "SnapOnRelease" - width: Math.min(bitrateDesc.implicitWidth, parent.width) + stepSize: 500 + from : 500 + to: StreamingPreferences.unlockBitrate ? 500000 : 150000 - onValueChanged: { - bitrateTitle.text = qsTr("Video bitrate: %1 Mbps").arg(value / 1000.0) - StreamingPreferences.bitrateKbps = value + snapMode: "SnapOnRelease" + width: Math.min(bitrateDesc.implicitWidth, parent.width - (resetBitrateButton.visible ? resetBitrateButton.width + parent.spacing : 0)) + + onValueChanged: { + bitrateTitle.text = qsTr("Video bitrate: %1 Mbps").arg(value / 1000.0) + StreamingPreferences.bitrateKbps = value + } + + onMoved: { + StreamingPreferences.autoAdjustBitrate = false + } + + Component.onCompleted: { + // Refresh the text after translations change + languageChanged.connect(valueChanged) + } } - Component.onCompleted: { - // Refresh the text after translations change - languageChanged.connect(valueChanged) + Button { + id: resetBitrateButton + text: qsTr("Use Default (%1 Mbps)").arg(StreamingPreferences.getDefaultBitrate(StreamingPreferences.width, StreamingPreferences.height, StreamingPreferences.fps, StreamingPreferences.enableYUV444) / 1000.0) + visible: StreamingPreferences.bitrateKbps !== StreamingPreferences.getDefaultBitrate(StreamingPreferences.width, StreamingPreferences.height, StreamingPreferences.fps, StreamingPreferences.enableYUV444) + onClicked: { + var defaultBitrate = StreamingPreferences.getDefaultBitrate(StreamingPreferences.width, StreamingPreferences.height, StreamingPreferences.fps, StreamingPreferences.enableYUV444) + StreamingPreferences.bitrateKbps = defaultBitrate + StreamingPreferences.autoAdjustBitrate = true + slider.value = defaultBitrate + } } } @@ -1616,11 +1641,13 @@ Flickable { // This is called on init, so only reset to default bitrate when checked state changes. if (StreamingPreferences.enableYUV444 != checked) { StreamingPreferences.enableYUV444 = checked - StreamingPreferences.bitrateKbps = StreamingPreferences.getDefaultBitrate(StreamingPreferences.width, - StreamingPreferences.height, - StreamingPreferences.fps, - StreamingPreferences.enableYUV444); - slider.value = StreamingPreferences.bitrateKbps + if (StreamingPreferences.autoAdjustBitrate) { + StreamingPreferences.bitrateKbps = StreamingPreferences.getDefaultBitrate(StreamingPreferences.width, + StreamingPreferences.height, + StreamingPreferences.fps, + StreamingPreferences.enableYUV444); + slider.value = StreamingPreferences.bitrateKbps + } } } diff --git a/app/settings/streamingpreferences.cpp b/app/settings/streamingpreferences.cpp index bb34f626..114a7992 100644 --- a/app/settings/streamingpreferences.cpp +++ b/app/settings/streamingpreferences.cpp @@ -16,6 +16,7 @@ #define SER_FPS "fps" #define SER_BITRATE "bitrate" #define SER_UNLOCK_BITRATE "unlockbitrate" +#define SER_AUTOADJUSTBITRATE "autoadjustbitrate" #define SER_FULLSCREEN "fullscreen" #define SER_VSYNC "vsync" #define SER_GAMEOPTS "gameopts" @@ -122,6 +123,7 @@ void StreamingPreferences::reload() enableYUV444 = settings.value(SER_YUV444, false).toBool(); bitrateKbps = settings.value(SER_BITRATE, getDefaultBitrate(width, height, fps, enableYUV444)).toInt(); unlockBitrate = settings.value(SER_UNLOCK_BITRATE, false).toBool(); + autoAdjustBitrate = settings.value(SER_AUTOADJUSTBITRATE, true).toBool(); enableVsync = settings.value(SER_VSYNC, true).toBool(); gameOptimizations = settings.value(SER_GAMEOPTS, true).toBool(); playAudioOnHost = settings.value(SER_HOSTAUDIO, false).toBool(); @@ -312,6 +314,7 @@ void StreamingPreferences::save() settings.setValue(SER_FPS, fps); settings.setValue(SER_BITRATE, bitrateKbps); settings.setValue(SER_UNLOCK_BITRATE, unlockBitrate); + settings.setValue(SER_AUTOADJUSTBITRATE, autoAdjustBitrate); settings.setValue(SER_VSYNC, enableVsync); settings.setValue(SER_GAMEOPTS, gameOptimizations); settings.setValue(SER_HOSTAUDIO, playAudioOnHost); diff --git a/app/settings/streamingpreferences.h b/app/settings/streamingpreferences.h index 3ca216ff..e591920c 100644 --- a/app/settings/streamingpreferences.h +++ b/app/settings/streamingpreferences.h @@ -110,6 +110,7 @@ public: Q_PROPERTY(int fps MEMBER fps NOTIFY displayModeChanged) Q_PROPERTY(int bitrateKbps MEMBER bitrateKbps NOTIFY bitrateChanged) Q_PROPERTY(bool unlockBitrate MEMBER unlockBitrate NOTIFY unlockBitrateChanged) + Q_PROPERTY(bool autoAdjustBitrate MEMBER autoAdjustBitrate NOTIFY autoAdjustBitrateChanged) Q_PROPERTY(bool enableVsync MEMBER enableVsync NOTIFY enableVsyncChanged) Q_PROPERTY(bool gameOptimizations MEMBER gameOptimizations NOTIFY gameOptimizationsChanged) Q_PROPERTY(bool playAudioOnHost MEMBER playAudioOnHost NOTIFY playAudioOnHostChanged) @@ -149,6 +150,7 @@ public: int fps; int bitrateKbps; bool unlockBitrate; + bool autoAdjustBitrate; bool enableVsync; bool gameOptimizations; bool playAudioOnHost; @@ -185,6 +187,7 @@ signals: void displayModeChanged(); void bitrateChanged(); void unlockBitrateChanged(); + void autoAdjustBitrateChanged(); void enableVsyncChanged(); void gameOptimizationsChanged(); void playAudioOnHostChanged();