unsafe-libopus 0.2.0

libopus transpiled to rust by c2rust
Documentation
pub mod typedef_h {
    pub const silk_int32_MAX: i32 = i32::MAX;
}
pub use self::typedef_h::silk_int32_MAX;
use crate::silk::define::{STEREO_QUANT_SUB_STEPS, STEREO_QUANT_TAB_SIZE};
use crate::silk::tables_other::silk_stereo_pred_quant_Q13;

pub unsafe fn silk_stereo_quant_pred(pred_Q13: *mut i32, ix: *mut [i8; 3]) {
    let mut i: i32 = 0;
    let mut j: i32 = 0;
    let mut n: i32 = 0;
    let mut low_Q13: i32 = 0;
    let mut step_Q13: i32 = 0;
    let mut lvl_Q13: i32 = 0;
    let mut err_min_Q13: i32 = 0;
    let mut err_Q13: i32 = 0;
    let mut quant_pred_Q13: i32 = 0;
    n = 0;
    while n < 2 {
        err_min_Q13 = silk_int32_MAX;
        i = 0;
        's_18: while i < STEREO_QUANT_TAB_SIZE - 1 {
            low_Q13 = silk_stereo_pred_quant_Q13[i as usize] as i32;
            step_Q13 = ((silk_stereo_pred_quant_Q13[(i + 1) as usize] as i32 - low_Q13) as i64
                * (0.5f64 / 5 as f64 * ((1) << 16) as f64 + 0.5f64) as i32 as i16 as i64
                >> 16) as i32;
            j = 0;
            while j < STEREO_QUANT_SUB_STEPS {
                lvl_Q13 = low_Q13 + step_Q13 as i16 as i32 * (2 * j + 1) as i16 as i32;
                err_Q13 = if *pred_Q13.offset(n as isize) - lvl_Q13 > 0 {
                    *pred_Q13.offset(n as isize) - lvl_Q13
                } else {
                    -(*pred_Q13.offset(n as isize) - lvl_Q13)
                };
                if !(err_Q13 < err_min_Q13) {
                    break 's_18;
                }
                err_min_Q13 = err_Q13;
                quant_pred_Q13 = lvl_Q13;
                (*ix.offset(n as isize))[0 as usize] = i as i8;
                (*ix.offset(n as isize))[1 as usize] = j as i8;
                j += 1;
            }
            i += 1;
        }
        (*ix.offset(n as isize))[2 as usize] =
            ((*ix.offset(n as isize))[0 as usize] as i32 / 3) as i8;
        let ref mut fresh0 = (*ix.offset(n as isize))[0 as usize];
        *fresh0 = (*fresh0 as i32 - (*ix.offset(n as isize))[2 as usize] as i32 * 3) as i8;
        *pred_Q13.offset(n as isize) = quant_pred_Q13;
        n += 1;
    }
    let ref mut fresh1 = *pred_Q13.offset(0 as isize);
    *fresh1 -= *pred_Q13.offset(1 as isize);
}