unopus/silk/
HP_variable_cutoff.rs1use crate::silk::lin2log::silk_lin2log;
2
3use crate::silk::define::TYPE_VOICED;
4use crate::silk::float::structs_FLP::silk_encoder_state_FLP;
5use crate::silk::structs::silk_encoder_state;
6
7pub unsafe fn silk_HP_variable_cutoff(state_Fxx: *mut silk_encoder_state_FLP) {
8 let mut quality_Q15: i32 = 0;
9 let mut pitch_freq_Hz_Q16: i32 = 0;
10 let mut pitch_freq_log_Q7: i32 = 0;
11 let mut delta_freq_Q7: i32 = 0;
12 let psEncC1: *mut silk_encoder_state = &mut (*state_Fxx.offset(0 as isize)).sCmn;
13 if (*psEncC1).prevSignalType as i32 == TYPE_VOICED {
14 pitch_freq_Hz_Q16 = ((((*psEncC1).fs_kHz * 1000) as u32) << 16) as i32 / (*psEncC1).prevLag;
15 pitch_freq_log_Q7 = silk_lin2log(pitch_freq_Hz_Q16) - ((16) << 7);
16 quality_Q15 = (*psEncC1).input_quality_bands_Q15[0 as usize];
17 pitch_freq_log_Q7 = (pitch_freq_log_Q7 as i64
18 + ((((-quality_Q15 as u32) << 2) as i32 as i64 * quality_Q15 as i16 as i64 >> 16) as i32
19 as i64
20 * (pitch_freq_log_Q7
21 - (silk_lin2log(((60 * ((1) << 16)) as f64 + 0.5f64) as i32) - ((16) << 7)))
22 as i16 as i64
23 >> 16)) as i32;
24 delta_freq_Q7 = pitch_freq_log_Q7 - ((*psEncC1).variable_HP_smth1_Q15 >> 8);
25 if delta_freq_Q7 < 0 {
26 delta_freq_Q7 = delta_freq_Q7 * 3;
27 }
28 delta_freq_Q7 = if -(((0.4f32 * ((1) << 7) as f32) as f64 + 0.5f64) as i32)
29 > ((0.4f32 * ((1) << 7) as f32) as f64 + 0.5f64) as i32
30 {
31 if delta_freq_Q7 > -(((0.4f32 * ((1) << 7) as f32) as f64 + 0.5f64) as i32) {
32 -(((0.4f32 * ((1) << 7) as f32) as f64 + 0.5f64) as i32)
33 } else if delta_freq_Q7 < ((0.4f32 * ((1) << 7) as f32) as f64 + 0.5f64) as i32 {
34 ((0.4f32 * ((1) << 7) as f32) as f64 + 0.5f64) as i32
35 } else {
36 delta_freq_Q7
37 }
38 } else if delta_freq_Q7 > ((0.4f32 * ((1) << 7) as f32) as f64 + 0.5f64) as i32 {
39 ((0.4f32 * ((1) << 7) as f32) as f64 + 0.5f64) as i32
40 } else if delta_freq_Q7 < -(((0.4f32 * ((1) << 7) as f32) as f64 + 0.5f64) as i32) {
41 -(((0.4f32 * ((1) << 7) as f32) as f64 + 0.5f64) as i32)
42 } else {
43 delta_freq_Q7
44 };
45 (*psEncC1).variable_HP_smth1_Q15 = ((*psEncC1).variable_HP_smth1_Q15 as i64
46 + (((*psEncC1).speech_activity_Q8 as i16 as i32 * delta_freq_Q7 as i16 as i32) as i64
47 * ((0.1f32 * ((1) << 16) as f32) as f64 + 0.5f64) as i32 as i16 as i64
48 >> 16)) as i32;
49 (*psEncC1).variable_HP_smth1_Q15 = if ((silk_lin2log(60) as u32) << 8) as i32
50 > ((silk_lin2log(100) as u32) << 8) as i32
51 {
52 if (*psEncC1).variable_HP_smth1_Q15 > ((silk_lin2log(60) as u32) << 8) as i32 {
53 ((silk_lin2log(60) as u32) << 8) as i32
54 } else if (*psEncC1).variable_HP_smth1_Q15 < ((silk_lin2log(100) as u32) << 8) as i32 {
55 ((silk_lin2log(100) as u32) << 8) as i32
56 } else {
57 (*psEncC1).variable_HP_smth1_Q15
58 }
59 } else if (*psEncC1).variable_HP_smth1_Q15 > ((silk_lin2log(100) as u32) << 8) as i32 {
60 ((silk_lin2log(100) as u32) << 8) as i32
61 } else if (*psEncC1).variable_HP_smth1_Q15 < ((silk_lin2log(60) as u32) << 8) as i32 {
62 ((silk_lin2log(60) as u32) << 8) as i32
63 } else {
64 (*psEncC1).variable_HP_smth1_Q15
65 };
66 }
67}