unopus/silk/
HP_variable_cutoff.rs

1use 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}