unsafe-libopus 0.2.0

libopus transpiled to rust by c2rust
Documentation
pub mod typedef_h {
    pub const silk_int16_MIN: i32 = i16::MIN as i32;
    pub const silk_int16_MAX: i32 = i16::MAX as i32;
}
use crate::silk::define::STEREO_INTERP_LEN_MS;

pub use self::typedef_h::{silk_int16_MAX, silk_int16_MIN};
use crate::silk::structs::stereo_dec_state;

use crate::externs::memcpy;
pub unsafe fn silk_stereo_MS_to_LR(
    state: *mut stereo_dec_state,
    x1: *mut i16,
    x2: *mut i16,
    pred_Q13: *const i32,
    fs_kHz: i32,
    frame_length: i32,
) {
    let mut n: i32 = 0;
    let mut denom_Q16: i32 = 0;
    let mut delta0_Q13: i32 = 0;
    let mut delta1_Q13: i32 = 0;
    let mut sum: i32 = 0;
    let mut diff: i32 = 0;
    let mut pred0_Q13: i32 = 0;
    let mut pred1_Q13: i32 = 0;
    memcpy(
        x1 as *mut core::ffi::c_void,
        ((*state).sMid).as_mut_ptr() as *const core::ffi::c_void,
        2_u64.wrapping_mul(::core::mem::size_of::<i16>() as u64),
    );
    memcpy(
        x2 as *mut core::ffi::c_void,
        ((*state).sSide).as_mut_ptr() as *const core::ffi::c_void,
        2_u64.wrapping_mul(::core::mem::size_of::<i16>() as u64),
    );
    memcpy(
        ((*state).sMid).as_mut_ptr() as *mut core::ffi::c_void,
        &mut *x1.offset(frame_length as isize) as *mut i16 as *const core::ffi::c_void,
        2_u64.wrapping_mul(::core::mem::size_of::<i16>() as u64),
    );
    memcpy(
        ((*state).sSide).as_mut_ptr() as *mut core::ffi::c_void,
        &mut *x2.offset(frame_length as isize) as *mut i16 as *const core::ffi::c_void,
        2_u64.wrapping_mul(::core::mem::size_of::<i16>() as u64),
    );
    pred0_Q13 = (*state).pred_prev_Q13[0 as usize] as i32;
    pred1_Q13 = (*state).pred_prev_Q13[1 as usize] as i32;
    denom_Q16 = ((1) << 16) / (8 * fs_kHz);
    delta0_Q13 = if 16 == 1 {
        ((*pred_Q13.offset(0 as isize) - (*state).pred_prev_Q13[0 as usize] as i32) as i16 as i32
            * denom_Q16 as i16 as i32
            >> 1)
            + ((*pred_Q13.offset(0 as isize) - (*state).pred_prev_Q13[0 as usize] as i32) as i16
                as i32
                * denom_Q16 as i16 as i32
                & 1)
    } else {
        ((*pred_Q13.offset(0 as isize) - (*state).pred_prev_Q13[0 as usize] as i32) as i16 as i32
            * denom_Q16 as i16 as i32
            >> 16 - 1)
            + 1
            >> 1
    };
    delta1_Q13 = if 16 == 1 {
        ((*pred_Q13.offset(1 as isize) - (*state).pred_prev_Q13[1 as usize] as i32) as i16 as i32
            * denom_Q16 as i16 as i32
            >> 1)
            + ((*pred_Q13.offset(1 as isize) - (*state).pred_prev_Q13[1 as usize] as i32) as i16
                as i32
                * denom_Q16 as i16 as i32
                & 1)
    } else {
        ((*pred_Q13.offset(1 as isize) - (*state).pred_prev_Q13[1 as usize] as i32) as i16 as i32
            * denom_Q16 as i16 as i32
            >> 16 - 1)
            + 1
            >> 1
    };
    n = 0;
    while n < STEREO_INTERP_LEN_MS * fs_kHz {
        pred0_Q13 += delta0_Q13;
        pred1_Q13 += delta1_Q13;
        sum = (((*x1.offset(n as isize) as i32
            + *x1.offset((n + 2) as isize) as i32
            + ((*x1.offset((n + 1) as isize) as u32) << 1) as i32) as u32)
            << 9) as i32;
        sum = (((*x2.offset((n + 1) as isize) as i32 as u32) << 8) as i32 as i64
            + (sum as i64 * pred0_Q13 as i16 as i64 >> 16)) as i32;
        sum = (sum as i64
            + (((*x1.offset((n + 1) as isize) as i32 as u32) << 11) as i32 as i64
                * pred1_Q13 as i16 as i64
                >> 16)) as i32;
        *x2.offset((n + 1) as isize) = (if (if 8 == 1 {
            (sum >> 1) + (sum & 1)
        } else {
            (sum >> 8 - 1) + 1 >> 1
        }) > silk_int16_MAX
        {
            silk_int16_MAX
        } else if (if 8 == 1 {
            (sum >> 1) + (sum & 1)
        } else {
            (sum >> 8 - 1) + 1 >> 1
        }) < silk_int16_MIN
        {
            silk_int16_MIN
        } else if 8 == 1 {
            (sum >> 1) + (sum & 1)
        } else {
            (sum >> 8 - 1) + 1 >> 1
        }) as i16;
        n += 1;
    }
    pred0_Q13 = *pred_Q13.offset(0 as isize);
    pred1_Q13 = *pred_Q13.offset(1 as isize);
    n = STEREO_INTERP_LEN_MS * fs_kHz;
    while n < frame_length {
        sum = (((*x1.offset(n as isize) as i32
            + *x1.offset((n + 2) as isize) as i32
            + ((*x1.offset((n + 1) as isize) as u32) << 1) as i32) as u32)
            << 9) as i32;
        sum = (((*x2.offset((n + 1) as isize) as i32 as u32) << 8) as i32 as i64
            + (sum as i64 * pred0_Q13 as i16 as i64 >> 16)) as i32;
        sum = (sum as i64
            + (((*x1.offset((n + 1) as isize) as i32 as u32) << 11) as i32 as i64
                * pred1_Q13 as i16 as i64
                >> 16)) as i32;
        *x2.offset((n + 1) as isize) = (if (if 8 == 1 {
            (sum >> 1) + (sum & 1)
        } else {
            (sum >> 8 - 1) + 1 >> 1
        }) > silk_int16_MAX
        {
            silk_int16_MAX
        } else if (if 8 == 1 {
            (sum >> 1) + (sum & 1)
        } else {
            (sum >> 8 - 1) + 1 >> 1
        }) < silk_int16_MIN
        {
            silk_int16_MIN
        } else if 8 == 1 {
            (sum >> 1) + (sum & 1)
        } else {
            (sum >> 8 - 1) + 1 >> 1
        }) as i16;
        n += 1;
    }
    (*state).pred_prev_Q13[0 as usize] = *pred_Q13.offset(0 as isize) as i16;
    (*state).pred_prev_Q13[1 as usize] = *pred_Q13.offset(1 as isize) as i16;
    n = 0;
    while n < frame_length {
        sum = *x1.offset((n + 1) as isize) as i32 + *x2.offset((n + 1) as isize) as i32;
        diff = *x1.offset((n + 1) as isize) as i32 - *x2.offset((n + 1) as isize) as i32;
        *x1.offset((n + 1) as isize) = (if sum > silk_int16_MAX {
            silk_int16_MAX
        } else if sum < silk_int16_MIN {
            silk_int16_MIN
        } else {
            sum
        }) as i16;
        *x2.offset((n + 1) as isize) = (if diff > silk_int16_MAX {
            silk_int16_MAX
        } else if diff < silk_int16_MIN {
            silk_int16_MIN
        } else {
            diff
        }) as i16;
        n += 1;
    }
}