commit
ac2b9a6fc1
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user