fix ImageQuality compatibility
This commit is contained in:
parent
a7769da317
commit
47469dd971
@ -447,9 +447,9 @@ message PermissionInfo {
|
|||||||
|
|
||||||
enum ImageQuality {
|
enum ImageQuality {
|
||||||
NotSet = 0;
|
NotSet = 0;
|
||||||
Low = 50;
|
Low = 2;
|
||||||
Balanced = 66;
|
Balanced = 3;
|
||||||
Best = 100;
|
Best = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
message VideoCodecState {
|
message VideoCodecState {
|
||||||
|
@ -1005,17 +1005,17 @@ impl LoginConfigHandler {
|
|||||||
msg_out
|
msg_out
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn save_custom_image_quality(&mut self, custom_image_quality: i32) -> Message {
|
pub fn save_custom_image_quality(&mut self, image_quality: i32) -> Message {
|
||||||
let mut misc = Misc::new();
|
let mut misc = Misc::new();
|
||||||
misc.set_option(OptionMessage {
|
misc.set_option(OptionMessage {
|
||||||
custom_image_quality,
|
custom_image_quality: image_quality << 8,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
let mut msg_out = Message::new();
|
let mut msg_out = Message::new();
|
||||||
msg_out.set_misc(misc);
|
msg_out.set_misc(misc);
|
||||||
let mut config = self.load_config();
|
let mut config = self.load_config();
|
||||||
config.image_quality = "custom".to_owned();
|
config.image_quality = "custom".to_owned();
|
||||||
config.custom_image_quality = vec![custom_image_quality as _];
|
config.custom_image_quality = vec![image_quality as _];
|
||||||
self.save_config(config);
|
self.save_config(config);
|
||||||
msg_out
|
msg_out
|
||||||
}
|
}
|
||||||
|
@ -1114,13 +1114,15 @@ impl Connection {
|
|||||||
async fn update_option(&mut self, o: &OptionMessage) {
|
async fn update_option(&mut self, o: &OptionMessage) {
|
||||||
log::info!("Option update: {:?}", o);
|
log::info!("Option update: {:?}", o);
|
||||||
if let Ok(q) = o.image_quality.enum_value() {
|
if let Ok(q) = o.image_quality.enum_value() {
|
||||||
let mut image_quality = None;
|
let image_quality;
|
||||||
if let ImageQuality::NotSet = q {
|
if let ImageQuality::NotSet = q {
|
||||||
if o.custom_image_quality > 0 {
|
if o.custom_image_quality > 0 {
|
||||||
image_quality = Some(o.custom_image_quality as _);
|
image_quality = o.custom_image_quality;
|
||||||
|
} else {
|
||||||
|
image_quality = ImageQuality::Balanced.value();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
image_quality = Some(q.value() as _)
|
image_quality = q.value();
|
||||||
}
|
}
|
||||||
video_service::VIDEO_QOS
|
video_service::VIDEO_QOS
|
||||||
.lock()
|
.lock()
|
||||||
|
@ -52,6 +52,21 @@ lazy_static::lazy_static! {
|
|||||||
pub static ref VIDEO_QOS: Arc<Mutex<VideoQoS>> = Default::default();
|
pub static ref VIDEO_QOS: Arc<Mutex<VideoQoS>> = Default::default();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trait Percent {
|
||||||
|
fn as_percent(&self) -> u32;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Percent for ImageQuality {
|
||||||
|
fn as_percent(&self) -> u32 {
|
||||||
|
match self {
|
||||||
|
ImageQuality::NotSet => 0,
|
||||||
|
ImageQuality::Low => 50,
|
||||||
|
ImageQuality::Balanced => 66,
|
||||||
|
ImageQuality::Best => 100,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct VideoQoS {
|
pub struct VideoQoS {
|
||||||
width: u32,
|
width: u32,
|
||||||
height: u32,
|
height: u32,
|
||||||
@ -93,8 +108,8 @@ impl Default for VideoQoS {
|
|||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
VideoQoS {
|
VideoQoS {
|
||||||
fps: FPS,
|
fps: FPS,
|
||||||
user_image_quality: ImageQuality::Balanced.value() as _,
|
user_image_quality: ImageQuality::Balanced.as_percent(),
|
||||||
current_image_quality: ImageQuality::Balanced.value() as _,
|
current_image_quality: ImageQuality::Balanced.as_percent(),
|
||||||
width: 0,
|
width: 0,
|
||||||
height: 0,
|
height: 0,
|
||||||
current_delay: 0,
|
current_delay: 0,
|
||||||
@ -147,13 +162,13 @@ impl VideoQoS {
|
|||||||
);
|
);
|
||||||
self.state = current_state;
|
self.state = current_state;
|
||||||
self.debounce_count = 0;
|
self.debounce_count = 0;
|
||||||
self.update_quality();
|
self.refresh_quality();
|
||||||
} else {
|
} else {
|
||||||
self.debounce_count += 1;
|
self.debounce_count += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_quality(&mut self) {
|
fn refresh_quality(&mut self) {
|
||||||
match self.state {
|
match self.state {
|
||||||
DelayState::Normal => {
|
DelayState::Normal => {
|
||||||
self.fps = FPS;
|
self.fps = FPS;
|
||||||
@ -176,19 +191,15 @@ impl VideoQoS {
|
|||||||
self.updated = true;
|
self.updated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn update_image_quality(&mut self, image_quality: Option<u32>) {
|
pub fn update_image_quality(&mut self, image_quality: i32) {
|
||||||
if let Some(image_quality) = image_quality {
|
let image_quality = Self::convert_quality(image_quality) as _;
|
||||||
if image_quality < 10 || image_quality > 200 {
|
log::debug!("VideoQoS update_image_quality{}", image_quality);
|
||||||
self.current_image_quality = ImageQuality::Balanced.value() as _;
|
if self.current_image_quality != image_quality {
|
||||||
}
|
self.current_image_quality = image_quality;
|
||||||
if self.current_image_quality != image_quality {
|
let _ = self.generate_bitrate().ok();
|
||||||
self.current_image_quality = image_quality;
|
self.updated = true;
|
||||||
let _ = self.generate_bitrate().ok();
|
|
||||||
self.updated = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
self.current_image_quality = ImageQuality::Balanced.value() as _;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self.user_image_quality = self.current_image_quality;
|
self.user_image_quality = self.current_image_quality;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,7 +209,7 @@ impl VideoQoS {
|
|||||||
bail!("Fail to generate_bitrate, width or height is not set");
|
bail!("Fail to generate_bitrate, width or height is not set");
|
||||||
}
|
}
|
||||||
if self.current_image_quality == 0 {
|
if self.current_image_quality == 0 {
|
||||||
self.current_image_quality = ImageQuality::Balanced.value() as _;
|
self.current_image_quality = ImageQuality::Balanced.as_percent();
|
||||||
}
|
}
|
||||||
|
|
||||||
let base_bitrate = ((self.width * self.height) / 800) as u32;
|
let base_bitrate = ((self.width * self.height) / 800) as u32;
|
||||||
@ -227,6 +238,18 @@ impl VideoQoS {
|
|||||||
pub fn reset(&mut self) {
|
pub fn reset(&mut self) {
|
||||||
*self = Default::default();
|
*self = Default::default();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn convert_quality(q: i32) -> i32 {
|
||||||
|
if q == ImageQuality::Balanced.value() {
|
||||||
|
100 * 2 / 3
|
||||||
|
} else if q == ImageQuality::Low.value() {
|
||||||
|
100 / 2
|
||||||
|
} else if q == ImageQuality::Best.value() {
|
||||||
|
100
|
||||||
|
} else {
|
||||||
|
(q >> 8 & 0xFF) * 2
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_capturer_mag_supported() -> bool {
|
fn is_capturer_mag_supported() -> bool {
|
||||||
|
@ -336,13 +336,13 @@ 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] || 100) / 2;
|
var bitrate = (tmp[0] || 50);
|
||||||
msgbox("custom", "Custom Image Quality", "<div .form> \
|
msgbox("custom", "Custom Image Quality", "<div .form> \
|
||||||
<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> \
|
<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> \
|
||||||
</div>", function(res=null) {
|
</div>", function(res=null) {
|
||||||
if (!res) return;
|
if (!res) return;
|
||||||
if (!res.bitrate) return;
|
if (!res.bitrate) return;
|
||||||
handler.save_custom_image_quality(res.bitrate * 2);
|
handler.save_custom_image_quality(res.bitrate);
|
||||||
toggleMenuState();
|
toggleMenuState();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user