70 lines
2.7 KiB
Rust
70 lines
2.7 KiB
Rust
// Compatibility coverage for profile-specific server-to-RCT calibration.
|
|
//
|
|
// Scope: ensure the calibrated MJPEG and HEVC ingress profiles both cover every
|
|
// supported UVC mode.
|
|
// Targets: server/src/calibration/profile_offsets.rs and
|
|
// scripts/manual/run_server_to_rc_mode_matrix.sh.
|
|
// Why: the HEVC path decodes and re-encodes before UVC, so it must never
|
|
// silently borrow the MJPEG timing map unless explicitly asked.
|
|
|
|
use lesavka_server::calibration::{
|
|
FACTORY_HEVC_AUDIO_MODE_OFFSETS_US, FACTORY_HEVC_OPUS_AUDIO_MODE_OFFSETS_US,
|
|
FACTORY_HEVC_VIDEO_MODE_OFFSETS_US, FACTORY_MJPEG_AUDIO_MODE_OFFSETS_US,
|
|
FACTORY_MJPEG_PCM_AUDIO_MODE_OFFSETS_US, FACTORY_MJPEG_VIDEO_MODE_OFFSETS_US,
|
|
};
|
|
|
|
const MATRIX_SCRIPT: &str = include_str!(concat!(
|
|
env!("CARGO_MANIFEST_DIR"),
|
|
"/scripts/manual/run_server_to_rc_mode_matrix.sh"
|
|
));
|
|
|
|
const SUPPORTED_MODES: [&str; 4] = ["1280x720@20", "1280x720@30", "1920x1080@20", "1920x1080@30"];
|
|
|
|
fn map_contains_mode(map: &str, mode: &str) -> bool {
|
|
map.split(',')
|
|
.any(|entry| entry.starts_with(&format!("{mode}=")))
|
|
}
|
|
|
|
#[test]
|
|
fn hevc_and_mjpeg_factory_maps_cover_all_supported_uvc_modes() {
|
|
for mode in SUPPORTED_MODES {
|
|
assert!(map_contains_mode(FACTORY_MJPEG_AUDIO_MODE_OFFSETS_US, mode));
|
|
assert!(map_contains_mode(FACTORY_MJPEG_VIDEO_MODE_OFFSETS_US, mode));
|
|
assert!(map_contains_mode(FACTORY_HEVC_AUDIO_MODE_OFFSETS_US, mode));
|
|
assert!(map_contains_mode(FACTORY_HEVC_VIDEO_MODE_OFFSETS_US, mode));
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn hevc_profile_defaults_are_separate_from_mjpeg_profile_defaults() {
|
|
assert_ne!(
|
|
FACTORY_MJPEG_VIDEO_MODE_OFFSETS_US, FACTORY_HEVC_VIDEO_MODE_OFFSETS_US,
|
|
"HEVC decode-to-MJPEG should retain its own calibrated timing profile"
|
|
);
|
|
assert_eq!(
|
|
FACTORY_MJPEG_PCM_AUDIO_MODE_OFFSETS_US,
|
|
FACTORY_HEVC_AUDIO_MODE_OFFSETS_US
|
|
);
|
|
assert_eq!(
|
|
FACTORY_HEVC_OPUS_AUDIO_MODE_OFFSETS_US, FACTORY_HEVC_AUDIO_MODE_OFFSETS_US,
|
|
"Opus has a separate audio map that currently inherits PCM until lab calibration lands"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn mode_matrix_script_can_calibrate_profiles_without_overwriting_each_other() {
|
|
for marker in [
|
|
"LESAVKA_SERVER_RC_PROFILE=${LESAVKA_SERVER_RC_PROFILE:-mjpeg}",
|
|
"LESAVKA_SERVER_RC_NORMALIZED_PROFILE=hevc",
|
|
"LESAVKA_SERVER_RC_HEVC_MODE_DELAYS_US",
|
|
"LESAVKA_UPSTREAM_MJPEG_VIDEO_PLAYOUT_MODE_OFFSETS_US",
|
|
"LESAVKA_UPSTREAM_HEVC_VIDEO_PLAYOUT_MODE_OFFSETS_US",
|
|
"LESAVKA_UPSTREAM_HEVC_OPUS_AUDIO_PLAYOUT_MODE_OFFSETS_US",
|
|
] {
|
|
assert!(
|
|
MATRIX_SCRIPT.contains(marker),
|
|
"mode matrix should preserve profile marker {marker}"
|
|
);
|
|
}
|
|
}
|