pub mod errors_h {
pub const SILK_NO_ERROR: i32 = 0;
}
pub use self::errors_h::SILK_NO_ERROR;
use crate::silk::structs::silk_encoder_state;
static mut silk_TargetRate_NB_21: [u8; 107] = [
0, 15, 39, 52, 61, 68, 74, 79, 84, 88, 92, 95, 99, 102, 105, 108, 111, 114, 117, 119, 122, 124,
126, 129, 131, 133, 135, 137, 139, 142, 143, 145, 147, 149, 151, 153, 155, 157, 158, 160, 162,
163, 165, 167, 168, 170, 171, 173, 174, 176, 177, 179, 180, 182, 183, 185, 186, 187, 189, 190,
192, 193, 194, 196, 197, 199, 200, 201, 203, 204, 205, 207, 208, 209, 211, 212, 213, 215, 216,
217, 219, 220, 221, 223, 224, 225, 227, 228, 230, 231, 232, 234, 235, 236, 238, 239, 241, 242,
243, 245, 246, 248, 249, 250, 252, 253, 255,
];
static mut silk_TargetRate_MB_21: [u8; 155] = [
0, 0, 28, 43, 52, 59, 65, 70, 74, 78, 81, 85, 87, 90, 93, 95, 98, 100, 102, 105, 107, 109, 111,
113, 115, 116, 118, 120, 122, 123, 125, 127, 128, 130, 131, 133, 134, 136, 137, 138, 140, 141,
143, 144, 145, 147, 148, 149, 151, 152, 153, 154, 156, 157, 158, 159, 160, 162, 163, 164, 165,
166, 167, 168, 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
186, 187, 188, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 214, 215, 216, 217, 218, 219, 220,
221, 222, 223, 224, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 236, 237,
238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
];
static mut silk_TargetRate_WB_21: [u8; 191] = [
0, 0, 0, 8, 29, 41, 49, 56, 62, 66, 70, 74, 77, 80, 83, 86, 88, 91, 93, 95, 97, 99, 101, 103,
105, 107, 108, 110, 112, 113, 115, 116, 118, 119, 121, 122, 123, 125, 126, 127, 129, 130, 131,
132, 134, 135, 136, 137, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
153, 154, 156, 157, 158, 159, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
171, 172, 173, 174, 175, 176, 177, 177, 178, 179, 180, 181, 181, 182, 183, 184, 185, 185, 186,
187, 188, 189, 189, 190, 191, 192, 192, 193, 194, 195, 195, 196, 197, 198, 198, 199, 200, 200,
201, 202, 203, 203, 204, 205, 206, 206, 207, 208, 209, 209, 210, 211, 211, 212, 213, 214, 214,
215, 216, 216, 217, 218, 219, 219, 220, 221, 221, 222, 223, 224, 224, 225, 226, 226, 227, 228,
229, 229, 230, 231, 232, 232, 233, 234, 234, 235, 236, 237, 237, 238, 239, 240, 240, 241, 242,
243, 243, 244, 245, 246, 246, 247, 248, 249, 249, 250, 251, 252, 253, 255,
];
pub unsafe fn silk_control_SNR(psEncC: *mut silk_encoder_state, mut TargetRate_bps: i32) -> i32 {
let mut id: i32 = 0;
let mut bound: i32 = 0;
let mut snr_table: *const u8 = 0 as *const u8;
(*psEncC).TargetRate_bps = TargetRate_bps;
if (*psEncC).nb_subfr == 2 {
TargetRate_bps -= 2000 + (*psEncC).fs_kHz / 16;
}
if (*psEncC).fs_kHz == 8 {
bound = ::core::mem::size_of::<[u8; 107]>() as u64 as i32;
snr_table = silk_TargetRate_NB_21.as_ptr();
} else if (*psEncC).fs_kHz == 12 {
bound = ::core::mem::size_of::<[u8; 155]>() as u64 as i32;
snr_table = silk_TargetRate_MB_21.as_ptr();
} else {
bound = ::core::mem::size_of::<[u8; 191]>() as u64 as i32;
snr_table = silk_TargetRate_WB_21.as_ptr();
}
id = (TargetRate_bps + 200) / 400;
id = if (id - 10) < bound - 1 {
id - 10
} else {
bound - 1
};
if id <= 0 {
(*psEncC).SNR_dB_Q7 = 0;
} else {
(*psEncC).SNR_dB_Q7 = *snr_table.offset(id as isize) as i32 * 21;
}
return SILK_NO_ERROR;
}