unsafe-libopus 0.2.0

libopus transpiled to rust by c2rust
Documentation
use crate::silk::pitch_est_tables::{
    silk_CB_lags_stage2, silk_CB_lags_stage2_10_ms, silk_CB_lags_stage3, silk_CB_lags_stage3_10_ms,
    PE_MAX_NB_SUBFR, PE_NB_CBKS_STAGE2_10MS, PE_NB_CBKS_STAGE2_EXT, PE_NB_CBKS_STAGE3_10MS,
    PE_NB_CBKS_STAGE3_MAX,
};

pub unsafe fn silk_decode_pitch(
    lagIndex: i16,
    contourIndex: i8,
    pitch_lags: *mut i32,
    Fs_kHz: i32,
    nb_subfr: i32,
) {
    let mut lag: i32 = 0;
    let mut k: i32 = 0;
    let mut min_lag: i32 = 0;
    let mut max_lag: i32 = 0;
    let mut cbk_size: i32 = 0;
    let mut Lag_CB_ptr: *const i8 = 0 as *const i8;
    if Fs_kHz == 8 {
        if nb_subfr == PE_MAX_NB_SUBFR {
            Lag_CB_ptr = &*(*silk_CB_lags_stage2.as_ptr().offset(0 as isize))
                .as_ptr()
                .offset(0 as isize) as *const i8;
            cbk_size = PE_NB_CBKS_STAGE2_EXT;
        } else {
            assert!(nb_subfr == 4 >> 1);
            Lag_CB_ptr = &*(*silk_CB_lags_stage2_10_ms.as_ptr().offset(0 as isize))
                .as_ptr()
                .offset(0 as isize) as *const i8;
            cbk_size = PE_NB_CBKS_STAGE2_10MS;
        }
    } else if nb_subfr == PE_MAX_NB_SUBFR {
        Lag_CB_ptr = &*(*silk_CB_lags_stage3.as_ptr().offset(0 as isize))
            .as_ptr()
            .offset(0 as isize) as *const i8;
        cbk_size = PE_NB_CBKS_STAGE3_MAX;
    } else {
        assert!(nb_subfr == 4 >> 1);
        Lag_CB_ptr = &*(*silk_CB_lags_stage3_10_ms.as_ptr().offset(0 as isize))
            .as_ptr()
            .offset(0 as isize) as *const i8;
        cbk_size = PE_NB_CBKS_STAGE3_10MS;
    }
    min_lag = 2 * Fs_kHz as i16 as i32;
    max_lag = 18 * Fs_kHz as i16 as i32;
    lag = min_lag + lagIndex as i32;
    k = 0;
    while k < nb_subfr {
        *pitch_lags.offset(k as isize) =
            lag + *Lag_CB_ptr.offset((k * cbk_size + contourIndex as i32) as isize) as i32;
        *pitch_lags.offset(k as isize) = if min_lag > max_lag {
            if *pitch_lags.offset(k as isize) > min_lag {
                min_lag
            } else if *pitch_lags.offset(k as isize) < max_lag {
                max_lag
            } else {
                *pitch_lags.offset(k as isize)
            }
        } else if *pitch_lags.offset(k as isize) > max_lag {
            max_lag
        } else if *pitch_lags.offset(k as isize) < min_lag {
            min_lag
        } else {
            *pitch_lags.offset(k as isize)
        };
        k += 1;
    }
}