lesavka/tests/compatibility/server/video/hevc_mjpeg_profile_matrix_contract.rs

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}"
);
}
}