mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-09-14 08:21:02 +03:00
feat(codec): log which AV1 encoder a session uses
Emit an explicit "AV1 encoder: svt-av1" / "AV1 encoder: aom" line at the
point the encoder is actually built, plus the reason ("i444" /
"unsupported resolution") when a 64-bit host falls back to aom for AV1.
Avoids relying on parsing Debug output or SVT's own stderr banner.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Wf7v1KJM6mbhiYxWSz4PH
This commit is contained in:
@@ -146,17 +146,23 @@ impl Encoder {
|
|||||||
EncoderCfg::VPX(_) => Ok(Encoder {
|
EncoderCfg::VPX(_) => Ok(Encoder {
|
||||||
codec: Box::new(VpxEncoder::new(config, i444)?),
|
codec: Box::new(VpxEncoder::new(config, i444)?),
|
||||||
}),
|
}),
|
||||||
EncoderCfg::AOM(_) => Ok(Encoder {
|
EncoderCfg::AOM(_) => {
|
||||||
codec: Box::new(AomEncoder::new(config, i444)?),
|
log::info!("AV1 encoder: aom");
|
||||||
}),
|
Ok(Encoder {
|
||||||
|
codec: Box::new(AomEncoder::new(config, i444)?),
|
||||||
|
})
|
||||||
|
}
|
||||||
#[cfg(target_pointer_width = "64")]
|
#[cfg(target_pointer_width = "64")]
|
||||||
EncoderCfg::SVTAV1(svt) => match SvtAv1Encoder::new(EncoderCfg::SVTAV1(svt), i444) {
|
EncoderCfg::SVTAV1(svt) => match SvtAv1Encoder::new(EncoderCfg::SVTAV1(svt), i444) {
|
||||||
Ok(codec) => Ok(Encoder {
|
Ok(codec) => {
|
||||||
codec: Box::new(codec),
|
log::info!("AV1 encoder: svt-av1");
|
||||||
}),
|
Ok(Encoder {
|
||||||
|
codec: Box::new(codec),
|
||||||
|
})
|
||||||
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
// Same wire format, aom keeps the negotiated AV1 session alive.
|
// Same wire format, aom keeps the negotiated AV1 session alive.
|
||||||
log::error!("new svt-av1 encoder failed: {e:?}, fallback to aom");
|
log::error!("AV1 encoder: svt-av1 init failed ({e:?}), using aom");
|
||||||
let aom = EncoderCfg::AOM(AomEncoderConfig {
|
let aom = EncoderCfg::AOM(AomEncoderConfig {
|
||||||
width: svt.width,
|
width: svt.width,
|
||||||
height: svt.height,
|
height: svt.height,
|
||||||
|
|||||||
@@ -1033,15 +1033,25 @@ fn get_encoder_config(
|
|||||||
// Prefer svt-av1 for AV1 encoding, keep aom for i444 (svt-av1 is 4:2:0
|
// Prefer svt-av1 for AV1 encoding, keep aom for i444 (svt-av1 is 4:2:0
|
||||||
// only) and for resolutions svt-av1 cannot handle.
|
// only) and for resolutions svt-av1 cannot handle.
|
||||||
#[cfg(target_pointer_width = "64")]
|
#[cfg(target_pointer_width = "64")]
|
||||||
if scrap::svt_av1::SvtAv1Encoder::support(c.width as _, c.height as _)
|
|
||||||
&& !Encoder::use_i444(&aom)
|
|
||||||
{
|
{
|
||||||
return EncoderCfg::SVTAV1(scrap::svt_av1::SvtAv1EncoderConfig {
|
let use_i444 = Encoder::use_i444(&aom);
|
||||||
width: c.width as _,
|
if scrap::svt_av1::SvtAv1Encoder::support(c.width as _, c.height as _) && !use_i444
|
||||||
height: c.height as _,
|
{
|
||||||
quality,
|
return EncoderCfg::SVTAV1(scrap::svt_av1::SvtAv1EncoderConfig {
|
||||||
keyframe_interval,
|
width: c.width as _,
|
||||||
});
|
height: c.height as _,
|
||||||
|
quality,
|
||||||
|
keyframe_interval,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
log::info!(
|
||||||
|
"AV1 uses aom instead of svt-av1: {}",
|
||||||
|
if use_i444 {
|
||||||
|
"i444"
|
||||||
|
} else {
|
||||||
|
"unsupported resolution"
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
aom
|
aom
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user