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
This commit is contained in:
MoreOrLessSoftware 2025-03-24 13:17:10 -07:00 committed by Cameron Gutman
parent 9c9bfd8428
commit e807a52cfa
3 changed files with 62 additions and 29 deletions

View File

@ -281,11 +281,13 @@ Flickable {
StreamingPreferences.width = selectedWidth StreamingPreferences.width = selectedWidth
StreamingPreferences.height = selectedHeight StreamingPreferences.height = selectedHeight
StreamingPreferences.bitrateKbps = StreamingPreferences.getDefaultBitrate(StreamingPreferences.width, if (StreamingPreferences.autoAdjustBitrate) {
StreamingPreferences.height, StreamingPreferences.bitrateKbps = StreamingPreferences.getDefaultBitrate(StreamingPreferences.width,
StreamingPreferences.fps, StreamingPreferences.height,
StreamingPreferences.enableYUV444); StreamingPreferences.fps,
slider.value = StreamingPreferences.bitrateKbps StreamingPreferences.enableYUV444);
slider.value = StreamingPreferences.bitrateKbps
}
} }
lastIndexValue = currentIndex lastIndexValue = currentIndex
@ -447,11 +449,13 @@ Flickable {
if (StreamingPreferences.fps !== selectedFps) { if (StreamingPreferences.fps !== selectedFps) {
StreamingPreferences.fps = selectedFps StreamingPreferences.fps = selectedFps
StreamingPreferences.bitrateKbps = StreamingPreferences.getDefaultBitrate(StreamingPreferences.width, if (StreamingPreferences.autoAdjustBitrate) {
StreamingPreferences.height, StreamingPreferences.bitrateKbps = StreamingPreferences.getDefaultBitrate(StreamingPreferences.width,
StreamingPreferences.fps, StreamingPreferences.height,
StreamingPreferences.enableYUV444); StreamingPreferences.fps,
slider.value = StreamingPreferences.bitrateKbps StreamingPreferences.enableYUV444);
slider.value = StreamingPreferences.bitrateKbps
}
} }
lastIndexValue = currentIndex lastIndexValue = currentIndex
@ -678,26 +682,47 @@ Flickable {
wrapMode: Text.Wrap wrapMode: Text.Wrap
} }
Slider { Row {
id: slider width: parent.width
spacing: 5
value: StreamingPreferences.bitrateKbps Slider {
id: slider
stepSize: 500 value: StreamingPreferences.bitrateKbps
from : 500
to: StreamingPreferences.unlockBitrate ? 500000 : 150000
snapMode: "SnapOnRelease" stepSize: 500
width: Math.min(bitrateDesc.implicitWidth, parent.width) from : 500
to: StreamingPreferences.unlockBitrate ? 500000 : 150000
onValueChanged: { snapMode: "SnapOnRelease"
bitrateTitle.text = qsTr("Video bitrate: %1 Mbps").arg(value / 1000.0) width: Math.min(bitrateDesc.implicitWidth, parent.width - (resetBitrateButton.visible ? resetBitrateButton.width + parent.spacing : 0))
StreamingPreferences.bitrateKbps = value
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: { Button {
// Refresh the text after translations change id: resetBitrateButton
languageChanged.connect(valueChanged) 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. // This is called on init, so only reset to default bitrate when checked state changes.
if (StreamingPreferences.enableYUV444 != checked) { if (StreamingPreferences.enableYUV444 != checked) {
StreamingPreferences.enableYUV444 = checked StreamingPreferences.enableYUV444 = checked
StreamingPreferences.bitrateKbps = StreamingPreferences.getDefaultBitrate(StreamingPreferences.width, if (StreamingPreferences.autoAdjustBitrate) {
StreamingPreferences.height, StreamingPreferences.bitrateKbps = StreamingPreferences.getDefaultBitrate(StreamingPreferences.width,
StreamingPreferences.fps, StreamingPreferences.height,
StreamingPreferences.enableYUV444); StreamingPreferences.fps,
slider.value = StreamingPreferences.bitrateKbps StreamingPreferences.enableYUV444);
slider.value = StreamingPreferences.bitrateKbps
}
} }
} }

View File

@ -16,6 +16,7 @@
#define SER_FPS "fps" #define SER_FPS "fps"
#define SER_BITRATE "bitrate" #define SER_BITRATE "bitrate"
#define SER_UNLOCK_BITRATE "unlockbitrate" #define SER_UNLOCK_BITRATE "unlockbitrate"
#define SER_AUTOADJUSTBITRATE "autoadjustbitrate"
#define SER_FULLSCREEN "fullscreen" #define SER_FULLSCREEN "fullscreen"
#define SER_VSYNC "vsync" #define SER_VSYNC "vsync"
#define SER_GAMEOPTS "gameopts" #define SER_GAMEOPTS "gameopts"
@ -122,6 +123,7 @@ void StreamingPreferences::reload()
enableYUV444 = settings.value(SER_YUV444, false).toBool(); enableYUV444 = settings.value(SER_YUV444, false).toBool();
bitrateKbps = settings.value(SER_BITRATE, getDefaultBitrate(width, height, fps, enableYUV444)).toInt(); bitrateKbps = settings.value(SER_BITRATE, getDefaultBitrate(width, height, fps, enableYUV444)).toInt();
unlockBitrate = settings.value(SER_UNLOCK_BITRATE, false).toBool(); unlockBitrate = settings.value(SER_UNLOCK_BITRATE, false).toBool();
autoAdjustBitrate = settings.value(SER_AUTOADJUSTBITRATE, true).toBool();
enableVsync = settings.value(SER_VSYNC, true).toBool(); enableVsync = settings.value(SER_VSYNC, true).toBool();
gameOptimizations = settings.value(SER_GAMEOPTS, true).toBool(); gameOptimizations = settings.value(SER_GAMEOPTS, true).toBool();
playAudioOnHost = settings.value(SER_HOSTAUDIO, false).toBool(); playAudioOnHost = settings.value(SER_HOSTAUDIO, false).toBool();
@ -312,6 +314,7 @@ void StreamingPreferences::save()
settings.setValue(SER_FPS, fps); settings.setValue(SER_FPS, fps);
settings.setValue(SER_BITRATE, bitrateKbps); settings.setValue(SER_BITRATE, bitrateKbps);
settings.setValue(SER_UNLOCK_BITRATE, unlockBitrate); settings.setValue(SER_UNLOCK_BITRATE, unlockBitrate);
settings.setValue(SER_AUTOADJUSTBITRATE, autoAdjustBitrate);
settings.setValue(SER_VSYNC, enableVsync); settings.setValue(SER_VSYNC, enableVsync);
settings.setValue(SER_GAMEOPTS, gameOptimizations); settings.setValue(SER_GAMEOPTS, gameOptimizations);
settings.setValue(SER_HOSTAUDIO, playAudioOnHost); settings.setValue(SER_HOSTAUDIO, playAudioOnHost);

View File

@ -110,6 +110,7 @@ public:
Q_PROPERTY(int fps MEMBER fps NOTIFY displayModeChanged) Q_PROPERTY(int fps MEMBER fps NOTIFY displayModeChanged)
Q_PROPERTY(int bitrateKbps MEMBER bitrateKbps NOTIFY bitrateChanged) Q_PROPERTY(int bitrateKbps MEMBER bitrateKbps NOTIFY bitrateChanged)
Q_PROPERTY(bool unlockBitrate MEMBER unlockBitrate NOTIFY unlockBitrateChanged) 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 enableVsync MEMBER enableVsync NOTIFY enableVsyncChanged)
Q_PROPERTY(bool gameOptimizations MEMBER gameOptimizations NOTIFY gameOptimizationsChanged) Q_PROPERTY(bool gameOptimizations MEMBER gameOptimizations NOTIFY gameOptimizationsChanged)
Q_PROPERTY(bool playAudioOnHost MEMBER playAudioOnHost NOTIFY playAudioOnHostChanged) Q_PROPERTY(bool playAudioOnHost MEMBER playAudioOnHost NOTIFY playAudioOnHostChanged)
@ -149,6 +150,7 @@ public:
int fps; int fps;
int bitrateKbps; int bitrateKbps;
bool unlockBitrate; bool unlockBitrate;
bool autoAdjustBitrate;
bool enableVsync; bool enableVsync;
bool gameOptimizations; bool gameOptimizations;
bool playAudioOnHost; bool playAudioOnHost;
@ -185,6 +187,7 @@ signals:
void displayModeChanged(); void displayModeChanged();
void bitrateChanged(); void bitrateChanged();
void unlockBitrateChanged(); void unlockBitrateChanged();
void autoAdjustBitrateChanged();
void enableVsyncChanged(); void enableVsyncChanged();
void gameOptimizationsChanged(); void gameOptimizationsChanged();
void playAudioOnHostChanged(); void playAudioOnHostChanged();