unsafe-libopus 0.2.0

libopus transpiled to rust by c2rust
Documentation
use crate::externs::memset;
use crate::silk::define::TRANSITION_FRAMES;
use crate::silk::enc_API::silk_EncControlStruct;
use crate::silk::structs::silk_encoder_state;
pub unsafe fn silk_control_audio_bandwidth(
    psEncC: *mut silk_encoder_state,
    encControl: *mut silk_EncControlStruct,
) -> i32 {
    let mut fs_kHz: i32 = 0;
    let mut orig_kHz: i32 = 0;
    let mut fs_Hz: i32 = 0;
    orig_kHz = (*psEncC).fs_kHz;
    if orig_kHz == 0 {
        orig_kHz = (*psEncC).sLP.saved_fs_kHz;
    }
    fs_kHz = orig_kHz;
    fs_Hz = fs_kHz as i16 as i32 * 1000;
    if fs_Hz == 0 {
        fs_Hz = if (*psEncC).desiredInternal_fs_Hz < (*psEncC).API_fs_Hz {
            (*psEncC).desiredInternal_fs_Hz
        } else {
            (*psEncC).API_fs_Hz
        };
        fs_kHz = fs_Hz / 1000;
    } else if fs_Hz > (*psEncC).API_fs_Hz
        || fs_Hz > (*psEncC).maxInternal_fs_Hz
        || fs_Hz < (*psEncC).minInternal_fs_Hz
    {
        fs_Hz = (*psEncC).API_fs_Hz;
        fs_Hz = if fs_Hz < (*psEncC).maxInternal_fs_Hz {
            fs_Hz
        } else {
            (*psEncC).maxInternal_fs_Hz
        };
        fs_Hz = if fs_Hz > (*psEncC).minInternal_fs_Hz {
            fs_Hz
        } else {
            (*psEncC).minInternal_fs_Hz
        };
        fs_kHz = fs_Hz / 1000;
    } else {
        if (*psEncC).sLP.transition_frame_no >= TRANSITION_FRAMES {
            (*psEncC).sLP.mode = 0;
        }
        if (*psEncC).allow_bandwidth_switch != 0 || (*encControl).opusCanSwitch != 0 {
            if orig_kHz as i16 as i32 * 1000 > (*psEncC).desiredInternal_fs_Hz {
                if (*psEncC).sLP.mode == 0 {
                    (*psEncC).sLP.transition_frame_no = TRANSITION_FRAMES;
                    memset(
                        ((*psEncC).sLP.In_LP_State).as_mut_ptr() as *mut core::ffi::c_void,
                        0,
                        ::core::mem::size_of::<[i32; 2]>() as u64,
                    );
                }
                if (*encControl).opusCanSwitch != 0 {
                    (*psEncC).sLP.mode = 0;
                    fs_kHz = if orig_kHz == 16 { 12 } else { 8 };
                } else if (*psEncC).sLP.transition_frame_no <= 0 {
                    (*encControl).switchReady = 1;
                    (*encControl).maxBits -=
                        (*encControl).maxBits * 5 / ((*encControl).payloadSize_ms + 5);
                } else {
                    (*psEncC).sLP.mode = -(2);
                }
            } else if (orig_kHz as i16 as i32 * 1000) < (*psEncC).desiredInternal_fs_Hz {
                if (*encControl).opusCanSwitch != 0 {
                    fs_kHz = if orig_kHz == 8 { 12 } else { 16 };
                    (*psEncC).sLP.transition_frame_no = 0;
                    memset(
                        ((*psEncC).sLP.In_LP_State).as_mut_ptr() as *mut core::ffi::c_void,
                        0,
                        ::core::mem::size_of::<[i32; 2]>() as u64,
                    );
                    (*psEncC).sLP.mode = 1;
                } else if (*psEncC).sLP.mode == 0 {
                    (*encControl).switchReady = 1;
                    (*encControl).maxBits -=
                        (*encControl).maxBits * 5 / ((*encControl).payloadSize_ms + 5);
                } else {
                    (*psEncC).sLP.mode = 1;
                }
            } else if (*psEncC).sLP.mode < 0 {
                (*psEncC).sLP.mode = 1;
            }
        }
    }
    return fs_kHz;
}