#![allow(clippy::unwrap_used, clippy::expect_used)]
use super::decode_tests::assert_native_matches_lavc_with;
use super::{AacError, DecodeOptions};
#[test]
fn mc30_adts_native_matches_lavc_golden() -> Result<(), AacError> {
assert_native_matches_lavc_with(
include_bytes!("goldens/mc30.adts"),
include_bytes!("goldens/mc30.s16"),
48_000,
"mc30-adts",
&DecodeOptions::unbounded(),
)
}
#[test]
fn mc40_adts_native_matches_lavc_golden() -> Result<(), AacError> {
assert_native_matches_lavc_with(
include_bytes!("goldens/mc40.adts"),
include_bytes!("goldens/mc40.s16"),
48_000,
"mc40-adts",
&DecodeOptions::unbounded(),
)
}
#[test]
fn mc50_adts_native_matches_lavc_golden() -> Result<(), AacError> {
assert_native_matches_lavc_with(
include_bytes!("goldens/mc50.adts"),
include_bytes!("goldens/mc50.s16"),
48_000,
"mc50-adts",
&DecodeOptions::unbounded(),
)
}
#[test]
fn mc51_adts_native_matches_lavc_golden() -> Result<(), AacError> {
assert_native_matches_lavc_with(
include_bytes!("goldens/mc51.adts"),
include_bytes!("goldens/mc51.s16"),
48_000,
"mc51-adts",
&DecodeOptions::unbounded(),
)
}
#[test]
fn mc51_m4a_native_matches_lavc_golden() -> Result<(), AacError> {
assert_native_matches_lavc_with(
include_bytes!("goldens/mc51.m4a"),
include_bytes!("goldens/mc51_m4a.s16"),
48_000,
"mc51-m4a",
&DecodeOptions::unbounded(),
)
}
#[test]
fn mc51_speech_mono_is_mean_of_non_lfe_planes() -> Result<(), AacError> {
let split = crate::decode_with(
include_bytes!("goldens/mc51.adts"),
&DecodeOptions::unbounded(),
)?;
assert_eq!(split.channels.len(), 6, "5.1 split plane count");
for (input, label) in [
(&include_bytes!("goldens/mc51.adts")[..], "adts"),
(&include_bytes!("goldens/mc51.m4a")[..], "m4a"),
] {
let mono = crate::decode_with(input, &DecodeOptions::speech())?;
assert_eq!(mono.channels.len(), 1, "{label} speech not mono");
let m = &mono.channels[0];
assert!(
m.iter().any(|s| s.abs() > 1e-3),
"{label} speech mono silent"
);
if label == "adts" {
assert_eq!(m.len(), split.channels[0].len(), "{label} mono length");
let non_lfe = [0usize, 1, 2, 4, 5];
for (i, &mv) in m.iter().enumerate() {
let mean = non_lfe.iter().map(|&c| split.channels[c][i]).sum::<f32>() / 5.0;
assert!(
(mv - mean).abs() <= 1e-6,
"{label} sample {i}: {mv} vs non-LFE mean {mean}"
);
}
}
}
Ok(())
}