Merge pull request #5168 from 21pages/opt

opt bitrate change
This commit is contained in:
RustDesk 2023-07-28 10:57:05 +08:00 committed by GitHub
commit ac2b9a6fc1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 54 additions and 13 deletions

View File

@ -947,7 +947,9 @@ showSetOSPassword(
Function()? closeCallback, Function()? closeCallback,
) async { ) async {
final controller = TextEditingController(); final controller = TextEditingController();
osPassword ??= await bind.sessionGetOption(sessionId: sessionId, arg: 'os-password') ?? ''; osPassword ??=
await bind.sessionGetOption(sessionId: sessionId, arg: 'os-password') ??
'';
var autoLogin = var autoLogin =
await bind.sessionGetOption(sessionId: sessionId, arg: 'auto-login') != await bind.sessionGetOption(sessionId: sessionId, arg: 'auto-login') !=
''; '';
@ -957,6 +959,7 @@ showSetOSPassword(
close(); close();
if (closeCallback != null) closeCallback(); if (closeCallback != null) closeCallback();
} }
submit() { submit() {
var text = controller.text.trim(); var text = controller.text.trim();
bind.sessionPeerOption( bind.sessionPeerOption(
@ -1220,7 +1223,8 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async {
qualityInitValue = qualityInitValue =
quality != null && quality.isNotEmpty ? quality[0].toDouble() : 50.0; quality != null && quality.isNotEmpty ? quality[0].toDouble() : 50.0;
const qualityMinValue = 10.0; const qualityMinValue = 10.0;
const qualityMaxValue = 100.0; const qualityMoreThresholdValue = 100.0;
const qualityMaxValue = 2000.0;
if (qualityInitValue < qualityMinValue) { if (qualityInitValue < qualityMinValue) {
qualityInitValue = qualityMinValue; qualityInitValue = qualityMinValue;
} }
@ -1228,6 +1232,8 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async {
qualityInitValue = qualityMaxValue; qualityInitValue = qualityMaxValue;
} }
final RxDouble qualitySliderValue = RxDouble(qualityInitValue); final RxDouble qualitySliderValue = RxDouble(qualityInitValue);
final moreQualityInitValue = qualityInitValue > qualityMoreThresholdValue;
final RxBool moreQualityChecked = RxBool(moreQualityInitValue);
final debouncerQuality = Debouncer<double>( final debouncerQuality = Debouncer<double>(
Duration(milliseconds: 1000), Duration(milliseconds: 1000),
onChanged: (double v) { onChanged: (double v) {
@ -1242,7 +1248,9 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async {
child: Slider( child: Slider(
value: qualitySliderValue.value, value: qualitySliderValue.value,
min: qualityMinValue, min: qualityMinValue,
max: qualityMaxValue, max: moreQualityChecked.value
? qualityMaxValue
: qualityMoreThresholdValue,
divisions: 18, divisions: 18,
onChanged: (double value) { onChanged: (double value) {
qualitySliderValue.value = value; qualitySliderValue.value = value;
@ -1256,11 +1264,32 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async {
style: const TextStyle(fontSize: 15), style: const TextStyle(fontSize: 15),
)), )),
Expanded( Expanded(
flex: 2, flex: 1,
child: Text( child: Text(
translate('Bitrate'), translate('Bitrate'),
style: const TextStyle(fontSize: 15), style: const TextStyle(fontSize: 15),
)), )),
Expanded(
flex: 1,
child: Row(
children: [
Checkbox(
value: moreQualityChecked.value,
onChanged: (bool? value) {
moreQualityChecked.value = value!;
if (!value &&
qualitySliderValue.value >
qualityMoreThresholdValue) {
qualitySliderValue.value = qualityMoreThresholdValue;
debouncerQuality.value = qualityMoreThresholdValue;
}
},
).marginOnly(right: 5),
Expanded(
child: Text(translate('More')),
)
],
)),
], ],
)); ));
// fps // fps

View File

@ -1078,7 +1078,7 @@ impl PeerConfig {
D: de::Deserializer<'de>, D: de::Deserializer<'de>,
{ {
let v: Vec<i32> = de::Deserialize::deserialize(deserializer)?; let v: Vec<i32> = de::Deserialize::deserialize(deserializer)?;
if v.len() == 1 && v[0] >= 10 && v[0] <= 100 { if v.len() == 1 && v[0] >= 10 && v[0] <= 0xFFF {
Ok(v) Ok(v)
} else { } else {
Ok(Self::default_custom_image_quality()) Ok(Self::default_custom_image_quality())
@ -1402,7 +1402,7 @@ impl UserDefaultConfig {
"codec-preference" => { "codec-preference" => {
self.get_string(key, "auto", vec!["vp8", "vp9", "av1", "h264", "h265"]) self.get_string(key, "auto", vec!["vp8", "vp9", "av1", "h264", "h265"])
} }
"custom_image_quality" => self.get_double_string(key, 50.0, 10.0, 100.0), "custom_image_quality" => self.get_double_string(key, 50.0, 10.0, 0xFFF as f64),
"custom-fps" => self.get_double_string(key, 30.0, 5.0, 120.0), "custom-fps" => self.get_double_string(key, 30.0, 5.0, 120.0),
_ => self _ => self
.options .options

View File

@ -344,7 +344,7 @@ impl AomEncoder {
fn calc_q_values(b: u32) -> (u32, u32) { fn calc_q_values(b: u32) -> (u32, u32) {
let b = std::cmp::min(b, 200); let b = std::cmp::min(b, 200);
let q_min1: i32 = 24; let q_min1: i32 = 24;
let q_min2 = 12; let q_min2 = 5;
let q_max1 = 45; let q_max1 = 45;
let q_max2 = 25; let q_max2 = 25;

View File

@ -303,7 +303,7 @@ impl VpxEncoder {
fn calc_q_values(b: u32) -> (u32, u32) { fn calc_q_values(b: u32) -> (u32, u32) {
let b = std::cmp::min(b, 200); let b = std::cmp::min(b, 200);
let q_min1: i32 = 36; let q_min1: i32 = 36;
let q_min2 = 12; let q_min2 = 0;
let q_max1 = 56; let q_max1 = 56;
let q_max2 = 37; let q_max2 = 37;

View File

@ -299,9 +299,9 @@ impl VideoQoS {
} else if q == ImageQuality::Best.value() { } else if q == ImageQuality::Best.value() {
Quality::Best Quality::Best
} else { } else {
let mut b = (q >> 8 & 0xFF) * 2; let mut b = (q >> 8 & 0xFFF) * 2;
b = std::cmp::max(b, 10); b = std::cmp::max(b, 20);
b = std::cmp::min(b, 200); b = std::cmp::min(b, 8000);
Quality::Custom(b as u32) Quality::Custom(b as u32)
} }
}; };

View File

@ -424,10 +424,22 @@ class Header: Reactor.Component {
function handle_custom_image_quality() { function handle_custom_image_quality() {
var tmp = handler.get_custom_image_quality(); var tmp = handler.get_custom_image_quality();
var bitrate = (tmp[0] || 50); var bitrate = (tmp[0] || 50);
msgbox("custom", "Custom Image Quality", "<div .form> \ var extendedBitrate = bitrate > 100;
<div><input type=\"hslider\" style=\"width: 50%\" name=\"bitrate\" max=\"100\" min=\"10\" value=\"" + bitrate + "\"/ buddy=\"bitrate-buddy\"><b #bitrate-buddy>x</b>% Bitrate</div> \ var maxRate = extendedBitrate ? 2000 : 100;
msgbox("custom-image-quality", "Custom Image Quality", "<div .form> \
<div><input #bitrate-slider type=\"hslider\" style=\"width: 50%\" name=\"bitrate\" max=\"" + maxRate + "\" min=\"10\" value=\"" + bitrate + "\"/ buddy=\"bitrate-buddy\"><b #bitrate-buddy>x</b>% Bitrate <button|checkbox #extended-slider .custom-event " + (extendedBitrate ? "checked" : "") + ">More</button></div> \
</div>", "", function(res=null) { </div>", "", function(res=null) {
if (!res) return; if (!res) return;
if (res.id === "extended-slider") {
var slider = res.parent.$(#bitrate-slider)
slider.slider.max = res.checked ? 2000 : 100;
if (slider.value > slider.slider.max) {
slider.value = slider.slider.max;
}
var buddy = res.parent.$(#bitrate-buddy);
buddy.value = slider.value;
return;
}
if (!res.bitrate) return; if (!res.bitrate) return;
handler.save_custom_image_quality(res.bitrate); handler.save_custom_image_quality(res.bitrate);
toggleMenuState(); toggleMenuState();