unsafe-libopus 0.2.0

libopus transpiled to rust by c2rust
Documentation
use crate::silk::lin2log::silk_lin2log;
use crate::silk::log2lin::silk_log2lin;
use crate::silk::SigProc_FIX::{silk_max_int, silk_min_32, silk_min_int};

use crate::silk::define::{
    MAX_DELTA_GAIN_QUANT, MIN_DELTA_GAIN_QUANT, MIN_QGAIN_DB, N_LEVELS_QGAIN,
};

pub const OFFSET: i32 = MIN_QGAIN_DB * 128 / 6 + 16 * 128;
pub unsafe fn silk_gains_quant(
    ind: *mut i8,
    gain_Q16: *mut i32,
    prev_ind: *mut i8,
    conditional: i32,
    nb_subfr: i32,
) {
    let mut k: i32 = 0;
    let mut double_step_size_threshold: i32 = 0;
    k = 0;
    while k < nb_subfr {
        *ind.offset(k as isize) = ((65536 * (64 - 1) / ((88 - 2) * 128 / 6)) as i64
            * (silk_lin2log(*gain_Q16.offset(k as isize)) - (2 * 128 / 6 + 16 * 128)) as i16 as i64
            >> 16) as i32 as i8;
        if (*ind.offset(k as isize) as i32) < *prev_ind as i32 {
            let ref mut fresh0 = *ind.offset(k as isize);
            *fresh0 += 1;
        }
        *ind.offset(k as isize) = (if 0 > 64 - 1 {
            if *ind.offset(k as isize) as i32 > 0 {
                0
            } else if (*ind.offset(k as isize) as i32) < 64 - 1 {
                64 - 1
            } else {
                *ind.offset(k as isize) as i32
            }
        } else if *ind.offset(k as isize) as i32 > 64 - 1 {
            64 - 1
        } else if (*ind.offset(k as isize) as i32) < 0 {
            0
        } else {
            *ind.offset(k as isize) as i32
        }) as i8;
        if k == 0 && conditional == 0 {
            *ind.offset(k as isize) = (if *prev_ind as i32 + -(4) > 64 - 1 {
                if *ind.offset(k as isize) as i32 > *prev_ind as i32 + -(4) {
                    *prev_ind as i32 + -(4)
                } else if (*ind.offset(k as isize) as i32) < 64 - 1 {
                    64 - 1
                } else {
                    *ind.offset(k as isize) as i32
                }
            } else if *ind.offset(k as isize) as i32 > 64 - 1 {
                64 - 1
            } else if (*ind.offset(k as isize) as i32) < *prev_ind as i32 + -(4) {
                *prev_ind as i32 + -(4)
            } else {
                *ind.offset(k as isize) as i32
            }) as i8;
            *prev_ind = *ind.offset(k as isize);
        } else {
            *ind.offset(k as isize) = (*ind.offset(k as isize) as i32 - *prev_ind as i32) as i8;
            double_step_size_threshold =
                2 * MAX_DELTA_GAIN_QUANT - N_LEVELS_QGAIN + *prev_ind as i32;
            if *ind.offset(k as isize) as i32 > double_step_size_threshold {
                *ind.offset(k as isize) = (double_step_size_threshold
                    + (*ind.offset(k as isize) as i32 - double_step_size_threshold + 1 >> 1))
                    as i8;
            }
            *ind.offset(k as isize) = (if -(4) > 36 {
                if *ind.offset(k as isize) as i32 > -(4) {
                    -(4)
                } else if (*ind.offset(k as isize) as i32) < 36 {
                    36
                } else {
                    *ind.offset(k as isize) as i32
                }
            } else if *ind.offset(k as isize) as i32 > 36 {
                36
            } else if (*ind.offset(k as isize) as i32) < -(4) {
                -(4)
            } else {
                *ind.offset(k as isize) as i32
            }) as i8;
            if *ind.offset(k as isize) as i32 > double_step_size_threshold {
                *prev_ind = (*prev_ind as i32
                    + (((*ind.offset(k as isize) as u32) << 1) as i32 - double_step_size_threshold))
                    as i8;
                *prev_ind = silk_min_int(*prev_ind as i32, N_LEVELS_QGAIN - 1) as i8;
            } else {
                *prev_ind = (*prev_ind as i32 + *ind.offset(k as isize) as i32) as i8;
            }
            let ref mut fresh1 = *ind.offset(k as isize);
            *fresh1 = (*fresh1 as i32 - MIN_DELTA_GAIN_QUANT) as i8;
        }
        *gain_Q16.offset(k as isize) = silk_log2lin(silk_min_32(
            ((65536 * ((88 - 2) * 128 / 6) / (64 - 1)) as i64 * *prev_ind as i16 as i64 >> 16)
                as i32
                + OFFSET,
            3967,
        ));
        k += 1;
    }
}
pub unsafe fn silk_gains_dequant(
    gain_Q16: *mut i32,
    ind: *const i8,
    prev_ind: *mut i8,
    conditional: i32,
    nb_subfr: i32,
) {
    let mut k: i32 = 0;
    let mut ind_tmp: i32 = 0;
    let mut double_step_size_threshold: i32 = 0;
    k = 0;
    while k < nb_subfr {
        if k == 0 && conditional == 0 {
            *prev_ind = silk_max_int(*ind.offset(k as isize) as i32, *prev_ind as i32 - 16) as i8;
        } else {
            ind_tmp = *ind.offset(k as isize) as i32 + MIN_DELTA_GAIN_QUANT;
            double_step_size_threshold =
                2 * MAX_DELTA_GAIN_QUANT - N_LEVELS_QGAIN + *prev_ind as i32;
            if ind_tmp > double_step_size_threshold {
                *prev_ind = (*prev_ind as i32
                    + (((ind_tmp as u32) << 1) as i32 - double_step_size_threshold))
                    as i8;
            } else {
                *prev_ind = (*prev_ind as i32 + ind_tmp) as i8;
            }
        }
        *prev_ind = (if 0 > 64 - 1 {
            if *prev_ind as i32 > 0 {
                0
            } else if (*prev_ind as i32) < 64 - 1 {
                64 - 1
            } else {
                *prev_ind as i32
            }
        } else if *prev_ind as i32 > 64 - 1 {
            64 - 1
        } else if (*prev_ind as i32) < 0 {
            0
        } else {
            *prev_ind as i32
        }) as i8;
        *gain_Q16.offset(k as isize) = silk_log2lin(silk_min_32(
            ((65536 * ((88 - 2) * 128 / 6) / (64 - 1)) as i64 * *prev_ind as i16 as i64 >> 16)
                as i32
                + OFFSET,
            3967,
        ));
        k += 1;
    }
}
pub unsafe fn silk_gains_ID(ind: *const i8, nb_subfr: i32) -> i32 {
    let mut k: i32 = 0;
    let mut gainsID: i32 = 0;
    gainsID = 0;
    k = 0;
    while k < nb_subfr {
        gainsID = *ind.offset(k as isize) as i32 + ((gainsID as u32) << 8) as i32;
        k += 1;
    }
    return gainsID;
}