pub const DEFAULT_LUMA_QUANT_MATRIX: [u8; 64] = [
4, 4, 5, 5, 6, 7, 8, 9, 4, 4, 5, 6, 7, 8, 9, 10, 5, 5, 6, 7, 8, 9, 10, 12, 5, 6, 7, 8, 9, 10,
12, 14, 6, 7, 8, 9, 10, 12, 14, 17, 7, 8, 9, 10, 12, 14, 17, 21, 8, 9, 10, 12, 14, 17, 21, 26,
9, 10, 12, 14, 17, 21, 26, 33,
];
pub const DEFAULT_CHROMA_QUANT_MATRIX: [u8; 64] = [
4, 4, 5, 5, 6, 7, 9, 11, 4, 4, 5, 6, 7, 9, 11, 14, 5, 5, 6, 7, 9, 11, 14, 18, 5, 6, 7, 9, 11,
14, 18, 23, 6, 7, 9, 11, 14, 18, 23, 29, 7, 9, 11, 14, 18, 23, 29, 36, 9, 11, 14, 18, 23, 29,
36, 45, 11, 14, 18, 23, 29, 36, 45, 56,
];
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn matrices_are_64_entries() {
assert_eq!(DEFAULT_LUMA_QUANT_MATRIX.len(), 64);
assert_eq!(DEFAULT_CHROMA_QUANT_MATRIX.len(), 64);
}
#[test]
fn dc_quantizers_match_rdd_36() {
assert_eq!(DEFAULT_LUMA_QUANT_MATRIX[0], 4);
assert_eq!(DEFAULT_CHROMA_QUANT_MATRIX[0], 4);
}
#[test]
fn chroma_quantizes_high_frequency_more_than_luma() {
assert!(
DEFAULT_CHROMA_QUANT_MATRIX[63] > DEFAULT_LUMA_QUANT_MATRIX[63],
"chroma HF should be quantized more aggressively than luma"
);
}
#[test]
fn matrices_monotonically_increase_along_diagonal() {
for k in 0..7 {
let lo = DEFAULT_LUMA_QUANT_MATRIX[k * 9];
let hi = DEFAULT_LUMA_QUANT_MATRIX[(k + 1) * 9];
assert!(hi >= lo, "luma diag should not decrease at step {k}");
}
}
}