pito_codecs/vp9/enc/rc/
q.rs1use crate::vp9::spec_tables::AC_QLOOKUP;
2
3pub fn qstep(q_index: u8) -> f64 {
4 AC_QLOOKUP[q_index as usize] as f64
5}
6
7pub fn q_index_for(step: f64) -> u8 {
8 let ac = &AC_QLOOKUP[..256];
9 let i = ac.partition_point(|&s| (s as f64) < step);
10 if i == 0 {
11 return 0;
12 }
13 if i >= 256 {
14 return 255;
15 }
16 let lo = ac[i - 1] as f64;
17 let hi = ac[i] as f64;
18 if step * step < lo * hi {
19 (i - 1) as u8
20 } else {
21 i as u8
22 }
23}
24
25pub fn lambda(q_index: u8) -> u32 {
26 let s = AC_QLOOKUP[q_index as usize] as u64;
27 ((s * s * 137) >> 16).max(1) as u32
28}
29
30pub fn crf_to_q(crf: u8) -> u8 {
31 if crf >= 63 { 255 } else { crf * 4 }
32}