test(lesavka): cover video support and bundled queue knobs
This commit is contained in:
parent
63d47d4435
commit
ebe72f662d
@ -340,8 +340,9 @@ pub fn reserve_local_pts(counter: &AtomicU64, preferred_pts_us: u64, frame_step_
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::{
|
use super::{
|
||||||
adjust_effective_fps, contains_hevc_irap, contains_idr, default_eye_fps, env_u32,
|
SOFTWARE_VIDEO_FALLBACK_ENV, adjust_effective_fps, contains_hevc_irap, contains_idr,
|
||||||
env_usize, next_local_pts, reserve_local_pts, should_send_frame,
|
default_eye_fps, env_u32, env_usize, is_hardware_h264_decoder, is_hardware_hevc_decoder,
|
||||||
|
next_local_pts, reserve_local_pts, should_send_frame, software_video_fallback_allowed,
|
||||||
};
|
};
|
||||||
use serial_test::serial;
|
use serial_test::serial;
|
||||||
use std::sync::atomic::AtomicU64;
|
use std::sync::atomic::AtomicU64;
|
||||||
@ -359,7 +360,9 @@ mod tests {
|
|||||||
fn contains_idr_finds_annex_b_keyframes() {
|
fn contains_idr_finds_annex_b_keyframes() {
|
||||||
let sample = [0, 0, 0, 1, 0x65, 0x88, 0x99];
|
let sample = [0, 0, 0, 1, 0x65, 0x88, 0x99];
|
||||||
assert!(contains_idr(&sample));
|
assert!(contains_idr(&sample));
|
||||||
|
assert!(contains_idr(&[0, 0, 1, 0x65, 0x88]));
|
||||||
assert!(!contains_idr(&[0, 0, 0, 1, 0x41, 0x99]));
|
assert!(!contains_idr(&[0, 0, 0, 1, 0x41, 0x99]));
|
||||||
|
assert!(!contains_idr(&[0, 0, 2, 0x65, 0x88]));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -381,6 +384,8 @@ mod tests {
|
|||||||
assert!(should_send_frame(0, 10, 25));
|
assert!(should_send_frame(0, 10, 25));
|
||||||
assert!(!should_send_frame(40_000, 50_000, 25));
|
assert!(!should_send_frame(40_000, 50_000, 25));
|
||||||
assert!(should_send_frame(40_000, 90_000, 25));
|
assert!(should_send_frame(40_000, 90_000, 25));
|
||||||
|
assert!(!should_send_frame(40_000, 40_001, 0));
|
||||||
|
assert!(should_send_frame(40_000, 1_040_000, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -415,6 +420,53 @@ mod tests {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[serial]
|
||||||
|
fn software_video_fallback_requires_clear_operator_opt_in() {
|
||||||
|
for disabled in [
|
||||||
|
None,
|
||||||
|
Some(""),
|
||||||
|
Some("0"),
|
||||||
|
Some("false"),
|
||||||
|
Some("no"),
|
||||||
|
Some("off"),
|
||||||
|
] {
|
||||||
|
with_var(SOFTWARE_VIDEO_FALLBACK_ENV, disabled, || {
|
||||||
|
assert!(!software_video_fallback_allowed());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for enabled in ["1", "true", "yes", "on", "lab"] {
|
||||||
|
with_var(SOFTWARE_VIDEO_FALLBACK_ENV, Some(enabled), || {
|
||||||
|
assert!(software_video_fallback_allowed());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn hardware_decoder_classification_keeps_software_fallbacks_out() {
|
||||||
|
for name in [
|
||||||
|
"v4l2h264dec",
|
||||||
|
"v4l2slh264dec",
|
||||||
|
"omxh264dec",
|
||||||
|
"vulkanh264dec",
|
||||||
|
] {
|
||||||
|
assert!(is_hardware_h264_decoder(name));
|
||||||
|
}
|
||||||
|
assert!(!is_hardware_h264_decoder("avdec_h264"));
|
||||||
|
|
||||||
|
for name in [
|
||||||
|
"v4l2slh265dec",
|
||||||
|
"v4l2h265dec",
|
||||||
|
"vulkanh265dec",
|
||||||
|
"nvh265dec",
|
||||||
|
"nvh265sldec",
|
||||||
|
] {
|
||||||
|
assert!(is_hardware_hevc_decoder(name));
|
||||||
|
}
|
||||||
|
assert!(!is_hardware_hevc_decoder("libde265dec"));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn adjust_effective_fps_keeps_current_rate_when_no_samples() {
|
fn adjust_effective_fps_keeps_current_rate_when_no_samples() {
|
||||||
assert_eq!(adjust_effective_fps(18, 12, 25, 0, 0), 18);
|
assert_eq!(adjust_effective_fps(18, 12, 25, 0, 0), 18);
|
||||||
|
|||||||
@ -23,6 +23,50 @@ const QUEUE_METADATA: &str = include_str!(concat!(
|
|||||||
"/client/src/app/uplink_media/uplink_queue_metadata.rs"
|
"/client/src/app/uplink_media/uplink_queue_metadata.rs"
|
||||||
));
|
));
|
||||||
|
|
||||||
|
#[cfg(coverage)]
|
||||||
|
mod bundled_queue_runtime_knobs {
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
|
include!(concat!(
|
||||||
|
env!("CARGO_MANIFEST_DIR"),
|
||||||
|
"/client/src/app/uplink_media/bundled_media_queue.rs"
|
||||||
|
));
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn bundled_audio_video_span_uses_default_when_unset_or_invalid() {
|
||||||
|
temp_env::with_var_unset("LESAVKA_BUNDLED_AUDIO_VIDEO_MAX_SPAN_MS", || {
|
||||||
|
assert_eq!(
|
||||||
|
bundled_audio_video_max_span(),
|
||||||
|
Duration::from_millis(DEFAULT_BUNDLED_AUDIO_VIDEO_MAX_SPAN_MS)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
for value in ["", "0", "-1", "not-a-number"] {
|
||||||
|
temp_env::with_var(
|
||||||
|
"LESAVKA_BUNDLED_AUDIO_VIDEO_MAX_SPAN_MS",
|
||||||
|
Some(value),
|
||||||
|
|| {
|
||||||
|
assert_eq!(
|
||||||
|
bundled_audio_video_max_span(),
|
||||||
|
Duration::from_millis(DEFAULT_BUNDLED_AUDIO_VIDEO_MAX_SPAN_MS)
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn bundled_audio_video_span_accepts_positive_operator_override() {
|
||||||
|
temp_env::with_var(
|
||||||
|
"LESAVKA_BUNDLED_AUDIO_VIDEO_MAX_SPAN_MS",
|
||||||
|
Some("125"),
|
||||||
|
|| {
|
||||||
|
assert_eq!(bundled_audio_video_max_span(), Duration::from_millis(125));
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn bundled_component_keeps_audio_video_and_hevc_recovery_on_the_same_path() {
|
fn bundled_component_keeps_audio_video_and_hevc_recovery_on_the_same_path() {
|
||||||
for marker in [
|
for marker in [
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user