mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-03-26 22:51:03 +03:00
Use fallback codec if first frame fails (#9242)
* Both encoding and decoding use fallback if first frame fails * More aggresive max fail counter * Update hwcodec, add judgement when length of the encoded data is zero, https://github.com/rustdesk/rustdesk-server-pro/discussions/382#discussioncomment-10525997 * Fix serde hwcodec config toml fails when the non-first vec![] is empty, https://github.com/toml-rs/toml-rs/issues/384, the config file is used for cache, when check process is not finished, the cache is used. * Allow cm not start for pro user Signed-off-by: 21pages <sunboeasy@gmail.com>
This commit is contained in:
@@ -498,6 +498,15 @@ pub struct HwCodecConfig {
|
||||
pub vram_decode: Vec<hwcodec::vram::DecodeContext>,
|
||||
}
|
||||
|
||||
// HwCodecConfig2 is used to store the config in json format,
|
||||
// confy can't serde HwCodecConfig successfully if the non-first struct Vec is empty due to old toml version.
|
||||
// struct T { a: Vec<A>, b: Vec<String>} will fail if b is empty, but struct T { a: Vec<String>, b: Vec<String>} is ok.
|
||||
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
|
||||
struct HwCodecConfig2 {
|
||||
#[serde(default)]
|
||||
pub config: String,
|
||||
}
|
||||
|
||||
// ipc server process start check process once, other process get from ipc server once
|
||||
// install: --server start check process, check process send to --server, ui get from --server
|
||||
// portable: ui start check process, check process send to ui
|
||||
@@ -509,7 +518,12 @@ impl HwCodecConfig {
|
||||
log::info!("set hwcodec config");
|
||||
log::debug!("{config:?}");
|
||||
#[cfg(any(windows, target_os = "macos"))]
|
||||
hbb_common::config::common_store(&config, "_hwcodec");
|
||||
hbb_common::config::common_store(
|
||||
&HwCodecConfig2 {
|
||||
config: serde_json::to_string_pretty(&config).unwrap_or_default(),
|
||||
},
|
||||
"_hwcodec",
|
||||
);
|
||||
*CONFIG.lock().unwrap() = Some(config);
|
||||
*CONFIG_SET_BY_IPC.lock().unwrap() = true;
|
||||
}
|
||||
@@ -587,7 +601,8 @@ impl HwCodecConfig {
|
||||
Some(c) => c,
|
||||
None => {
|
||||
log::info!("try load cached hwcodec config");
|
||||
let c = hbb_common::config::common_load::<HwCodecConfig>("_hwcodec");
|
||||
let c = hbb_common::config::common_load::<HwCodecConfig2>("_hwcodec");
|
||||
let c: HwCodecConfig = serde_json::from_str(&c.config).unwrap_or_default();
|
||||
let new_signature = hwcodec::common::get_gpu_signature();
|
||||
if c.signature == new_signature {
|
||||
log::debug!("load cached hwcodec config: {c:?}");
|
||||
|
||||
Reference in New Issue
Block a user