├── .gitignore ├── src ├── lib.rs ├── enc.rs └── dec.rs ├── fdk-aac-sys ├── wrapper.h ├── src │ ├── lib.rs │ └── bindings.rs ├── bindgen ├── Cargo.toml ├── Cargo.lock └── build.rs ├── .gitmodules ├── README.md ├── Cargo.toml ├── Cargo.lock └── LICENSE /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod enc; 2 | pub mod dec; 3 | -------------------------------------------------------------------------------- /fdk-aac-sys/wrapper.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "fdk-aac-sys/aac"] 2 | path = fdk-aac-sys/aac 3 | url = https://github.com/haileys/fdk-aac-mirror 4 | -------------------------------------------------------------------------------- /fdk-aac-sys/src/lib.rs: -------------------------------------------------------------------------------- 1 | #![allow(non_upper_case_globals)] 2 | #![allow(non_camel_case_types)] 3 | #![allow(non_snake_case)] 4 | 5 | include!("bindings.rs"); 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # fdk-aac [![docs](https://docs.rs/fdk-aac/badge.svg)](https://docs.rs/fdk-aac) 2 | 3 | Rust bindings for libfdk-aac. 4 | 5 | ## Building 6 | 7 | ```sh-session 8 | $ git submodule update --init 9 | $ cargo build 10 | ``` 11 | 12 | ## License 13 | 14 | * This crate: MIT 15 | 16 | * libfdk-aac: [Bespoke license. Based on BSD, free, no patent grant](https://fedoraproject.org/wiki/Licensing/FDK-AAC) 17 | -------------------------------------------------------------------------------- /fdk-aac-sys/bindgen: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | bindgen -o src/bindings.rs wrapper.h -- "-I" "aac/libAACdec/include" "-I" "aac/libAACenc/include" "-I" "aac/libPCMutils/include" "-I" "aac/libFDK/include" "-I" "aac/libSYS/include" "-I" "aac/libMpegTPDec/include" "-I" "aac/libMpegTPEnc/include" "-I" "aac/libSBRdec/include" "-I" "aac/libSBRenc/include" "-I" "aac/libArithCoding/include" "-I" "aac/libDRCdec/include" "-I" "aac/libSACdec/include" "-I" "aac/libSACenc/include" 3 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "fdk-aac" 3 | version = "0.5.0" 4 | authors = ["Hailey Somerville "] 5 | edition = "2018" 6 | license = "MIT" 7 | description = "AAC encoding library binding to libfdk-aac" 8 | homepage = "https://github.com/haileys/fdk-aac-rs" 9 | repository = "https://github.com/haileys/fdk-aac-rs" 10 | 11 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 12 | 13 | [dependencies] 14 | fdk-aac-sys = { version = "0.5.0", path = "fdk-aac-sys" } 15 | -------------------------------------------------------------------------------- /fdk-aac-sys/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "fdk-aac-sys" 3 | version = "0.5.0" 4 | authors = ["Hailey Somerville "] 5 | edition = "2018" 6 | license = "MIT" 7 | description = "FFI bindings for libfdk-aac" 8 | homepage = "https://github.com/haileys/fdk-aac-rs" 9 | repository = "https://github.com/haileys/fdk-aac-rs" 10 | 11 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 12 | 13 | [build-dependencies] 14 | cc = { version = "1.0", features = ["parallel"] } 15 | -------------------------------------------------------------------------------- /fdk-aac-sys/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "cc" 5 | version = "1.0.50" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" 8 | dependencies = [ 9 | "jobserver", 10 | ] 11 | 12 | [[package]] 13 | name = "fdk-aac-sys" 14 | version = "0.3.0" 15 | dependencies = [ 16 | "cc", 17 | ] 18 | 19 | [[package]] 20 | name = "jobserver" 21 | version = "0.1.21" 22 | source = "registry+https://github.com/rust-lang/crates.io-index" 23 | checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" 24 | dependencies = [ 25 | "libc", 26 | ] 27 | 28 | [[package]] 29 | name = "libc" 30 | version = "0.2.69" 31 | source = "registry+https://github.com/rust-lang/crates.io-index" 32 | checksum = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005" 33 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "cc" 7 | version = "1.0.50" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" 10 | dependencies = [ 11 | "jobserver", 12 | ] 13 | 14 | [[package]] 15 | name = "fdk-aac" 16 | version = "0.5.0" 17 | dependencies = [ 18 | "fdk-aac-sys", 19 | ] 20 | 21 | [[package]] 22 | name = "fdk-aac-sys" 23 | version = "0.5.0" 24 | dependencies = [ 25 | "cc", 26 | ] 27 | 28 | [[package]] 29 | name = "jobserver" 30 | version = "0.1.21" 31 | source = "registry+https://github.com/rust-lang/crates.io-index" 32 | checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" 33 | dependencies = [ 34 | "libc", 35 | ] 36 | 37 | [[package]] 38 | name = "libc" 39 | version = "0.2.69" 40 | source = "registry+https://github.com/rust-lang/crates.io-index" 41 | checksum = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005" 42 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2021 Hailey Somerville 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /src/enc.rs: -------------------------------------------------------------------------------- 1 | use std::cmp; 2 | use std::fmt::{self, Display, Debug}; 3 | use std::mem::{self, MaybeUninit}; 4 | use std::os::raw::{c_void, c_uint, c_int}; 5 | use std::ptr; 6 | 7 | use fdk_aac_sys as sys; 8 | 9 | pub use sys::AACENC_InfoStruct as InfoStruct; 10 | 11 | pub struct EncoderError(sys::AACENC_ERROR); 12 | 13 | impl EncoderError { 14 | fn message(&self) -> &'static str { 15 | match self.0 { 16 | sys::AACENC_ERROR_AACENC_OK => "Ok", 17 | sys::AACENC_ERROR_AACENC_INVALID_HANDLE => "Handle passed to function call was invalid.", 18 | sys::AACENC_ERROR_AACENC_MEMORY_ERROR => "Memory allocation failed.", 19 | sys::AACENC_ERROR_AACENC_UNSUPPORTED_PARAMETER => "Parameter not available.", 20 | sys::AACENC_ERROR_AACENC_INVALID_CONFIG => "Configuration not provided.", 21 | sys::AACENC_ERROR_AACENC_INIT_ERROR => "General initialization error.", 22 | sys::AACENC_ERROR_AACENC_INIT_AAC_ERROR => "AAC library initialization error.", 23 | sys::AACENC_ERROR_AACENC_INIT_SBR_ERROR => "SBR library initialization error.", 24 | sys::AACENC_ERROR_AACENC_INIT_TP_ERROR => "Transport library initialization error.", 25 | sys::AACENC_ERROR_AACENC_INIT_META_ERROR => "Meta data library initialization error.", 26 | sys::AACENC_ERROR_AACENC_INIT_MPS_ERROR => "MPS library initialization error.", 27 | sys::AACENC_ERROR_AACENC_ENCODE_ERROR => "The encoding process was interrupted by an unexpected error.", 28 | sys::AACENC_ERROR_AACENC_ENCODE_EOF => "End of file reached.", 29 | _ => "Unknown error", 30 | } 31 | } 32 | } 33 | 34 | impl Debug for EncoderError { 35 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 36 | write!(f, "EncoderError {{ code: {:?}, message: {:?} }}", self.0 as c_int, self.message()) 37 | } 38 | } 39 | 40 | impl Display for EncoderError { 41 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 42 | write!(f, "{}", self.message()) 43 | } 44 | } 45 | 46 | fn check(e: sys::AACENC_ERROR) -> Result<(), EncoderError> { 47 | if e == sys::AACENC_ERROR_AACENC_OK { 48 | Ok(()) 49 | } else { 50 | Err(EncoderError(e)) 51 | } 52 | } 53 | 54 | struct EncoderHandle { 55 | ptr: sys::HANDLE_AACENCODER, 56 | } 57 | 58 | impl EncoderHandle { 59 | pub fn alloc(max_modules: usize, max_channels: usize) -> Result { 60 | let mut ptr: sys::HANDLE_AACENCODER = ptr::null_mut(); 61 | check(unsafe { 62 | sys::aacEncOpen(&mut ptr as *mut _, max_modules as c_uint, max_channels as c_uint) 63 | })?; 64 | Ok(EncoderHandle { ptr }) 65 | } 66 | } 67 | 68 | impl Drop for EncoderHandle { 69 | fn drop(&mut self) { 70 | unsafe { sys::aacEncClose(&mut self.ptr as *mut _); } 71 | } 72 | } 73 | 74 | #[derive(Debug, Clone, Copy)] 75 | pub enum BitRate { 76 | Cbr(u32), 77 | VbrVeryLow, 78 | VbrLow, 79 | VbrMedium, 80 | VbrHigh, 81 | VbrVeryHigh, 82 | } 83 | 84 | #[derive(Debug, Clone, Copy)] 85 | pub enum ChannelMode { 86 | Mono, 87 | Stereo, 88 | } 89 | 90 | pub struct EncoderParams { 91 | pub bit_rate: BitRate, 92 | pub sample_rate: u32, 93 | pub transport: Transport, 94 | pub channels: ChannelMode, 95 | } 96 | 97 | pub struct Encoder { 98 | handle: EncoderHandle, 99 | } 100 | 101 | #[derive(Debug)] 102 | pub enum Transport { 103 | Adts, 104 | Raw, 105 | } 106 | 107 | #[derive(Debug)] 108 | pub struct EncodeInfo { 109 | pub input_consumed: usize, 110 | pub output_size: usize, 111 | } 112 | 113 | impl Encoder { 114 | pub fn new(params: EncoderParams) -> Result { 115 | let handle = EncoderHandle::alloc(0, 2 /* hardcode stereo */)?; 116 | 117 | unsafe { 118 | // hardcode MPEG-4 AAC Low Complexity for now: 119 | check(sys::aacEncoder_SetParam(handle.ptr, sys::AACENC_PARAM_AACENC_AOT, 2))?; 120 | 121 | let bitrate_mode = match params.bit_rate { 122 | BitRate::Cbr(bitrate) => { 123 | check(sys::aacEncoder_SetParam(handle.ptr, sys::AACENC_PARAM_AACENC_BITRATE, bitrate))?; 124 | 0 125 | } 126 | BitRate::VbrVeryLow => 1, 127 | BitRate::VbrLow => 2, 128 | BitRate::VbrMedium => 3, 129 | BitRate::VbrHigh => 4, 130 | BitRate::VbrVeryHigh => 5, 131 | }; 132 | 133 | check(sys::aacEncoder_SetParam(handle.ptr, sys::AACENC_PARAM_AACENC_BITRATEMODE, bitrate_mode))?; 134 | 135 | check(sys::aacEncoder_SetParam(handle.ptr, sys::AACENC_PARAM_AACENC_SAMPLERATE, params.sample_rate))?; 136 | 137 | check(sys::aacEncoder_SetParam(handle.ptr, sys::AACENC_PARAM_AACENC_TRANSMUX, match params.transport { 138 | Transport::Adts => 2, 139 | Transport::Raw => 0, 140 | }))?; 141 | 142 | // hardcode SBR off for now 143 | check(sys::aacEncoder_SetParam(handle.ptr, sys::AACENC_PARAM_AACENC_SBR_MODE, 0))?; 144 | 145 | check(sys::aacEncoder_SetParam( 146 | handle.ptr, 147 | sys::AACENC_PARAM_AACENC_CHANNELMODE, 148 | match params.channels { 149 | ChannelMode::Mono => 1, 150 | ChannelMode::Stereo => 2, 151 | }, 152 | ))?; 153 | 154 | // call encode once with all null params according to docs 155 | check(sys::aacEncEncode(handle.ptr, ptr::null(), ptr::null(), ptr::null(), ptr::null_mut()))?; 156 | } 157 | 158 | Ok(Encoder { handle }) 159 | } 160 | 161 | pub fn info(&self) -> Result { 162 | let mut info = MaybeUninit::uninit(); 163 | check(unsafe { sys::aacEncInfo(self.handle.ptr, info.as_mut_ptr()) })?; 164 | Ok(unsafe { info.assume_init() }) 165 | } 166 | 167 | pub fn encode(&self, input: &[i16], output: &mut [u8]) -> Result { 168 | let input_len = cmp::min(i32::max_value() as usize, input.len()) as i32; 169 | 170 | let mut input_buf = input.as_ptr() as *mut i16; 171 | let mut input_buf_ident: c_int = sys::AACENC_BufferIdentifier_IN_AUDIO_DATA as c_int; 172 | let mut input_buf_size: c_int = input_len as c_int; 173 | let mut input_buf_el_size: c_int = mem::size_of::() as c_int; 174 | let input_desc = sys::AACENC_BufDesc { 175 | numBufs: 1, 176 | bufs: &mut input_buf as *mut _ as *mut *mut c_void, 177 | bufferIdentifiers: &mut input_buf_ident as *mut c_int, 178 | bufSizes: &mut input_buf_size as *mut c_int, 179 | bufElSizes: &mut input_buf_el_size as *mut c_int, 180 | }; 181 | 182 | let mut output_buf = output.as_mut_ptr(); 183 | let mut output_buf_ident: c_int = sys::AACENC_BufferIdentifier_OUT_BITSTREAM_DATA as c_int; 184 | let mut output_buf_size: c_int = output.len() as c_int; 185 | let mut output_buf_el_size: c_int = mem::size_of::() as c_int; 186 | let output_desc = sys::AACENC_BufDesc { 187 | numBufs: 1, 188 | bufs: &mut output_buf as *mut _ as *mut *mut c_void, 189 | bufferIdentifiers: &mut output_buf_ident as *mut _, 190 | bufSizes: &mut output_buf_size as *mut _, 191 | bufElSizes: &mut output_buf_el_size as *mut _, 192 | }; 193 | 194 | let in_args = sys::AACENC_InArgs { 195 | numInSamples: input_len, 196 | numAncBytes: 0, 197 | }; 198 | 199 | let mut out_args = unsafe { mem::zeroed() }; 200 | 201 | check(unsafe { sys::aacEncEncode(self.handle.ptr, &input_desc, &output_desc, &in_args, &mut out_args) })?; 202 | 203 | Ok(EncodeInfo { 204 | output_size: out_args.numOutBytes as usize, 205 | input_consumed: out_args.numInSamples as usize, 206 | }) 207 | } 208 | } 209 | 210 | impl Debug for Encoder { 211 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 212 | write!(f, "Encoder {{ handle: {:?} }}", self.handle.ptr) 213 | } 214 | } 215 | -------------------------------------------------------------------------------- /fdk-aac-sys/build.rs: -------------------------------------------------------------------------------- 1 | static SOURCES: &'static [&'static str] = &[ 2 | "aac/libAACdec/src/aac_ram.cpp", 3 | "aac/libAACdec/src/aac_rom.cpp", 4 | "aac/libAACdec/src/aacdec_drc.cpp", 5 | "aac/libAACdec/src/aacdec_hcr.cpp", 6 | "aac/libAACdec/src/aacdec_hcr_bit.cpp", 7 | "aac/libAACdec/src/aacdec_hcrs.cpp", 8 | "aac/libAACdec/src/aacdec_pns.cpp", 9 | "aac/libAACdec/src/aacdec_tns.cpp", 10 | "aac/libAACdec/src/aacdecoder.cpp", 11 | "aac/libAACdec/src/aacdecoder_lib.cpp", 12 | "aac/libAACdec/src/block.cpp", 13 | "aac/libAACdec/src/channel.cpp", 14 | "aac/libAACdec/src/channelinfo.cpp", 15 | "aac/libAACdec/src/conceal.cpp", 16 | "aac/libAACdec/src/FDK_delay.cpp", 17 | "aac/libAACdec/src/ldfiltbank.cpp", 18 | "aac/libAACdec/src/pulsedata.cpp", 19 | "aac/libAACdec/src/rvlc.cpp", 20 | "aac/libAACdec/src/rvlcbit.cpp", 21 | "aac/libAACdec/src/rvlcconceal.cpp", 22 | "aac/libAACdec/src/stereo.cpp", 23 | "aac/libAACdec/src/usacdec_ace_d4t64.cpp", 24 | "aac/libAACdec/src/usacdec_ace_ltp.cpp", 25 | "aac/libAACdec/src/usacdec_acelp.cpp", 26 | "aac/libAACdec/src/usacdec_fac.cpp", 27 | "aac/libAACdec/src/usacdec_lpc.cpp", 28 | "aac/libAACdec/src/usacdec_lpd.cpp", 29 | "aac/libAACdec/src/usacdec_rom.cpp", 30 | "aac/libAACenc/src/aacenc.cpp", 31 | "aac/libAACenc/src/aacenc_lib.cpp", 32 | "aac/libAACenc/src/aacenc_pns.cpp", 33 | "aac/libAACenc/src/aacEnc_ram.cpp", 34 | "aac/libAACenc/src/aacEnc_rom.cpp", 35 | "aac/libAACenc/src/aacenc_tns.cpp", 36 | "aac/libAACenc/src/adj_thr.cpp", 37 | "aac/libAACenc/src/band_nrg.cpp", 38 | "aac/libAACenc/src/bandwidth.cpp", 39 | "aac/libAACenc/src/bit_cnt.cpp", 40 | "aac/libAACenc/src/bitenc.cpp", 41 | "aac/libAACenc/src/block_switch.cpp", 42 | "aac/libAACenc/src/channel_map.cpp", 43 | "aac/libAACenc/src/chaosmeasure.cpp", 44 | "aac/libAACenc/src/dyn_bits.cpp", 45 | "aac/libAACenc/src/grp_data.cpp", 46 | "aac/libAACenc/src/intensity.cpp", 47 | "aac/libAACenc/src/line_pe.cpp", 48 | "aac/libAACenc/src/metadata_compressor.cpp", 49 | "aac/libAACenc/src/metadata_main.cpp", 50 | "aac/libAACenc/src/mps_main.cpp", 51 | "aac/libAACenc/src/ms_stereo.cpp", 52 | "aac/libAACenc/src/noisedet.cpp", 53 | "aac/libAACenc/src/pnsparam.cpp", 54 | "aac/libAACenc/src/pre_echo_control.cpp", 55 | "aac/libAACenc/src/psy_configuration.cpp", 56 | "aac/libAACenc/src/psy_main.cpp", 57 | "aac/libAACenc/src/qc_main.cpp", 58 | "aac/libAACenc/src/quantize.cpp", 59 | "aac/libAACenc/src/sf_estim.cpp", 60 | "aac/libAACenc/src/spreading.cpp", 61 | "aac/libAACenc/src/tonality.cpp", 62 | "aac/libAACenc/src/transform.cpp", 63 | "aac/libArithCoding/src/ac_arith_coder.cpp", 64 | "aac/libDRCdec/src/drcDec_gainDecoder.cpp", 65 | "aac/libDRCdec/src/drcDec_reader.cpp", 66 | "aac/libDRCdec/src/drcDec_rom.cpp", 67 | "aac/libDRCdec/src/drcDec_selectionProcess.cpp", 68 | "aac/libDRCdec/src/drcDec_tools.cpp", 69 | "aac/libDRCdec/src/drcGainDec_init.cpp", 70 | "aac/libDRCdec/src/drcGainDec_preprocess.cpp", 71 | "aac/libDRCdec/src/drcGainDec_process.cpp", 72 | "aac/libDRCdec/src/FDK_drcDecLib.cpp", 73 | "aac/libFDK/src/autocorr2nd.cpp", 74 | "aac/libFDK/src/dct.cpp", 75 | "aac/libFDK/src/FDK_bitbuffer.cpp", 76 | "aac/libFDK/src/FDK_core.cpp", 77 | "aac/libFDK/src/FDK_crc.cpp", 78 | "aac/libFDK/src/FDK_decorrelate.cpp", 79 | "aac/libFDK/src/FDK_hybrid.cpp", 80 | "aac/libFDK/src/FDK_lpc.cpp", 81 | "aac/libFDK/src/FDK_matrixCalloc.cpp", 82 | "aac/libFDK/src/FDK_qmf_domain.cpp", 83 | "aac/libFDK/src/FDK_tools_rom.cpp", 84 | "aac/libFDK/src/FDK_trigFcts.cpp", 85 | "aac/libFDK/src/fft.cpp", 86 | "aac/libFDK/src/fft_rad2.cpp", 87 | "aac/libFDK/src/fixpoint_math.cpp", 88 | "aac/libFDK/src/huff_nodes.cpp", 89 | "aac/libFDK/src/mdct.cpp", 90 | "aac/libFDK/src/nlc_dec.cpp", 91 | "aac/libFDK/src/qmf.cpp", 92 | "aac/libFDK/src/scale.cpp", 93 | "aac/libMpegTPDec/src/tpdec_adif.cpp", 94 | "aac/libMpegTPDec/src/tpdec_adts.cpp", 95 | "aac/libMpegTPDec/src/tpdec_asc.cpp", 96 | "aac/libMpegTPDec/src/tpdec_drm.cpp", 97 | "aac/libMpegTPDec/src/tpdec_latm.cpp", 98 | "aac/libMpegTPDec/src/tpdec_lib.cpp", 99 | "aac/libMpegTPEnc/src/tpenc_adif.cpp", 100 | "aac/libMpegTPEnc/src/tpenc_adts.cpp", 101 | "aac/libMpegTPEnc/src/tpenc_asc.cpp", 102 | "aac/libMpegTPEnc/src/tpenc_latm.cpp", 103 | "aac/libMpegTPEnc/src/tpenc_lib.cpp", 104 | "aac/libPCMutils/src/limiter.cpp", 105 | "aac/libPCMutils/src/pcm_utils.cpp", 106 | "aac/libPCMutils/src/pcmdmx_lib.cpp", 107 | "aac/libSACdec/src/sac_bitdec.cpp", 108 | "aac/libSACdec/src/sac_calcM1andM2.cpp", 109 | "aac/libSACdec/src/sac_dec.cpp", 110 | "aac/libSACdec/src/sac_dec_conceal.cpp", 111 | "aac/libSACdec/src/sac_dec_lib.cpp", 112 | "aac/libSACdec/src/sac_process.cpp", 113 | "aac/libSACdec/src/sac_qmf.cpp", 114 | "aac/libSACdec/src/sac_reshapeBBEnv.cpp", 115 | "aac/libSACdec/src/sac_rom.cpp", 116 | "aac/libSACdec/src/sac_smoothing.cpp", 117 | "aac/libSACdec/src/sac_stp.cpp", 118 | "aac/libSACdec/src/sac_tsd.cpp", 119 | "aac/libSACenc/src/sacenc_bitstream.cpp", 120 | "aac/libSACenc/src/sacenc_delay.cpp", 121 | "aac/libSACenc/src/sacenc_dmx_tdom_enh.cpp", 122 | "aac/libSACenc/src/sacenc_filter.cpp", 123 | "aac/libSACenc/src/sacenc_framewindowing.cpp", 124 | "aac/libSACenc/src/sacenc_huff_tab.cpp", 125 | "aac/libSACenc/src/sacenc_lib.cpp", 126 | "aac/libSACenc/src/sacenc_nlc_enc.cpp", 127 | "aac/libSACenc/src/sacenc_onsetdetect.cpp", 128 | "aac/libSACenc/src/sacenc_paramextract.cpp", 129 | "aac/libSACenc/src/sacenc_staticgain.cpp", 130 | "aac/libSACenc/src/sacenc_tree.cpp", 131 | "aac/libSACenc/src/sacenc_vectorfunctions.cpp", 132 | "aac/libSBRdec/src/env_calc.cpp", 133 | "aac/libSBRdec/src/env_dec.cpp", 134 | "aac/libSBRdec/src/env_extr.cpp", 135 | "aac/libSBRdec/src/hbe.cpp", 136 | "aac/libSBRdec/src/HFgen_preFlat.cpp", 137 | "aac/libSBRdec/src/huff_dec.cpp", 138 | "aac/libSBRdec/src/lpp_tran.cpp", 139 | "aac/libSBRdec/src/psbitdec.cpp", 140 | "aac/libSBRdec/src/psdec.cpp", 141 | "aac/libSBRdec/src/psdec_drm.cpp", 142 | "aac/libSBRdec/src/psdecrom_drm.cpp", 143 | "aac/libSBRdec/src/pvc_dec.cpp", 144 | "aac/libSBRdec/src/sbr_crc.cpp", 145 | "aac/libSBRdec/src/sbr_deb.cpp", 146 | "aac/libSBRdec/src/sbr_dec.cpp", 147 | "aac/libSBRdec/src/sbr_ram.cpp", 148 | "aac/libSBRdec/src/sbr_rom.cpp", 149 | "aac/libSBRdec/src/sbrdec_drc.cpp", 150 | "aac/libSBRdec/src/sbrdec_freq_sca.cpp", 151 | "aac/libSBRdec/src/sbrdecoder.cpp", 152 | "aac/libSBRenc/src/bit_sbr.cpp", 153 | "aac/libSBRenc/src/code_env.cpp", 154 | "aac/libSBRenc/src/env_bit.cpp", 155 | "aac/libSBRenc/src/env_est.cpp", 156 | "aac/libSBRenc/src/fram_gen.cpp", 157 | "aac/libSBRenc/src/invf_est.cpp", 158 | "aac/libSBRenc/src/mh_det.cpp", 159 | "aac/libSBRenc/src/nf_est.cpp", 160 | "aac/libSBRenc/src/ps_bitenc.cpp", 161 | "aac/libSBRenc/src/ps_encode.cpp", 162 | "aac/libSBRenc/src/ps_main.cpp", 163 | "aac/libSBRenc/src/resampler.cpp", 164 | "aac/libSBRenc/src/sbr_encoder.cpp", 165 | "aac/libSBRenc/src/sbr_misc.cpp", 166 | "aac/libSBRenc/src/sbrenc_freq_sca.cpp", 167 | "aac/libSBRenc/src/sbrenc_ram.cpp", 168 | "aac/libSBRenc/src/sbrenc_rom.cpp", 169 | "aac/libSBRenc/src/ton_corr.cpp", 170 | "aac/libSBRenc/src/tran_det.cpp", 171 | "aac/libSYS/src/genericStds.cpp", 172 | "aac/libSYS/src/syslib_channelMapDescr.cpp", 173 | ]; 174 | 175 | static INCLUDE_DIRS: &'static [&'static str] = &[ 176 | "aac/libAACdec/include", 177 | "aac/libAACenc/include", 178 | "aac/libPCMutils/include", 179 | "aac/libFDK/include", 180 | "aac/libSYS/include", 181 | "aac/libMpegTPDec/include", 182 | "aac/libMpegTPEnc/include", 183 | "aac/libSBRdec/include", 184 | "aac/libSBRenc/include", 185 | "aac/libArithCoding/include", 186 | "aac/libDRCdec/include", 187 | "aac/libSACdec/include", 188 | "aac/libSACenc/include", 189 | ]; 190 | 191 | fn main() { 192 | for src in SOURCES { 193 | // Tell cargo to invalidate the built crate whenever the wrapper changes 194 | println!("cargo:rerun-if-changed={}", src); 195 | } 196 | 197 | let mut cc = cc::Build::new(); 198 | 199 | cc.warnings(false); 200 | cc.files(SOURCES); 201 | cc.define("FDK_FALLTHROUGH", ""); 202 | 203 | for include in INCLUDE_DIRS { 204 | cc.include(include); 205 | } 206 | 207 | cc.compile("libfdk-aac.a"); 208 | 209 | println!("cargo:rustc-link-lib=fdk-aac"); 210 | 211 | if cfg!(target_os = "linux") { 212 | println!("cargo:rustc-link-lib=stdc++"); 213 | } 214 | 215 | if cfg!(target_os = "macos") { 216 | println!("cargo:rustc-link-lib=c++"); 217 | } 218 | } 219 | -------------------------------------------------------------------------------- /src/dec.rs: -------------------------------------------------------------------------------- 1 | use std::fmt::{self, Display, Debug}; 2 | use std::os::raw::{c_uint, c_int}; 3 | 4 | use fdk_aac_sys as sys; 5 | 6 | pub use sys::CStreamInfo as StreamInfo; 7 | 8 | #[derive(Clone, Copy, PartialEq, Eq)] 9 | pub struct DecoderError(sys::AAC_DECODER_ERROR); 10 | 11 | impl DecoderError { 12 | pub const OUT_OF_MEMORY: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_OUT_OF_MEMORY); 13 | pub const UNKNOWN: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_UNKNOWN); 14 | pub const TRANSPORT_SYNC_ERROR: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_TRANSPORT_SYNC_ERROR); 15 | pub const NOT_ENOUGH_BITS: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_NOT_ENOUGH_BITS); 16 | pub const INVALID_HANDLE: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_INVALID_HANDLE); 17 | pub const UNSUPPORTED_AOT: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_AOT); 18 | pub const UNSUPPORTED_FORMAT: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_FORMAT); 19 | pub const UNSUPPORTED_ER_FORMAT: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_ER_FORMAT); 20 | pub const UNSUPPORTED_EPCONFIG: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_EPCONFIG); 21 | pub const UNSUPPORTED_MULTILAYER: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_MULTILAYER); 22 | pub const UNSUPPORTED_CHANNELCONFIG: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_CHANNELCONFIG); 23 | pub const UNSUPPORTED_SAMPLINGRATE: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_SAMPLINGRATE); 24 | pub const INVALID_SBR_CONFIG: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_INVALID_SBR_CONFIG); 25 | pub const SET_PARAM_FAIL: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_SET_PARAM_FAIL); 26 | pub const NEED_TO_RESTART: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_NEED_TO_RESTART); 27 | pub const OUTPUT_BUFFER_TOO_SMALL: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_OUTPUT_BUFFER_TOO_SMALL); 28 | pub const TRANSPORT_ERROR: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_TRANSPORT_ERROR); 29 | pub const PARSE_ERROR: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_PARSE_ERROR); 30 | pub const UNSUPPORTED_EXTENSION_PAYLOAD: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_EXTENSION_PAYLOAD); 31 | pub const DECODE_FRAME_ERROR: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_DECODE_FRAME_ERROR); 32 | pub const CRC_ERROR: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_CRC_ERROR); 33 | pub const INVALID_CODE_BOOK: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_INVALID_CODE_BOOK); 34 | pub const UNSUPPORTED_PREDICTION: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_PREDICTION); 35 | pub const UNSUPPORTED_CCE: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_CCE); 36 | pub const UNSUPPORTED_LFE: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_LFE); 37 | pub const UNSUPPORTED_GAIN_CONTROL_DATA: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_GAIN_CONTROL_DATA); 38 | pub const UNSUPPORTED_SBA: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_SBA); 39 | pub const TNS_READ_ERROR: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_TNS_READ_ERROR); 40 | pub const RVLC_ERROR: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_RVLC_ERROR); 41 | pub const ANC_DATA_ERROR: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_ANC_DATA_ERROR); 42 | pub const TOO_SMALL_ANC_BUFFER: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_TOO_SMALL_ANC_BUFFER); 43 | pub const TOO_MANY_ANC_ELEMENTS: DecoderError = DecoderError(sys::AAC_DECODER_ERROR_AAC_DEC_TOO_MANY_ANC_ELEMENTS); 44 | 45 | pub fn message(&self) -> &'static str { 46 | match self.0 { 47 | sys::AAC_DECODER_ERROR_AAC_DEC_OK => "No error occurred. Output buffer is valid and error free.", 48 | sys::AAC_DECODER_ERROR_AAC_DEC_OUT_OF_MEMORY => "Heap returned NULL pointer. Output buffer is invalid.", 49 | sys::AAC_DECODER_ERROR_AAC_DEC_UNKNOWN => "Error condition is of unknown reason, or from a another module. Output buffer is invalid.", 50 | sys::AAC_DECODER_ERROR_aac_dec_sync_error_start => "Synchronization errors. Output buffer is invalid.", 51 | sys::AAC_DECODER_ERROR_AAC_DEC_TRANSPORT_SYNC_ERROR => "The transport decoder had synchronization problems. Do not exit decoding. Just feed new bitstream data.", 52 | sys::AAC_DECODER_ERROR_AAC_DEC_NOT_ENOUGH_BITS => "The input buffer ran out of bits.", 53 | sys::AAC_DECODER_ERROR_aac_dec_init_error_start => "Initialization errors. Output buffer is invalid.", 54 | sys::AAC_DECODER_ERROR_AAC_DEC_INVALID_HANDLE => "The handle passed to the function call was invalid (NULL).", 55 | sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_AOT => "The AOT found in the configuration is not supported.", 56 | sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_FORMAT => "The bitstream format is not supported. ", 57 | sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_ER_FORMAT => "The error resilience tool format is not supported.", 58 | sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_EPCONFIG => "The error protection format is not supported.", 59 | sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_MULTILAYER => "More than one layer for AAC scalable is not supported.", 60 | sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_CHANNELCONFIG => "The channel configuration (either number or arrangement) is not supported.", 61 | sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_SAMPLINGRATE => "The sample rate specified in the configuration is not supported.", 62 | sys::AAC_DECODER_ERROR_AAC_DEC_INVALID_SBR_CONFIG => "The SBR configuration is not supported.", 63 | sys::AAC_DECODER_ERROR_AAC_DEC_SET_PARAM_FAIL => "The parameter could not be set. Either the value was out of range or the parameter does not exist.", 64 | sys::AAC_DECODER_ERROR_AAC_DEC_NEED_TO_RESTART => "The decoder needs to be restarted, since the required configuration change cannot be performed.", 65 | sys::AAC_DECODER_ERROR_AAC_DEC_OUTPUT_BUFFER_TOO_SMALL => "The provided output buffer is too small.", 66 | sys::AAC_DECODER_ERROR_aac_dec_decode_error_start => "Decode errors. Output buffer is valid but concealed.", 67 | sys::AAC_DECODER_ERROR_AAC_DEC_TRANSPORT_ERROR => "The transport decoder encountered an unexpected error.", 68 | sys::AAC_DECODER_ERROR_AAC_DEC_PARSE_ERROR => "Error while parsing the bitstream. Most probably it is corrupted, or the system crashed.", 69 | sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_EXTENSION_PAYLOAD => "Error while parsing the extension payload of the bitstream. The extension payload type found is not supported.", 70 | sys::AAC_DECODER_ERROR_AAC_DEC_DECODE_FRAME_ERROR => "The parsed bitstream value is out of range. Most probably the bitstream is corrupt, or the system crashed.", 71 | sys::AAC_DECODER_ERROR_AAC_DEC_CRC_ERROR => "The embedded CRC did not match.", 72 | sys::AAC_DECODER_ERROR_AAC_DEC_INVALID_CODE_BOOK => "An invalid codebook was signaled. Most probably the bitstream is corrupt, or the system crashed.", 73 | sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_PREDICTION => "Predictor found, but not supported in the AAC Low Complexity profile. Most probably the bitstream is corrupt, or has a wrong format.", 74 | sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_CCE => "A CCE element was found which is not supported. Most probably the bitstream is corrupt, or has a wrong format.", 75 | sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_LFE => "A LFE element was found which is not supported. Most probably the bitstream is corrupt, or has a wrong format.", 76 | sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_GAIN_CONTROL_DATA => "Gain control data found but not supported. Most probably the bitstream is corrupt, or has a wrong format.", 77 | sys::AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_SBA => "SBA found, but currently not supported in the BSAC profile.", 78 | sys::AAC_DECODER_ERROR_AAC_DEC_TNS_READ_ERROR => "Error while reading TNS data. Most probably the bitstream is corrupt or the system crashed.", 79 | sys::AAC_DECODER_ERROR_AAC_DEC_RVLC_ERROR => "Error while decoding error resilient data.", 80 | sys::AAC_DECODER_ERROR_aac_dec_anc_data_error_start => "Ancillary data errors. Output buffer is valid.", 81 | sys::AAC_DECODER_ERROR_AAC_DEC_ANC_DATA_ERROR => "Non severe error concerning the ancillary data handling.", 82 | sys::AAC_DECODER_ERROR_AAC_DEC_TOO_SMALL_ANC_BUFFER => "The registered ancillary data buffer is too small to receive the parsed data.", 83 | sys::AAC_DECODER_ERROR_AAC_DEC_TOO_MANY_ANC_ELEMENTS => "More than the allowed number of ancillary data elements should be written to buffer.", 84 | _ => "Unknown error", 85 | } 86 | } 87 | } 88 | 89 | impl Debug for DecoderError { 90 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 91 | write!(f, "DecoderError {{ code: {:?}, message: {:?} }}", self.0 as c_int, self.message()) 92 | } 93 | } 94 | 95 | impl Display for DecoderError { 96 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 97 | write!(f, "{}", self.message()) 98 | } 99 | } 100 | 101 | fn check(e: sys::AACENC_ERROR) -> Result<(), DecoderError> { 102 | if e == sys::AAC_DECODER_ERROR_AAC_DEC_OK { 103 | Ok(()) 104 | } else { 105 | Err(DecoderError(e)) 106 | } 107 | } 108 | 109 | #[derive(Debug)] 110 | pub struct Decoder { 111 | handle: sys::HANDLE_AACDECODER, 112 | } 113 | 114 | impl Decoder { 115 | pub fn new(transport: Transport) -> Self { 116 | let handle = match transport { 117 | Transport::Adts => { 118 | unsafe { sys::aacDecoder_Open(sys::TRANSPORT_TYPE_TT_MP4_ADTS, 1) } 119 | } 120 | }; 121 | 122 | Decoder { handle } 123 | } 124 | 125 | pub fn config_raw(&mut self, audio_specic_config: &[u8]) -> Result<(), DecoderError> { 126 | unsafe { 127 | let mut asc_ptr = audio_specic_config.as_ptr() as *mut u8; 128 | let asc_len = audio_specic_config.len() as c_uint; 129 | check(sys::aacDecoder_ConfigRaw(self.handle, &mut asc_ptr as *mut _, &asc_len as *const _)) 130 | } 131 | } 132 | 133 | pub fn set_min_output_channels(&mut self, channels: usize) -> Result<(), DecoderError> { 134 | unsafe { 135 | check(sys::aacDecoder_SetParam(self.handle, 136 | sys::AACDEC_PARAM_AAC_PCM_MIN_OUTPUT_CHANNELS, 137 | channels as i32)) 138 | } 139 | } 140 | 141 | pub fn set_max_output_channels(&mut self, channels: usize) -> Result<(), DecoderError> { 142 | unsafe { 143 | check(sys::aacDecoder_SetParam(self.handle, 144 | sys::AACDEC_PARAM_AAC_PCM_MAX_OUTPUT_CHANNELS, 145 | channels as i32)) 146 | } 147 | } 148 | 149 | pub fn fill(&mut self, data: &[u8]) -> Result { 150 | unsafe { 151 | let mut data_ptr = data.as_ptr() as *const u8 as *mut u8; 152 | let data_len = data.len() as c_uint; 153 | let mut bytes_valid: c_uint = data_len; 154 | 155 | check(sys::aacDecoder_Fill(self.handle, 156 | &mut data_ptr as *mut _, 157 | &data_len as *const _, 158 | &mut bytes_valid as *mut _))?; 159 | 160 | Ok(data.len() - bytes_valid as usize) 161 | } 162 | } 163 | 164 | pub fn decode_frame(&mut self, pcm: &mut [i16]) -> Result<(), DecoderError> { 165 | unsafe { 166 | check(sys::aacDecoder_DecodeFrame(self.handle, 167 | pcm.as_mut_ptr() as *mut i16, 168 | pcm.len() as c_int, 169 | 0)) 170 | } 171 | } 172 | 173 | pub fn decoded_frame_size(&self) -> usize { 174 | let stream_info = self.stream_info(); 175 | 176 | stream_info.numChannels as usize * stream_info.frameSize as usize 177 | } 178 | 179 | pub fn stream_info(&self) -> &StreamInfo { 180 | unsafe { &*sys::aacDecoder_GetStreamInfo(self.handle) } 181 | } 182 | } 183 | 184 | unsafe impl Send for Decoder {} 185 | unsafe impl Sync for Decoder {} 186 | 187 | impl Drop for Decoder { 188 | fn drop(&mut self) { 189 | unsafe { sys::aacDecoder_Close(self.handle); } 190 | } 191 | } 192 | 193 | #[derive(Clone, Copy, Debug)] 194 | pub enum Transport { 195 | Adts, 196 | } 197 | -------------------------------------------------------------------------------- /fdk-aac-sys/src/bindings.rs: -------------------------------------------------------------------------------- 1 | /* automatically generated by rust-bindgen */ 2 | 3 | pub const SHORT_BITS: u32 = 16; 4 | pub const CHAR_BITS: u32 = 8; 5 | pub const __DARWIN_ONLY_64_BIT_INO_T: u32 = 0; 6 | pub const __DARWIN_ONLY_VERS_1050: u32 = 0; 7 | pub const __DARWIN_ONLY_UNIX_CONFORMANCE: u32 = 1; 8 | pub const __DARWIN_UNIX03: u32 = 1; 9 | pub const __DARWIN_64_BIT_INO_T: u32 = 1; 10 | pub const __DARWIN_VERS_1050: u32 = 1; 11 | pub const __DARWIN_NON_CANCELABLE: u32 = 0; 12 | pub const __DARWIN_SUF_64_BIT_INO_T: &'static [u8; 9usize] = b"$INODE64\0"; 13 | pub const __DARWIN_SUF_1050: &'static [u8; 6usize] = b"$1050\0"; 14 | pub const __DARWIN_SUF_EXTSN: &'static [u8; 14usize] = b"$DARWIN_EXTSN\0"; 15 | pub const __DARWIN_C_ANSI: u32 = 4096; 16 | pub const __DARWIN_C_FULL: u32 = 900000; 17 | pub const __DARWIN_C_LEVEL: u32 = 900000; 18 | pub const __STDC_WANT_LIB_EXT1__: u32 = 1; 19 | pub const __DARWIN_NO_LONG_LONG: u32 = 0; 20 | pub const _DARWIN_FEATURE_64_BIT_INODE: u32 = 1; 21 | pub const _DARWIN_FEATURE_ONLY_UNIX_CONFORMANCE: u32 = 1; 22 | pub const _DARWIN_FEATURE_UNIX_CONFORMANCE: u32 = 3; 23 | pub const WAV_BITS: u32 = 16; 24 | pub const SAMPLE_BITS: u32 = 16; 25 | pub const ALIGNMENT_DEFAULT: u32 = 8; 26 | pub const ALIGNMENT_EXTRES: u32 = 8; 27 | pub const M_PI: f64 = 3.141592653589793; 28 | pub const FDK_EXITCODE_OK: u32 = 0; 29 | pub const FDK_EXITCODE_USAGE: u32 = 64; 30 | pub const FDK_EXITCODE_DATAERROR: u32 = 65; 31 | pub const FDK_EXITCODE_NOINPUT: u32 = 66; 32 | pub const FDK_EXITCODE_UNAVAILABLE: u32 = 69; 33 | pub const FDK_EXITCODE_SOFTWARE: u32 = 70; 34 | pub const FDK_EXITCODE_CANTCREATE: u32 = 73; 35 | pub const FDK_EXITCODE_IOERROR: u32 = 74; 36 | pub const FDK_MAX_OVERLAYS: u32 = 8; 37 | pub const AC_ER_VCB11: u32 = 1; 38 | pub const AC_ER_RVLC: u32 = 2; 39 | pub const AC_ER_HCR: u32 = 4; 40 | pub const AC_SCALABLE: u32 = 8; 41 | pub const AC_ELD: u32 = 16; 42 | pub const AC_LD: u32 = 32; 43 | pub const AC_ER: u32 = 64; 44 | pub const AC_BSAC: u32 = 128; 45 | pub const AC_USAC: u32 = 256; 46 | pub const AC_RSV603DA: u32 = 512; 47 | pub const AC_HDAAC: u32 = 1024; 48 | pub const AC_RSVD50: u32 = 16384; 49 | pub const AC_SBR_PRESENT: u32 = 32768; 50 | pub const AC_SBRCRC: u32 = 65536; 51 | pub const AC_PS_PRESENT: u32 = 131072; 52 | pub const AC_MPS_PRESENT: u32 = 262144; 53 | pub const AC_DRM: u32 = 524288; 54 | pub const AC_INDEP: u32 = 1048576; 55 | pub const AC_MPEGD_RES: u32 = 2097152; 56 | pub const AC_SAOC_PRESENT: u32 = 4194304; 57 | pub const AC_DAB: u32 = 8388608; 58 | pub const AC_ELD_DOWNSCALE: u32 = 16777216; 59 | pub const AC_LD_MPS: u32 = 33554432; 60 | pub const AC_DRC_PRESENT: u32 = 67108864; 61 | pub const AC_USAC_SCFGI3: u32 = 134217728; 62 | pub const AC_CM_DET_CFG_CHANGE: u32 = 1; 63 | pub const AC_CM_ALLOC_MEM: u32 = 2; 64 | pub const AC_EL_USAC_TW: u32 = 1; 65 | pub const AC_EL_USAC_NOISE: u32 = 2; 66 | pub const AC_EL_USAC_ITES: u32 = 4; 67 | pub const AC_EL_USAC_PVC: u32 = 8; 68 | pub const AC_EL_USAC_MPS212: u32 = 16; 69 | pub const AC_EL_USAC_LFE: u32 = 32; 70 | pub const AC_EL_USAC_CP_POSSIBLE: u32 = 64; 71 | pub const AC_EL_ENHANCED_NOISE: u32 = 128; 72 | pub const AC_EL_IGF_AFTER_TNS: u32 = 256; 73 | pub const AC_EL_IGF_INDEP_TILING: u32 = 512; 74 | pub const AC_EL_IGF_USE_ENF: u32 = 1024; 75 | pub const AC_EL_FULLBANDLPD: u32 = 2048; 76 | pub const AC_EL_LPDSTEREOIDX: u32 = 4096; 77 | pub const AC_EL_LFE: u32 = 8192; 78 | pub const CC_MPEG_ID: u32 = 1048576; 79 | pub const CC_IS_BASELAYER: u32 = 2097152; 80 | pub const CC_PROTECTION: u32 = 4194304; 81 | pub const CC_SBR: u32 = 8388608; 82 | pub const CC_SBRCRC: u32 = 65536; 83 | pub const CC_SAC: u32 = 131072; 84 | pub const CC_RVLC: u32 = 16777216; 85 | pub const CC_VCB11: u32 = 33554432; 86 | pub const CC_HCR: u32 = 67108864; 87 | pub const CC_PSEUDO_SURROUND: u32 = 134217728; 88 | pub const CC_USAC_NOISE: u32 = 268435456; 89 | pub const CC_USAC_TW: u32 = 536870912; 90 | pub const CC_USAC_HBE: u32 = 1073741824; 91 | pub const USAC_ID_BIT: u32 = 16; 92 | pub const EXT_ID_BITS: u32 = 4; 93 | pub const CAPF_AAC_LC: u32 = 1; 94 | pub const CAPF_ER_AAC_LD: u32 = 2; 95 | pub const CAPF_ER_AAC_SCAL: u32 = 4; 96 | pub const CAPF_ER_AAC_LC: u32 = 8; 97 | pub const CAPF_AAC_480: u32 = 16; 98 | pub const CAPF_AAC_512: u32 = 32; 99 | pub const CAPF_AAC_960: u32 = 64; 100 | pub const CAPF_AAC_1024: u32 = 128; 101 | pub const CAPF_AAC_HCR: u32 = 256; 102 | pub const CAPF_AAC_VCB11: u32 = 512; 103 | pub const CAPF_AAC_RVLC: u32 = 1024; 104 | pub const CAPF_AAC_MPEG4: u32 = 2048; 105 | pub const CAPF_AAC_DRC: u32 = 4096; 106 | pub const CAPF_AAC_CONCEALMENT: u32 = 8192; 107 | pub const CAPF_AAC_DRM_BSFORMAT: u32 = 16384; 108 | pub const CAPF_ER_AAC_ELD: u32 = 32768; 109 | pub const CAPF_ER_AAC_BSAC: u32 = 65536; 110 | pub const CAPF_AAC_ELD_DOWNSCALE: u32 = 262144; 111 | pub const CAPF_AAC_USAC_LP: u32 = 1048576; 112 | pub const CAPF_AAC_USAC: u32 = 2097152; 113 | pub const CAPF_ER_AAC_ELDV2: u32 = 8388608; 114 | pub const CAPF_AAC_UNIDRC: u32 = 16777216; 115 | pub const CAPF_ADTS: u32 = 1; 116 | pub const CAPF_ADIF: u32 = 2; 117 | pub const CAPF_LATM: u32 = 4; 118 | pub const CAPF_LOAS: u32 = 8; 119 | pub const CAPF_RAWPACKETS: u32 = 16; 120 | pub const CAPF_DRM: u32 = 32; 121 | pub const CAPF_RSVD50: u32 = 64; 122 | pub const CAPF_SBR_LP: u32 = 1; 123 | pub const CAPF_SBR_HQ: u32 = 2; 124 | pub const CAPF_SBR_DRM_BS: u32 = 4; 125 | pub const CAPF_SBR_CONCEALMENT: u32 = 8; 126 | pub const CAPF_SBR_DRC: u32 = 16; 127 | pub const CAPF_SBR_PS_MPEG: u32 = 32; 128 | pub const CAPF_SBR_PS_DRM: u32 = 64; 129 | pub const CAPF_SBR_ELD_DOWNSCALE: u32 = 128; 130 | pub const CAPF_SBR_HBEHQ: u32 = 256; 131 | pub const CAPF_DMX_BLIND: u32 = 1; 132 | pub const CAPF_DMX_PCE: u32 = 2; 133 | pub const CAPF_DMX_ARIB: u32 = 4; 134 | pub const CAPF_DMX_DVB: u32 = 8; 135 | pub const CAPF_DMX_CH_EXP: u32 = 16; 136 | pub const CAPF_DMX_6_CH: u32 = 32; 137 | pub const CAPF_DMX_8_CH: u32 = 64; 138 | pub const CAPF_DMX_24_CH: u32 = 128; 139 | pub const CAPF_LIMITER: u32 = 8192; 140 | pub const CAPF_MPS_STD: u32 = 1; 141 | pub const CAPF_MPS_LD: u32 = 2; 142 | pub const CAPF_MPS_USAC: u32 = 4; 143 | pub const CAPF_MPS_HQ: u32 = 16; 144 | pub const CAPF_MPS_LP: u32 = 32; 145 | pub const CAPF_MPS_BLIND: u32 = 64; 146 | pub const CAPF_MPS_BINAURAL: u32 = 128; 147 | pub const CAPF_MPS_2CH_OUT: u32 = 256; 148 | pub const CAPF_MPS_6CH_OUT: u32 = 512; 149 | pub const CAPF_MPS_8CH_OUT: u32 = 1024; 150 | pub const CAPF_MPS_1CH_IN: u32 = 4096; 151 | pub const CAPF_MPS_2CH_IN: u32 = 8192; 152 | pub const CAPF_MPS_6CH_IN: u32 = 16384; 153 | pub const AACDEC_CONCEAL: u32 = 1; 154 | pub const AACDEC_FLUSH: u32 = 2; 155 | pub const AACDEC_INTR: u32 = 4; 156 | pub const AACDEC_CLRHIST: u32 = 8; 157 | pub type size_t = ::std::os::raw::c_ulong; 158 | pub type wchar_t = ::std::os::raw::c_int; 159 | pub type max_align_t = u128; 160 | #[doc = " \\var SCHAR"] 161 | #[doc = " Data type representing at least 1 byte signed integer on all supported"] 162 | #[doc = " platforms."] 163 | #[doc = " Data type representing at least 1 byte unsigned integer on all"] 164 | #[doc = " supported platforms."] 165 | #[doc = " Data type representing at least 4 byte signed integer on all supported"] 166 | #[doc = " platforms."] 167 | #[doc = " Data type representing at least 4 byte unsigned integer on all"] 168 | #[doc = " supported platforms."] 169 | #[doc = " Data type representing 4 byte signed integer on all supported"] 170 | #[doc = " platforms."] 171 | #[doc = " Data type representing 4 byte unsigned integer on all supported"] 172 | #[doc = " platforms."] 173 | #[doc = " Data type representing 2 byte signed integer on all supported"] 174 | #[doc = " platforms."] 175 | #[doc = " Data type representing 2 byte unsigned integer on all supported"] 176 | #[doc = " platforms."] 177 | #[doc = " Data type representing 8 byte signed integer on all supported"] 178 | #[doc = " platforms."] 179 | #[doc = " Data type representing 8 byte unsigned integer on all supported"] 180 | #[doc = " platforms."] 181 | #[doc = " Number of bits the data type short represents. sizeof() is not suited"] 182 | #[doc = " to get this info, because a byte is not always defined as 8 bits."] 183 | #[doc = " Number of bits the data type char represents. sizeof() is not suited"] 184 | #[doc = " to get this info, because a byte is not always defined as 8 bits."] 185 | #[doc = " Data type representing the width of input and output PCM samples."] 186 | pub type INT = ::std::os::raw::c_int; 187 | pub type UINT = ::std::os::raw::c_uint; 188 | pub type SHORT = ::std::os::raw::c_short; 189 | pub type USHORT = ::std::os::raw::c_ushort; 190 | pub type SCHAR = ::std::os::raw::c_schar; 191 | pub type UCHAR = ::std::os::raw::c_uchar; 192 | pub type INT64 = ::std::os::raw::c_longlong; 193 | pub type UINT64 = ::std::os::raw::c_ulonglong; 194 | extern "C" { 195 | pub fn __assert_rtn( 196 | arg1: *const ::std::os::raw::c_char, 197 | arg2: *const ::std::os::raw::c_char, 198 | arg3: ::std::os::raw::c_int, 199 | arg4: *const ::std::os::raw::c_char, 200 | ); 201 | } 202 | pub type INT_PCM = SHORT; 203 | pub const MEMORY_SECTION_SECT_DATA_L1: MEMORY_SECTION = 8192; 204 | pub const MEMORY_SECTION_SECT_DATA_L2: MEMORY_SECTION = 8193; 205 | pub const MEMORY_SECTION_SECT_DATA_L1_A: MEMORY_SECTION = 8194; 206 | pub const MEMORY_SECTION_SECT_DATA_L1_B: MEMORY_SECTION = 8195; 207 | pub const MEMORY_SECTION_SECT_CONSTDATA_L1: MEMORY_SECTION = 8196; 208 | pub const MEMORY_SECTION_SECT_DATA_EXTERN: MEMORY_SECTION = 16384; 209 | pub const MEMORY_SECTION_SECT_CONSTDATA_EXTERN: MEMORY_SECTION = 16385; 210 | #[doc = " Identifiers for various memory locations. They are used along with memory"] 211 | #[doc = " allocation functions like FDKcalloc_L() to specify the requested memory's"] 212 | #[doc = " location."] 213 | pub type MEMORY_SECTION = u32; 214 | extern "C" { 215 | pub fn FDKprintf(szFmt: *const ::std::os::raw::c_char, ...); 216 | } 217 | extern "C" { 218 | pub fn FDKprintfErr(szFmt: *const ::std::os::raw::c_char, ...); 219 | } 220 | extern "C" { 221 | #[doc = " Wrapper for 's getchar()."] 222 | pub fn FDKgetchar() -> ::std::os::raw::c_int; 223 | } 224 | extern "C" { 225 | pub fn FDKfprintf( 226 | stream: *mut ::std::os::raw::c_void, 227 | format: *const ::std::os::raw::c_char, 228 | ... 229 | ) -> INT; 230 | } 231 | extern "C" { 232 | pub fn FDKsprintf( 233 | str: *mut ::std::os::raw::c_char, 234 | format: *const ::std::os::raw::c_char, 235 | ... 236 | ) -> INT; 237 | } 238 | extern "C" { 239 | pub fn FDKstrchr(s: *mut ::std::os::raw::c_char, c: INT) -> *mut ::std::os::raw::c_char; 240 | } 241 | extern "C" { 242 | pub fn FDKstrstr( 243 | haystack: *const ::std::os::raw::c_char, 244 | needle: *const ::std::os::raw::c_char, 245 | ) -> *const ::std::os::raw::c_char; 246 | } 247 | extern "C" { 248 | pub fn FDKstrcpy( 249 | dest: *mut ::std::os::raw::c_char, 250 | src: *const ::std::os::raw::c_char, 251 | ) -> *mut ::std::os::raw::c_char; 252 | } 253 | extern "C" { 254 | pub fn FDKstrncpy( 255 | dest: *mut ::std::os::raw::c_char, 256 | src: *const ::std::os::raw::c_char, 257 | n: UINT, 258 | ) -> *mut ::std::os::raw::c_char; 259 | } 260 | extern "C" { 261 | pub fn FDKcalloc(n: UINT, size: UINT) -> *mut ::std::os::raw::c_void; 262 | } 263 | extern "C" { 264 | pub fn FDKmalloc(size: UINT) -> *mut ::std::os::raw::c_void; 265 | } 266 | extern "C" { 267 | pub fn FDKfree(ptr: *mut ::std::os::raw::c_void); 268 | } 269 | extern "C" { 270 | #[doc = " Allocate and clear an aligned memory area. Use FDKafree() instead of"] 271 | #[doc = " FDKfree() for these memory areas."] 272 | #[doc = ""] 273 | #[doc = " \\param size Size of requested memory in bytes."] 274 | #[doc = " \\param alignment Alignment of requested memory in bytes."] 275 | #[doc = " \\return Pointer to allocated memory."] 276 | pub fn FDKaalloc(size: UINT, alignment: UINT) -> *mut ::std::os::raw::c_void; 277 | } 278 | extern "C" { 279 | #[doc = " Free an aligned memory area."] 280 | #[doc = ""] 281 | #[doc = " \\param ptr Pointer to be freed."] 282 | pub fn FDKafree(ptr: *mut ::std::os::raw::c_void); 283 | } 284 | extern "C" { 285 | #[doc = " Allocate memory in a specific memory section."] 286 | #[doc = " Requests can be made for internal or external memory. If internal memory is"] 287 | #[doc = " requested, FDKcalloc_L() first tries to use L1 memory, which sizes are"] 288 | #[doc = " defined by ::DATA_L1_A_SIZE and ::DATA_L1_B_SIZE. If no L1 memory is"] 289 | #[doc = " available, then FDKcalloc_L() tries to use L2 memory. If that fails as well,"] 290 | #[doc = " the requested memory is allocated at an extern location using the fallback"] 291 | #[doc = " FDKcalloc()."] 292 | #[doc = ""] 293 | #[doc = " \\param n See MSDN documentation on calloc()."] 294 | #[doc = " \\param size See MSDN documentation on calloc()."] 295 | #[doc = " \\param s Memory section."] 296 | #[doc = " \\return See MSDN documentation on calloc()."] 297 | pub fn FDKcalloc_L(n: UINT, size: UINT, s: MEMORY_SECTION) -> *mut ::std::os::raw::c_void; 298 | } 299 | extern "C" { 300 | #[doc = " Allocate aligned memory in a specific memory section."] 301 | #[doc = " See FDKcalloc_L() description for details - same applies here."] 302 | pub fn FDKaalloc_L( 303 | size: UINT, 304 | alignment: UINT, 305 | s: MEMORY_SECTION, 306 | ) -> *mut ::std::os::raw::c_void; 307 | } 308 | extern "C" { 309 | #[doc = " Free memory that was allocated in a specific memory section."] 310 | pub fn FDKfree_L(ptr: *mut ::std::os::raw::c_void); 311 | } 312 | extern "C" { 313 | #[doc = " Free aligned memory that was allocated in a specific memory section."] 314 | pub fn FDKafree_L(ptr: *mut ::std::os::raw::c_void); 315 | } 316 | extern "C" { 317 | #[doc = " Copy memory. Source and destination memory must not overlap."] 318 | #[doc = " Either use implementation from a Standard Library, or, if no Standard Library"] 319 | #[doc = " is available, a generic implementation."] 320 | #[doc = " The define ::USE_BUILTIN_MEM_FUNCTIONS in genericStds.cpp controls what to"] 321 | #[doc = " use. The function arguments correspond to the standard memcpy(). Please see"] 322 | #[doc = " MSDN documentation for details on how to use it."] 323 | pub fn FDKmemcpy( 324 | dst: *mut ::std::os::raw::c_void, 325 | src: *const ::std::os::raw::c_void, 326 | size: UINT, 327 | ); 328 | } 329 | extern "C" { 330 | #[doc = " Copy memory. Source and destination memory are allowed to overlap."] 331 | #[doc = " Either use implementation from a Standard Library, or, if no Standard Library"] 332 | #[doc = " is available, a generic implementation."] 333 | #[doc = " The define ::USE_BUILTIN_MEM_FUNCTIONS in genericStds.cpp controls what to"] 334 | #[doc = " use. The function arguments correspond to the standard memmove(). Please see"] 335 | #[doc = " MSDN documentation for details on how to use it."] 336 | pub fn FDKmemmove( 337 | dst: *mut ::std::os::raw::c_void, 338 | src: *const ::std::os::raw::c_void, 339 | size: UINT, 340 | ); 341 | } 342 | extern "C" { 343 | #[doc = " Clear memory."] 344 | #[doc = " Either use implementation from a Standard Library, or, if no Standard Library"] 345 | #[doc = " is available, a generic implementation."] 346 | #[doc = " The define ::USE_BUILTIN_MEM_FUNCTIONS in genericStds.cpp controls what to"] 347 | #[doc = " use. The function arguments correspond to the standard memclear(). Please see"] 348 | #[doc = " MSDN documentation for details on how to use it."] 349 | pub fn FDKmemclear(memPtr: *mut ::std::os::raw::c_void, size: UINT); 350 | } 351 | extern "C" { 352 | #[doc = " Fill memory with values."] 353 | #[doc = " The function arguments correspond to the standard memset(). Please see MSDN"] 354 | #[doc = " documentation for details on how to use it."] 355 | pub fn FDKmemset(memPtr: *mut ::std::os::raw::c_void, value: INT, size: UINT); 356 | } 357 | extern "C" { 358 | pub fn FDKmemcmp( 359 | s1: *const ::std::os::raw::c_void, 360 | s2: *const ::std::os::raw::c_void, 361 | size: UINT, 362 | ) -> INT; 363 | } 364 | extern "C" { 365 | pub fn FDKstrcmp(s1: *const ::std::os::raw::c_char, s2: *const ::std::os::raw::c_char) -> INT; 366 | } 367 | extern "C" { 368 | pub fn FDKstrncmp( 369 | s1: *const ::std::os::raw::c_char, 370 | s2: *const ::std::os::raw::c_char, 371 | size: UINT, 372 | ) -> INT; 373 | } 374 | extern "C" { 375 | pub fn FDKstrlen(s: *const ::std::os::raw::c_char) -> UINT; 376 | } 377 | extern "C" { 378 | #[doc = " Check platform for endianess."] 379 | #[doc = ""] 380 | #[doc = " \\return 1 if platform is little endian, non-1 if platform is big endian."] 381 | pub fn IS_LITTLE_ENDIAN() -> ::std::os::raw::c_int; 382 | } 383 | extern "C" { 384 | #[doc = " Convert input value to little endian format."] 385 | #[doc = ""] 386 | #[doc = " \\param val Value to be converted. It may be in both big or little endian."] 387 | #[doc = " \\return Value in little endian format."] 388 | pub fn TO_LITTLE_ENDIAN(val: UINT) -> UINT; 389 | } 390 | #[doc = " \\fn FDKFILE *FDKfopen(const char *filename, const char *mode);"] 391 | #[doc = " Standard fopen() wrapper."] 392 | #[doc = " \\fn INT FDKfclose(FDKFILE *FP);"] 393 | #[doc = " Standard fclose() wrapper."] 394 | #[doc = " \\fn INT FDKfseek(FDKFILE *FP, LONG OFFSET, int WHENCE);"] 395 | #[doc = " Standard fseek() wrapper."] 396 | #[doc = " \\fn INT FDKftell(FDKFILE *FP);"] 397 | #[doc = " Standard ftell() wrapper."] 398 | #[doc = " \\fn INT FDKfflush(FDKFILE *fp);"] 399 | #[doc = " Standard fflush() wrapper."] 400 | #[doc = " \\fn UINT FDKfwrite(const void *ptrf, INT size, UINT nmemb, FDKFILE *fp);"] 401 | #[doc = " Standard fwrite() wrapper."] 402 | #[doc = " \\fn UINT FDKfread(void *dst, INT size, UINT nmemb, FDKFILE *fp);"] 403 | #[doc = " Standard fread() wrapper."] 404 | pub type FDKFILE = ::std::os::raw::c_void; 405 | extern "C" { 406 | pub static FDKSEEK_SET: INT; 407 | } 408 | extern "C" { 409 | pub static FDKSEEK_CUR: INT; 410 | } 411 | extern "C" { 412 | pub static FDKSEEK_END: INT; 413 | } 414 | extern "C" { 415 | pub fn FDKfopen( 416 | filename: *const ::std::os::raw::c_char, 417 | mode: *const ::std::os::raw::c_char, 418 | ) -> *mut FDKFILE; 419 | } 420 | extern "C" { 421 | pub fn FDKfclose(FP: *mut FDKFILE) -> INT; 422 | } 423 | extern "C" { 424 | pub fn FDKfseek(FP: *mut FDKFILE, OFFSET: INT, WHENCE: ::std::os::raw::c_int) -> INT; 425 | } 426 | extern "C" { 427 | pub fn FDKftell(FP: *mut FDKFILE) -> INT; 428 | } 429 | extern "C" { 430 | pub fn FDKfflush(fp: *mut FDKFILE) -> INT; 431 | } 432 | extern "C" { 433 | pub fn FDKfwrite( 434 | ptrf: *const ::std::os::raw::c_void, 435 | size: INT, 436 | nmemb: UINT, 437 | fp: *mut FDKFILE, 438 | ) -> UINT; 439 | } 440 | extern "C" { 441 | pub fn FDKfread( 442 | dst: *mut ::std::os::raw::c_void, 443 | size: INT, 444 | nmemb: UINT, 445 | fp: *mut FDKFILE, 446 | ) -> UINT; 447 | } 448 | extern "C" { 449 | pub fn FDKfgets( 450 | dst: *mut ::std::os::raw::c_void, 451 | size: INT, 452 | fp: *mut FDKFILE, 453 | ) -> *mut ::std::os::raw::c_char; 454 | } 455 | extern "C" { 456 | pub fn FDKrewind(fp: *mut FDKFILE); 457 | } 458 | extern "C" { 459 | pub fn FDKfeof(fp: *mut FDKFILE) -> INT; 460 | } 461 | extern "C" { 462 | #[doc = " \\brief Write each member in little endian order. Convert automatically"] 463 | #[doc = " to host endianess."] 464 | #[doc = " \\param ptrf Pointer to memory where to read data from."] 465 | #[doc = " \\param size Size of each item to be written."] 466 | #[doc = " \\param nmemb Number of items to be written."] 467 | #[doc = " \\param fp File pointer of type FDKFILE."] 468 | #[doc = " \\return Number of items read on success and fread() error on failure."] 469 | pub fn FDKfwrite_EL( 470 | ptrf: *const ::std::os::raw::c_void, 471 | size: INT, 472 | nmemb: UINT, 473 | fp: *mut FDKFILE, 474 | ) -> UINT; 475 | } 476 | extern "C" { 477 | #[doc = " \\brief Read variable of size \"size\" as little endian. Convert"] 478 | #[doc = " automatically to host endianess. 4-byte alignment is enforced for 24 bit"] 479 | #[doc = " data, at 32 bit full scale."] 480 | #[doc = " \\param dst Pointer to memory where to store data into."] 481 | #[doc = " \\param size Size of each item to be read."] 482 | #[doc = " \\param nmemb Number of items to be read."] 483 | #[doc = " \\param fp File pointer of type FDKFILE."] 484 | #[doc = " \\return Number of items read on success and fread() error on failure."] 485 | pub fn FDKfread_EL( 486 | dst: *mut ::std::os::raw::c_void, 487 | size: INT, 488 | nmemb: UINT, 489 | fp: *mut FDKFILE, 490 | ) -> UINT; 491 | } 492 | extern "C" { 493 | #[doc = " \\brief Print FDK software disclaimer."] 494 | pub fn FDKprintDisclaimer(); 495 | } 496 | #[doc = " \\brief Contains information needed for a single channel map."] 497 | #[repr(C)] 498 | #[derive(Debug, Copy, Clone)] 499 | pub struct CHANNEL_MAP_INFO { 500 | #[doc = "< Actual channel mapping for one single configuration."] 501 | pub pChannelMap: *const UCHAR, 502 | #[doc = "< The number of channels for the channel map which is"] 503 | #[doc = "the maximum used channel index+1."] 504 | pub numChannels: UCHAR, 505 | } 506 | #[test] 507 | fn bindgen_test_layout_CHANNEL_MAP_INFO() { 508 | assert_eq!( 509 | ::std::mem::size_of::(), 510 | 16usize, 511 | concat!("Size of: ", stringify!(CHANNEL_MAP_INFO)) 512 | ); 513 | assert_eq!( 514 | ::std::mem::align_of::(), 515 | 8usize, 516 | concat!("Alignment of ", stringify!(CHANNEL_MAP_INFO)) 517 | ); 518 | assert_eq!( 519 | unsafe { &(*(::std::ptr::null::())).pChannelMap as *const _ as usize }, 520 | 0usize, 521 | concat!( 522 | "Offset of field: ", 523 | stringify!(CHANNEL_MAP_INFO), 524 | "::", 525 | stringify!(pChannelMap) 526 | ) 527 | ); 528 | assert_eq!( 529 | unsafe { &(*(::std::ptr::null::())).numChannels as *const _ as usize }, 530 | 8usize, 531 | concat!( 532 | "Offset of field: ", 533 | stringify!(CHANNEL_MAP_INFO), 534 | "::", 535 | stringify!(numChannels) 536 | ) 537 | ); 538 | } 539 | #[doc = " \\brief This is the main data struct. It contains the mapping for all"] 540 | #[doc = " channel configurations such as administration information."] 541 | #[doc = ""] 542 | #[doc = " CAUTION: Do not access this structure directly from a algorithm specific"] 543 | #[doc = " library. Always use one of the API access functions below!"] 544 | #[repr(C)] 545 | #[derive(Debug, Copy, Clone)] 546 | pub struct FDK_channelMapDescr { 547 | #[doc = "< Table of channel maps."] 548 | pub pMapInfoTab: *const CHANNEL_MAP_INFO, 549 | #[doc = "< Length of the channel map table array."] 550 | pub mapInfoTabLen: UINT, 551 | #[doc = "< Flag that defines whether the specified mapping shall"] 552 | #[doc = "be applied (value: 0) or the input just gets passed"] 553 | #[doc = "through (MPEG mapping)."] 554 | pub fPassThrough: UINT, 555 | } 556 | #[test] 557 | fn bindgen_test_layout_FDK_channelMapDescr() { 558 | assert_eq!( 559 | ::std::mem::size_of::(), 560 | 16usize, 561 | concat!("Size of: ", stringify!(FDK_channelMapDescr)) 562 | ); 563 | assert_eq!( 564 | ::std::mem::align_of::(), 565 | 8usize, 566 | concat!("Alignment of ", stringify!(FDK_channelMapDescr)) 567 | ); 568 | assert_eq!( 569 | unsafe { &(*(::std::ptr::null::())).pMapInfoTab as *const _ as usize }, 570 | 0usize, 571 | concat!( 572 | "Offset of field: ", 573 | stringify!(FDK_channelMapDescr), 574 | "::", 575 | stringify!(pMapInfoTab) 576 | ) 577 | ); 578 | assert_eq!( 579 | unsafe { 580 | &(*(::std::ptr::null::())).mapInfoTabLen as *const _ as usize 581 | }, 582 | 8usize, 583 | concat!( 584 | "Offset of field: ", 585 | stringify!(FDK_channelMapDescr), 586 | "::", 587 | stringify!(mapInfoTabLen) 588 | ) 589 | ); 590 | assert_eq!( 591 | unsafe { 592 | &(*(::std::ptr::null::())).fPassThrough as *const _ as usize 593 | }, 594 | 12usize, 595 | concat!( 596 | "Offset of field: ", 597 | stringify!(FDK_channelMapDescr), 598 | "::", 599 | stringify!(fPassThrough) 600 | ) 601 | ); 602 | } 603 | extern "C" { 604 | #[doc = " \\brief Initialize a given channel map descriptor."] 605 | #[doc = ""] 606 | #[doc = " \\param pMapDescr Pointer to a channel map descriptor to be initialized."] 607 | #[doc = " \\param pMapInfoTab Table of channel maps to initizalize the descriptor"] 608 | #[doc = "with."] 609 | #[doc = " If a NULL pointer is given a default table for"] 610 | #[doc = "WAV-like mapping will be used."] 611 | #[doc = " \\param mapInfoTabLen Length of the channel map table array (pMapInfoTab)."] 612 | #[doc = "If a zero length is given a default table for WAV-like mapping will be used."] 613 | #[doc = " \\param fPassThrough If the flag is set the reordering (given by"] 614 | #[doc = "pMapInfoTab) will be bypassed."] 615 | pub fn FDK_chMapDescr_init( 616 | pMapDescr: *mut FDK_channelMapDescr, 617 | pMapInfoTab: *const CHANNEL_MAP_INFO, 618 | mapInfoTabLen: UINT, 619 | fPassThrough: UINT, 620 | ); 621 | } 622 | extern "C" { 623 | #[doc = " \\brief Change the channel reordering state of a given channel map"] 624 | #[doc = " descriptor."] 625 | #[doc = ""] 626 | #[doc = " \\param pMapDescr Pointer to a (initialized) channel map descriptor."] 627 | #[doc = " \\param fPassThrough If the flag is set the reordering (given by"] 628 | #[doc = " pMapInfoTab) will be bypassed."] 629 | #[doc = " \\return Value unequal to zero if set operation was not"] 630 | #[doc = " successful. And zero on success."] 631 | pub fn FDK_chMapDescr_setPassThrough( 632 | pMapDescr: *mut FDK_channelMapDescr, 633 | fPassThrough: UINT, 634 | ) -> ::std::os::raw::c_int; 635 | } 636 | extern "C" { 637 | #[doc = " \\brief Get the mapping value for a specific channel and map index."] 638 | #[doc = ""] 639 | #[doc = " \\param pMapDescr Pointer to channel map descriptor."] 640 | #[doc = " \\param chIdx Channel index."] 641 | #[doc = " \\param mapIdx Mapping index (corresponding to the channel configuration"] 642 | #[doc = " index)."] 643 | #[doc = " \\return Mapping value."] 644 | pub fn FDK_chMapDescr_getMapValue( 645 | pMapDescr: *const FDK_channelMapDescr, 646 | chIdx: UCHAR, 647 | mapIdx: UINT, 648 | ) -> UCHAR; 649 | } 650 | extern "C" { 651 | #[doc = " \\brief Evaluate whether channel map descriptor is reasonable or not."] 652 | #[doc = ""] 653 | #[doc = " \\param pMapDescr Pointer to channel map descriptor."] 654 | #[doc = " \\return Value unequal to zero if descriptor is valid, otherwise"] 655 | #[doc = " zero."] 656 | pub fn FDK_chMapDescr_isValid(pMapDescr: *const FDK_channelMapDescr) -> ::std::os::raw::c_int; 657 | } 658 | #[doc = "< Unknown format."] 659 | pub const FILE_FORMAT_FF_UNKNOWN: FILE_FORMAT = -1; 660 | #[doc = "< No container, bit stream data conveyed \"as is\"."] 661 | pub const FILE_FORMAT_FF_RAW: FILE_FORMAT = 0; 662 | #[doc = "< 3GPP file format."] 663 | pub const FILE_FORMAT_FF_MP4_3GPP: FILE_FORMAT = 3; 664 | #[doc = "< MPEG-4 File format."] 665 | pub const FILE_FORMAT_FF_MP4_MP4F: FILE_FORMAT = 4; 666 | #[doc = "< Proprietary raw packet file."] 667 | pub const FILE_FORMAT_FF_RAWPACKETS: FILE_FORMAT = 5; 668 | #[doc = " File format identifiers."] 669 | pub type FILE_FORMAT = i32; 670 | #[doc = "< Unknown format."] 671 | pub const TRANSPORT_TYPE_TT_UNKNOWN: TRANSPORT_TYPE = -1; 672 | #[doc = "< \"as is\" access units (packet based since there is"] 673 | #[doc = "obviously no sync layer)"] 674 | pub const TRANSPORT_TYPE_TT_MP4_RAW: TRANSPORT_TYPE = 0; 675 | #[doc = "< ADIF bitstream format."] 676 | pub const TRANSPORT_TYPE_TT_MP4_ADIF: TRANSPORT_TYPE = 1; 677 | #[doc = "< ADTS bitstream format."] 678 | pub const TRANSPORT_TYPE_TT_MP4_ADTS: TRANSPORT_TYPE = 2; 679 | #[doc = "< Audio Mux Elements with muxConfigPresent = 1"] 680 | pub const TRANSPORT_TYPE_TT_MP4_LATM_MCP1: TRANSPORT_TYPE = 6; 681 | #[doc = "< Audio Mux Elements with muxConfigPresent = 0, out"] 682 | #[doc = "of band StreamMuxConfig"] 683 | pub const TRANSPORT_TYPE_TT_MP4_LATM_MCP0: TRANSPORT_TYPE = 7; 684 | #[doc = "< Audio Sync Stream."] 685 | pub const TRANSPORT_TYPE_TT_MP4_LOAS: TRANSPORT_TYPE = 10; 686 | #[doc = "< Digital Radio Mondial (DRM30/DRM+) bitstream format."] 687 | pub const TRANSPORT_TYPE_TT_DRM: TRANSPORT_TYPE = 12; 688 | #[doc = " Transport type identifiers."] 689 | pub type TRANSPORT_TYPE = i32; 690 | pub const AUDIO_OBJECT_TYPE_AOT_NONE: AUDIO_OBJECT_TYPE = -1; 691 | pub const AUDIO_OBJECT_TYPE_AOT_NULL_OBJECT: AUDIO_OBJECT_TYPE = 0; 692 | #[doc = "< Main profile"] 693 | pub const AUDIO_OBJECT_TYPE_AOT_AAC_MAIN: AUDIO_OBJECT_TYPE = 1; 694 | #[doc = "< Low Complexity object"] 695 | pub const AUDIO_OBJECT_TYPE_AOT_AAC_LC: AUDIO_OBJECT_TYPE = 2; 696 | pub const AUDIO_OBJECT_TYPE_AOT_AAC_SSR: AUDIO_OBJECT_TYPE = 3; 697 | pub const AUDIO_OBJECT_TYPE_AOT_AAC_LTP: AUDIO_OBJECT_TYPE = 4; 698 | pub const AUDIO_OBJECT_TYPE_AOT_SBR: AUDIO_OBJECT_TYPE = 5; 699 | pub const AUDIO_OBJECT_TYPE_AOT_AAC_SCAL: AUDIO_OBJECT_TYPE = 6; 700 | pub const AUDIO_OBJECT_TYPE_AOT_TWIN_VQ: AUDIO_OBJECT_TYPE = 7; 701 | pub const AUDIO_OBJECT_TYPE_AOT_CELP: AUDIO_OBJECT_TYPE = 8; 702 | pub const AUDIO_OBJECT_TYPE_AOT_HVXC: AUDIO_OBJECT_TYPE = 9; 703 | #[doc = "< (reserved)"] 704 | pub const AUDIO_OBJECT_TYPE_AOT_RSVD_10: AUDIO_OBJECT_TYPE = 10; 705 | #[doc = "< (reserved)"] 706 | pub const AUDIO_OBJECT_TYPE_AOT_RSVD_11: AUDIO_OBJECT_TYPE = 11; 707 | #[doc = "< TTSI Object"] 708 | pub const AUDIO_OBJECT_TYPE_AOT_TTSI: AUDIO_OBJECT_TYPE = 12; 709 | #[doc = "< Main Synthetic object"] 710 | pub const AUDIO_OBJECT_TYPE_AOT_MAIN_SYNTH: AUDIO_OBJECT_TYPE = 13; 711 | #[doc = "< Wavetable Synthesis object"] 712 | pub const AUDIO_OBJECT_TYPE_AOT_WAV_TAB_SYNTH: AUDIO_OBJECT_TYPE = 14; 713 | #[doc = "< General MIDI object"] 714 | pub const AUDIO_OBJECT_TYPE_AOT_GEN_MIDI: AUDIO_OBJECT_TYPE = 15; 715 | #[doc = "< Algorithmic Synthesis and Audio FX object"] 716 | pub const AUDIO_OBJECT_TYPE_AOT_ALG_SYNTH_AUD_FX: AUDIO_OBJECT_TYPE = 16; 717 | #[doc = "< Error Resilient(ER) AAC Low Complexity"] 718 | pub const AUDIO_OBJECT_TYPE_AOT_ER_AAC_LC: AUDIO_OBJECT_TYPE = 17; 719 | #[doc = "< (reserved)"] 720 | pub const AUDIO_OBJECT_TYPE_AOT_RSVD_18: AUDIO_OBJECT_TYPE = 18; 721 | #[doc = "< Error Resilient(ER) AAC LTP object"] 722 | pub const AUDIO_OBJECT_TYPE_AOT_ER_AAC_LTP: AUDIO_OBJECT_TYPE = 19; 723 | #[doc = "< Error Resilient(ER) AAC Scalable object"] 724 | pub const AUDIO_OBJECT_TYPE_AOT_ER_AAC_SCAL: AUDIO_OBJECT_TYPE = 20; 725 | #[doc = "< Error Resilient(ER) TwinVQ object"] 726 | pub const AUDIO_OBJECT_TYPE_AOT_ER_TWIN_VQ: AUDIO_OBJECT_TYPE = 21; 727 | #[doc = "< Error Resilient(ER) BSAC object"] 728 | pub const AUDIO_OBJECT_TYPE_AOT_ER_BSAC: AUDIO_OBJECT_TYPE = 22; 729 | #[doc = "< Error Resilient(ER) AAC LowDelay object"] 730 | pub const AUDIO_OBJECT_TYPE_AOT_ER_AAC_LD: AUDIO_OBJECT_TYPE = 23; 731 | #[doc = "< Error Resilient(ER) CELP object"] 732 | pub const AUDIO_OBJECT_TYPE_AOT_ER_CELP: AUDIO_OBJECT_TYPE = 24; 733 | #[doc = "< Error Resilient(ER) HVXC object"] 734 | pub const AUDIO_OBJECT_TYPE_AOT_ER_HVXC: AUDIO_OBJECT_TYPE = 25; 735 | #[doc = "< Error Resilient(ER) HILN object"] 736 | pub const AUDIO_OBJECT_TYPE_AOT_ER_HILN: AUDIO_OBJECT_TYPE = 26; 737 | #[doc = "< Error Resilient(ER) Parametric object"] 738 | pub const AUDIO_OBJECT_TYPE_AOT_ER_PARA: AUDIO_OBJECT_TYPE = 27; 739 | #[doc = "< might become SSC"] 740 | pub const AUDIO_OBJECT_TYPE_AOT_RSVD_28: AUDIO_OBJECT_TYPE = 28; 741 | #[doc = "< PS, Parametric Stereo (includes SBR)"] 742 | pub const AUDIO_OBJECT_TYPE_AOT_PS: AUDIO_OBJECT_TYPE = 29; 743 | #[doc = "< MPEG Surround"] 744 | pub const AUDIO_OBJECT_TYPE_AOT_MPEGS: AUDIO_OBJECT_TYPE = 30; 745 | #[doc = "< Signal AOT uses more than 5 bits"] 746 | pub const AUDIO_OBJECT_TYPE_AOT_ESCAPE: AUDIO_OBJECT_TYPE = 31; 747 | #[doc = "< MPEG-Layer1 in mp4"] 748 | pub const AUDIO_OBJECT_TYPE_AOT_MP3ONMP4_L1: AUDIO_OBJECT_TYPE = 32; 749 | #[doc = "< MPEG-Layer2 in mp4"] 750 | pub const AUDIO_OBJECT_TYPE_AOT_MP3ONMP4_L2: AUDIO_OBJECT_TYPE = 33; 751 | #[doc = "< MPEG-Layer3 in mp4"] 752 | pub const AUDIO_OBJECT_TYPE_AOT_MP3ONMP4_L3: AUDIO_OBJECT_TYPE = 34; 753 | #[doc = "< might become DST"] 754 | pub const AUDIO_OBJECT_TYPE_AOT_RSVD_35: AUDIO_OBJECT_TYPE = 35; 755 | #[doc = "< might become ALS"] 756 | pub const AUDIO_OBJECT_TYPE_AOT_RSVD_36: AUDIO_OBJECT_TYPE = 36; 757 | #[doc = "< AAC + SLS"] 758 | pub const AUDIO_OBJECT_TYPE_AOT_AAC_SLS: AUDIO_OBJECT_TYPE = 37; 759 | #[doc = "< SLS"] 760 | pub const AUDIO_OBJECT_TYPE_AOT_SLS: AUDIO_OBJECT_TYPE = 38; 761 | #[doc = "< AAC Enhanced Low Delay"] 762 | pub const AUDIO_OBJECT_TYPE_AOT_ER_AAC_ELD: AUDIO_OBJECT_TYPE = 39; 763 | #[doc = "< USAC"] 764 | pub const AUDIO_OBJECT_TYPE_AOT_USAC: AUDIO_OBJECT_TYPE = 42; 765 | #[doc = "< SAOC"] 766 | pub const AUDIO_OBJECT_TYPE_AOT_SAOC: AUDIO_OBJECT_TYPE = 43; 767 | #[doc = "< Low Delay MPEG Surround"] 768 | pub const AUDIO_OBJECT_TYPE_AOT_LD_MPEGS: AUDIO_OBJECT_TYPE = 44; 769 | #[doc = "< Virtual AOT MP2 Low Complexity profile"] 770 | pub const AUDIO_OBJECT_TYPE_AOT_MP2_AAC_LC: AUDIO_OBJECT_TYPE = 129; 771 | #[doc = "< Virtual AOT MP2 Low Complexity Profile with SBR"] 772 | pub const AUDIO_OBJECT_TYPE_AOT_MP2_SBR: AUDIO_OBJECT_TYPE = 132; 773 | #[doc = "< Virtual AOT for DRM (ER-AAC-SCAL without SBR)"] 774 | pub const AUDIO_OBJECT_TYPE_AOT_DRM_AAC: AUDIO_OBJECT_TYPE = 143; 775 | #[doc = "< Virtual AOT for DRM (ER-AAC-SCAL with SBR)"] 776 | pub const AUDIO_OBJECT_TYPE_AOT_DRM_SBR: AUDIO_OBJECT_TYPE = 144; 777 | pub const AUDIO_OBJECT_TYPE_AOT_DRM_MPEG_PS: AUDIO_OBJECT_TYPE = 145; 778 | pub const AUDIO_OBJECT_TYPE_AOT_DRM_SURROUND: AUDIO_OBJECT_TYPE = 146; 779 | #[doc = "< Virtual AOT for DRM with USAC"] 780 | pub const AUDIO_OBJECT_TYPE_AOT_DRM_USAC: AUDIO_OBJECT_TYPE = 147; 781 | #[doc = " Audio Object Type definitions."] 782 | pub type AUDIO_OBJECT_TYPE = i32; 783 | pub const CHANNEL_MODE_MODE_INVALID: CHANNEL_MODE = -1; 784 | pub const CHANNEL_MODE_MODE_UNKNOWN: CHANNEL_MODE = 0; 785 | #[doc = "< C"] 786 | pub const CHANNEL_MODE_MODE_1: CHANNEL_MODE = 1; 787 | #[doc = "< L+R"] 788 | pub const CHANNEL_MODE_MODE_2: CHANNEL_MODE = 2; 789 | #[doc = "< C, L+R"] 790 | pub const CHANNEL_MODE_MODE_1_2: CHANNEL_MODE = 3; 791 | #[doc = "< C, L+R, Rear"] 792 | pub const CHANNEL_MODE_MODE_1_2_1: CHANNEL_MODE = 4; 793 | #[doc = "< C, L+R, LS+RS"] 794 | pub const CHANNEL_MODE_MODE_1_2_2: CHANNEL_MODE = 5; 795 | #[doc = "< C, L+R, LS+RS, LFE"] 796 | pub const CHANNEL_MODE_MODE_1_2_2_1: CHANNEL_MODE = 6; 797 | #[doc = "< C, LC+RC, L+R, LS+RS, LFE"] 798 | pub const CHANNEL_MODE_MODE_1_2_2_2_1: CHANNEL_MODE = 7; 799 | #[doc = "< C, L+R, LS+RS, Crear, LFE"] 800 | pub const CHANNEL_MODE_MODE_6_1: CHANNEL_MODE = 11; 801 | #[doc = "< C, L+R, LS+RS, Lrear+Rrear, LFE"] 802 | pub const CHANNEL_MODE_MODE_7_1_BACK: CHANNEL_MODE = 12; 803 | #[doc = "< C, L+R, LS+RS, LFE, Ltop+Rtop"] 804 | pub const CHANNEL_MODE_MODE_7_1_TOP_FRONT: CHANNEL_MODE = 14; 805 | #[doc = "< C, L+R, LS+RS, Lrear+Rrear, LFE"] 806 | pub const CHANNEL_MODE_MODE_7_1_REAR_SURROUND: CHANNEL_MODE = 33; 807 | #[doc = "< C, LC+RC, L+R, LS+RS, LFE"] 808 | pub const CHANNEL_MODE_MODE_7_1_FRONT_CENTER: CHANNEL_MODE = 34; 809 | #[doc = "< 212 configuration, used in ELDv2"] 810 | pub const CHANNEL_MODE_MODE_212: CHANNEL_MODE = 128; 811 | #[doc = " Channel Mode ( 1-7 equals MPEG channel configurations, others are"] 812 | #[doc = " arbitrary)."] 813 | pub type CHANNEL_MODE = i32; 814 | pub const AUDIO_CHANNEL_TYPE_ACT_NONE: AUDIO_CHANNEL_TYPE = 0; 815 | #[doc = "< Front speaker position (at normal height)"] 816 | pub const AUDIO_CHANNEL_TYPE_ACT_FRONT: AUDIO_CHANNEL_TYPE = 1; 817 | #[doc = "< Side speaker position (at normal height)"] 818 | pub const AUDIO_CHANNEL_TYPE_ACT_SIDE: AUDIO_CHANNEL_TYPE = 2; 819 | #[doc = "< Back speaker position (at normal height)"] 820 | pub const AUDIO_CHANNEL_TYPE_ACT_BACK: AUDIO_CHANNEL_TYPE = 3; 821 | #[doc = "< Low frequency effect speaker postion (front)"] 822 | pub const AUDIO_CHANNEL_TYPE_ACT_LFE: AUDIO_CHANNEL_TYPE = 4; 823 | pub const AUDIO_CHANNEL_TYPE_ACT_TOP: AUDIO_CHANNEL_TYPE = 16; 824 | #[doc = "< Top front speaker = (ACT_FRONT|ACT_TOP)"] 825 | pub const AUDIO_CHANNEL_TYPE_ACT_FRONT_TOP: AUDIO_CHANNEL_TYPE = 17; 826 | #[doc = "< Top side speaker = (ACT_SIDE |ACT_TOP)"] 827 | pub const AUDIO_CHANNEL_TYPE_ACT_SIDE_TOP: AUDIO_CHANNEL_TYPE = 18; 828 | #[doc = "< Top back speaker = (ACT_BACK |ACT_TOP)"] 829 | pub const AUDIO_CHANNEL_TYPE_ACT_BACK_TOP: AUDIO_CHANNEL_TYPE = 19; 830 | pub const AUDIO_CHANNEL_TYPE_ACT_BOTTOM: AUDIO_CHANNEL_TYPE = 32; 831 | #[doc = "< Bottom front speaker = (ACT_FRONT|ACT_BOTTOM)"] 832 | pub const AUDIO_CHANNEL_TYPE_ACT_FRONT_BOTTOM: AUDIO_CHANNEL_TYPE = 33; 833 | #[doc = "< Bottom side speaker = (ACT_SIDE |ACT_BOTTOM)"] 834 | pub const AUDIO_CHANNEL_TYPE_ACT_SIDE_BOTTOM: AUDIO_CHANNEL_TYPE = 34; 835 | #[doc = "< Bottom back speaker = (ACT_BACK |ACT_BOTTOM)"] 836 | pub const AUDIO_CHANNEL_TYPE_ACT_BACK_BOTTOM: AUDIO_CHANNEL_TYPE = 35; 837 | #[doc = " Speaker description tags."] 838 | #[doc = " Do not change the enumeration values unless it keeps the following"] 839 | #[doc = " segmentation:"] 840 | #[doc = " - Bit 0-3: Horizontal postion (0: none, 1: front, 2: side, 3: back, 4: lfe)"] 841 | #[doc = " - Bit 4-7: Vertical position (0: normal, 1: top, 2: bottom)"] 842 | pub type AUDIO_CHANNEL_TYPE = u32; 843 | pub const SBR_PS_SIGNALING_SIG_UNKNOWN: SBR_PS_SIGNALING = -1; 844 | pub const SBR_PS_SIGNALING_SIG_IMPLICIT: SBR_PS_SIGNALING = 0; 845 | pub const SBR_PS_SIGNALING_SIG_EXPLICIT_BW_COMPATIBLE: SBR_PS_SIGNALING = 1; 846 | pub const SBR_PS_SIGNALING_SIG_EXPLICIT_HIERARCHICAL: SBR_PS_SIGNALING = 2; 847 | pub type SBR_PS_SIGNALING = i32; 848 | #[doc = " Generic audio coder configuration structure."] 849 | #[repr(C)] 850 | #[derive(Copy, Clone)] 851 | pub struct CODER_CONFIG { 852 | #[doc = "< Audio Object Type (AOT)."] 853 | pub aot: AUDIO_OBJECT_TYPE, 854 | #[doc = "< Extension Audio Object Type (SBR)."] 855 | pub extAOT: AUDIO_OBJECT_TYPE, 856 | #[doc = "< Channel mode."] 857 | pub channelMode: CHANNEL_MODE, 858 | #[doc = "< Use channel config zero + pce although a"] 859 | #[doc = "standard channel config could be signaled."] 860 | pub channelConfigZero: UCHAR, 861 | #[doc = "< Sampling rate."] 862 | pub samplingRate: INT, 863 | #[doc = "< Extended samplerate (SBR)."] 864 | pub extSamplingRate: INT, 865 | #[doc = "< Downscale sampling rate (ELD downscaled mode)"] 866 | pub downscaleSamplingRate: INT, 867 | #[doc = "< Average bitrate."] 868 | pub bitRate: INT, 869 | #[doc = "< Number of PCM samples per codec frame and audio"] 870 | #[doc = "channel."] 871 | pub samplesPerFrame: ::std::os::raw::c_int, 872 | #[doc = "< Number of audio channels."] 873 | pub noChannels: ::std::os::raw::c_int, 874 | pub bitsFrame: ::std::os::raw::c_int, 875 | #[doc = "< Amount of encoder subframes. 1 means no subframing."] 876 | pub nSubFrames: ::std::os::raw::c_int, 877 | #[doc = "< The number of the sub-frames which are grouped and"] 878 | #[doc = "transmitted in a super-frame (BSAC)."] 879 | pub BSACnumOfSubFrame: ::std::os::raw::c_int, 880 | #[doc = "< The average length of the large-step layers in bytes"] 881 | #[doc = "(BSAC)."] 882 | pub BSAClayerLength: ::std::os::raw::c_int, 883 | #[doc = "< flags"] 884 | pub flags: UINT, 885 | #[doc = "< Matrix mixdown index to put into PCE. Default value"] 886 | #[doc = "0 means no mixdown coefficient, valid values are 1-4"] 887 | #[doc = "which correspond to matrix_mixdown_idx 0-3."] 888 | pub matrixMixdownA: UCHAR, 889 | #[doc = "< Frame period for sending in band configuration"] 890 | #[doc = "buffers in the transport layer."] 891 | pub headerPeriod: UCHAR, 892 | #[doc = "< USAC MPS stereo mode"] 893 | pub stereoConfigIndex: UCHAR, 894 | #[doc = "< USAC SBR mode"] 895 | pub sbrMode: UCHAR, 896 | #[doc = "< 0: implicit signaling, 1: backwards"] 897 | #[doc = "compatible explicit signaling, 2:"] 898 | #[doc = "hierarcical explicit signaling"] 899 | pub sbrSignaling: SBR_PS_SIGNALING, 900 | #[doc = "< raw codec specific config as bit stream"] 901 | pub rawConfig: [UCHAR; 64usize], 902 | #[doc = "< Size of rawConfig in bits"] 903 | pub rawConfigBits: ::std::os::raw::c_int, 904 | pub sbrPresent: UCHAR, 905 | pub psPresent: UCHAR, 906 | } 907 | #[test] 908 | fn bindgen_test_layout_CODER_CONFIG() { 909 | assert_eq!( 910 | ::std::mem::size_of::(), 911 | 140usize, 912 | concat!("Size of: ", stringify!(CODER_CONFIG)) 913 | ); 914 | assert_eq!( 915 | ::std::mem::align_of::(), 916 | 4usize, 917 | concat!("Alignment of ", stringify!(CODER_CONFIG)) 918 | ); 919 | assert_eq!( 920 | unsafe { &(*(::std::ptr::null::())).aot as *const _ as usize }, 921 | 0usize, 922 | concat!( 923 | "Offset of field: ", 924 | stringify!(CODER_CONFIG), 925 | "::", 926 | stringify!(aot) 927 | ) 928 | ); 929 | assert_eq!( 930 | unsafe { &(*(::std::ptr::null::())).extAOT as *const _ as usize }, 931 | 4usize, 932 | concat!( 933 | "Offset of field: ", 934 | stringify!(CODER_CONFIG), 935 | "::", 936 | stringify!(extAOT) 937 | ) 938 | ); 939 | assert_eq!( 940 | unsafe { &(*(::std::ptr::null::())).channelMode as *const _ as usize }, 941 | 8usize, 942 | concat!( 943 | "Offset of field: ", 944 | stringify!(CODER_CONFIG), 945 | "::", 946 | stringify!(channelMode) 947 | ) 948 | ); 949 | assert_eq!( 950 | unsafe { &(*(::std::ptr::null::())).channelConfigZero as *const _ as usize }, 951 | 12usize, 952 | concat!( 953 | "Offset of field: ", 954 | stringify!(CODER_CONFIG), 955 | "::", 956 | stringify!(channelConfigZero) 957 | ) 958 | ); 959 | assert_eq!( 960 | unsafe { &(*(::std::ptr::null::())).samplingRate as *const _ as usize }, 961 | 16usize, 962 | concat!( 963 | "Offset of field: ", 964 | stringify!(CODER_CONFIG), 965 | "::", 966 | stringify!(samplingRate) 967 | ) 968 | ); 969 | assert_eq!( 970 | unsafe { &(*(::std::ptr::null::())).extSamplingRate as *const _ as usize }, 971 | 20usize, 972 | concat!( 973 | "Offset of field: ", 974 | stringify!(CODER_CONFIG), 975 | "::", 976 | stringify!(extSamplingRate) 977 | ) 978 | ); 979 | assert_eq!( 980 | unsafe { 981 | &(*(::std::ptr::null::())).downscaleSamplingRate as *const _ as usize 982 | }, 983 | 24usize, 984 | concat!( 985 | "Offset of field: ", 986 | stringify!(CODER_CONFIG), 987 | "::", 988 | stringify!(downscaleSamplingRate) 989 | ) 990 | ); 991 | assert_eq!( 992 | unsafe { &(*(::std::ptr::null::())).bitRate as *const _ as usize }, 993 | 28usize, 994 | concat!( 995 | "Offset of field: ", 996 | stringify!(CODER_CONFIG), 997 | "::", 998 | stringify!(bitRate) 999 | ) 1000 | ); 1001 | assert_eq!( 1002 | unsafe { &(*(::std::ptr::null::())).samplesPerFrame as *const _ as usize }, 1003 | 32usize, 1004 | concat!( 1005 | "Offset of field: ", 1006 | stringify!(CODER_CONFIG), 1007 | "::", 1008 | stringify!(samplesPerFrame) 1009 | ) 1010 | ); 1011 | assert_eq!( 1012 | unsafe { &(*(::std::ptr::null::())).noChannels as *const _ as usize }, 1013 | 36usize, 1014 | concat!( 1015 | "Offset of field: ", 1016 | stringify!(CODER_CONFIG), 1017 | "::", 1018 | stringify!(noChannels) 1019 | ) 1020 | ); 1021 | assert_eq!( 1022 | unsafe { &(*(::std::ptr::null::())).bitsFrame as *const _ as usize }, 1023 | 40usize, 1024 | concat!( 1025 | "Offset of field: ", 1026 | stringify!(CODER_CONFIG), 1027 | "::", 1028 | stringify!(bitsFrame) 1029 | ) 1030 | ); 1031 | assert_eq!( 1032 | unsafe { &(*(::std::ptr::null::())).nSubFrames as *const _ as usize }, 1033 | 44usize, 1034 | concat!( 1035 | "Offset of field: ", 1036 | stringify!(CODER_CONFIG), 1037 | "::", 1038 | stringify!(nSubFrames) 1039 | ) 1040 | ); 1041 | assert_eq!( 1042 | unsafe { &(*(::std::ptr::null::())).BSACnumOfSubFrame as *const _ as usize }, 1043 | 48usize, 1044 | concat!( 1045 | "Offset of field: ", 1046 | stringify!(CODER_CONFIG), 1047 | "::", 1048 | stringify!(BSACnumOfSubFrame) 1049 | ) 1050 | ); 1051 | assert_eq!( 1052 | unsafe { &(*(::std::ptr::null::())).BSAClayerLength as *const _ as usize }, 1053 | 52usize, 1054 | concat!( 1055 | "Offset of field: ", 1056 | stringify!(CODER_CONFIG), 1057 | "::", 1058 | stringify!(BSAClayerLength) 1059 | ) 1060 | ); 1061 | assert_eq!( 1062 | unsafe { &(*(::std::ptr::null::())).flags as *const _ as usize }, 1063 | 56usize, 1064 | concat!( 1065 | "Offset of field: ", 1066 | stringify!(CODER_CONFIG), 1067 | "::", 1068 | stringify!(flags) 1069 | ) 1070 | ); 1071 | assert_eq!( 1072 | unsafe { &(*(::std::ptr::null::())).matrixMixdownA as *const _ as usize }, 1073 | 60usize, 1074 | concat!( 1075 | "Offset of field: ", 1076 | stringify!(CODER_CONFIG), 1077 | "::", 1078 | stringify!(matrixMixdownA) 1079 | ) 1080 | ); 1081 | assert_eq!( 1082 | unsafe { &(*(::std::ptr::null::())).headerPeriod as *const _ as usize }, 1083 | 61usize, 1084 | concat!( 1085 | "Offset of field: ", 1086 | stringify!(CODER_CONFIG), 1087 | "::", 1088 | stringify!(headerPeriod) 1089 | ) 1090 | ); 1091 | assert_eq!( 1092 | unsafe { &(*(::std::ptr::null::())).stereoConfigIndex as *const _ as usize }, 1093 | 62usize, 1094 | concat!( 1095 | "Offset of field: ", 1096 | stringify!(CODER_CONFIG), 1097 | "::", 1098 | stringify!(stereoConfigIndex) 1099 | ) 1100 | ); 1101 | assert_eq!( 1102 | unsafe { &(*(::std::ptr::null::())).sbrMode as *const _ as usize }, 1103 | 63usize, 1104 | concat!( 1105 | "Offset of field: ", 1106 | stringify!(CODER_CONFIG), 1107 | "::", 1108 | stringify!(sbrMode) 1109 | ) 1110 | ); 1111 | assert_eq!( 1112 | unsafe { &(*(::std::ptr::null::())).sbrSignaling as *const _ as usize }, 1113 | 64usize, 1114 | concat!( 1115 | "Offset of field: ", 1116 | stringify!(CODER_CONFIG), 1117 | "::", 1118 | stringify!(sbrSignaling) 1119 | ) 1120 | ); 1121 | assert_eq!( 1122 | unsafe { &(*(::std::ptr::null::())).rawConfig as *const _ as usize }, 1123 | 68usize, 1124 | concat!( 1125 | "Offset of field: ", 1126 | stringify!(CODER_CONFIG), 1127 | "::", 1128 | stringify!(rawConfig) 1129 | ) 1130 | ); 1131 | assert_eq!( 1132 | unsafe { &(*(::std::ptr::null::())).rawConfigBits as *const _ as usize }, 1133 | 132usize, 1134 | concat!( 1135 | "Offset of field: ", 1136 | stringify!(CODER_CONFIG), 1137 | "::", 1138 | stringify!(rawConfigBits) 1139 | ) 1140 | ); 1141 | assert_eq!( 1142 | unsafe { &(*(::std::ptr::null::())).sbrPresent as *const _ as usize }, 1143 | 136usize, 1144 | concat!( 1145 | "Offset of field: ", 1146 | stringify!(CODER_CONFIG), 1147 | "::", 1148 | stringify!(sbrPresent) 1149 | ) 1150 | ); 1151 | assert_eq!( 1152 | unsafe { &(*(::std::ptr::null::())).psPresent as *const _ as usize }, 1153 | 137usize, 1154 | concat!( 1155 | "Offset of field: ", 1156 | stringify!(CODER_CONFIG), 1157 | "::", 1158 | stringify!(psPresent) 1159 | ) 1160 | ); 1161 | } 1162 | #[doc = "< Invalid Element helper ID."] 1163 | pub const MP4_ELEMENT_ID_ID_NONE: MP4_ELEMENT_ID = -1; 1164 | #[doc = "< Single Channel Element."] 1165 | pub const MP4_ELEMENT_ID_ID_SCE: MP4_ELEMENT_ID = 0; 1166 | #[doc = "< Channel Pair Element."] 1167 | pub const MP4_ELEMENT_ID_ID_CPE: MP4_ELEMENT_ID = 1; 1168 | #[doc = "< Coupling Channel Element."] 1169 | pub const MP4_ELEMENT_ID_ID_CCE: MP4_ELEMENT_ID = 2; 1170 | #[doc = "< LFE Channel Element."] 1171 | pub const MP4_ELEMENT_ID_ID_LFE: MP4_ELEMENT_ID = 3; 1172 | #[doc = "< Currently one Data Stream Element for ancillary data is"] 1173 | #[doc = "supported."] 1174 | pub const MP4_ELEMENT_ID_ID_DSE: MP4_ELEMENT_ID = 4; 1175 | #[doc = "< Program Config Element."] 1176 | pub const MP4_ELEMENT_ID_ID_PCE: MP4_ELEMENT_ID = 5; 1177 | #[doc = "< Fill Element."] 1178 | pub const MP4_ELEMENT_ID_ID_FIL: MP4_ELEMENT_ID = 6; 1179 | #[doc = "< Arnie (End Element = Terminator)."] 1180 | pub const MP4_ELEMENT_ID_ID_END: MP4_ELEMENT_ID = 7; 1181 | #[doc = "< Extension Payload (ER only)."] 1182 | pub const MP4_ELEMENT_ID_ID_EXT: MP4_ELEMENT_ID = 8; 1183 | #[doc = "< AAC scalable element (ER only)."] 1184 | pub const MP4_ELEMENT_ID_ID_SCAL: MP4_ELEMENT_ID = 9; 1185 | #[doc = "< Single Channel Element."] 1186 | pub const MP4_ELEMENT_ID_ID_USAC_SCE: MP4_ELEMENT_ID = 16; 1187 | #[doc = "< Channel Pair Element."] 1188 | pub const MP4_ELEMENT_ID_ID_USAC_CPE: MP4_ELEMENT_ID = 17; 1189 | #[doc = "< LFE Channel Element."] 1190 | pub const MP4_ELEMENT_ID_ID_USAC_LFE: MP4_ELEMENT_ID = 18; 1191 | #[doc = "< Extension Element."] 1192 | pub const MP4_ELEMENT_ID_ID_USAC_EXT: MP4_ELEMENT_ID = 19; 1193 | #[doc = "< Arnie (End Element = Terminator)."] 1194 | pub const MP4_ELEMENT_ID_ID_USAC_END: MP4_ELEMENT_ID = 20; 1195 | pub const MP4_ELEMENT_ID_ID_LAST: MP4_ELEMENT_ID = 21; 1196 | #[doc = " MP4 Element IDs."] 1197 | pub type MP4_ELEMENT_ID = i32; 1198 | pub const CONFIG_EXT_ID_ID_CONFIG_EXT_FILL: CONFIG_EXT_ID = 0; 1199 | pub const CONFIG_EXT_ID_ID_CONFIG_EXT_DOWNMIX: CONFIG_EXT_ID = 1; 1200 | pub const CONFIG_EXT_ID_ID_CONFIG_EXT_LOUDNESS_INFO: CONFIG_EXT_ID = 2; 1201 | pub const CONFIG_EXT_ID_ID_CONFIG_EXT_AUDIOSCENE_INFO: CONFIG_EXT_ID = 3; 1202 | pub const CONFIG_EXT_ID_ID_CONFIG_EXT_HOA_MATRIX: CONFIG_EXT_ID = 4; 1203 | pub const CONFIG_EXT_ID_ID_CONFIG_EXT_SIG_GROUP_INFO: CONFIG_EXT_ID = 6; 1204 | pub type CONFIG_EXT_ID = u32; 1205 | pub const EXT_PAYLOAD_TYPE_EXT_FIL: EXT_PAYLOAD_TYPE = 0; 1206 | pub const EXT_PAYLOAD_TYPE_EXT_FILL_DATA: EXT_PAYLOAD_TYPE = 1; 1207 | pub const EXT_PAYLOAD_TYPE_EXT_DATA_ELEMENT: EXT_PAYLOAD_TYPE = 2; 1208 | pub const EXT_PAYLOAD_TYPE_EXT_DATA_LENGTH: EXT_PAYLOAD_TYPE = 3; 1209 | pub const EXT_PAYLOAD_TYPE_EXT_UNI_DRC: EXT_PAYLOAD_TYPE = 4; 1210 | pub const EXT_PAYLOAD_TYPE_EXT_LDSAC_DATA: EXT_PAYLOAD_TYPE = 9; 1211 | pub const EXT_PAYLOAD_TYPE_EXT_SAOC_DATA: EXT_PAYLOAD_TYPE = 10; 1212 | pub const EXT_PAYLOAD_TYPE_EXT_DYNAMIC_RANGE: EXT_PAYLOAD_TYPE = 11; 1213 | pub const EXT_PAYLOAD_TYPE_EXT_SAC_DATA: EXT_PAYLOAD_TYPE = 12; 1214 | pub const EXT_PAYLOAD_TYPE_EXT_SBR_DATA: EXT_PAYLOAD_TYPE = 13; 1215 | pub const EXT_PAYLOAD_TYPE_EXT_SBR_DATA_CRC: EXT_PAYLOAD_TYPE = 14; 1216 | #[doc = " Extension payload types."] 1217 | pub type EXT_PAYLOAD_TYPE = u32; 1218 | pub const USAC_EXT_ELEMENT_TYPE_ID_EXT_ELE_FILL: USAC_EXT_ELEMENT_TYPE = 0; 1219 | pub const USAC_EXT_ELEMENT_TYPE_ID_EXT_ELE_MPEGS: USAC_EXT_ELEMENT_TYPE = 1; 1220 | pub const USAC_EXT_ELEMENT_TYPE_ID_EXT_ELE_SAOC: USAC_EXT_ELEMENT_TYPE = 2; 1221 | pub const USAC_EXT_ELEMENT_TYPE_ID_EXT_ELE_AUDIOPREROLL: USAC_EXT_ELEMENT_TYPE = 3; 1222 | pub const USAC_EXT_ELEMENT_TYPE_ID_EXT_ELE_UNI_DRC: USAC_EXT_ELEMENT_TYPE = 4; 1223 | pub const USAC_EXT_ELEMENT_TYPE_ID_EXT_ELE_OBJ_METADATA: USAC_EXT_ELEMENT_TYPE = 5; 1224 | pub const USAC_EXT_ELEMENT_TYPE_ID_EXT_ELE_SAOC_3D: USAC_EXT_ELEMENT_TYPE = 6; 1225 | pub const USAC_EXT_ELEMENT_TYPE_ID_EXT_ELE_HOA: USAC_EXT_ELEMENT_TYPE = 7; 1226 | pub const USAC_EXT_ELEMENT_TYPE_ID_EXT_ELE_FMT_CNVRTR: USAC_EXT_ELEMENT_TYPE = 8; 1227 | pub const USAC_EXT_ELEMENT_TYPE_ID_EXT_ELE_MCT: USAC_EXT_ELEMENT_TYPE = 9; 1228 | pub const USAC_EXT_ELEMENT_TYPE_ID_EXT_ELE_ENHANCED_OBJ_METADATA: USAC_EXT_ELEMENT_TYPE = 13; 1229 | pub const USAC_EXT_ELEMENT_TYPE_ID_EXT_ELE_VR_METADATA: USAC_EXT_ELEMENT_TYPE = 129; 1230 | pub const USAC_EXT_ELEMENT_TYPE_ID_EXT_ELE_UNKNOWN: USAC_EXT_ELEMENT_TYPE = 255; 1231 | #[doc = " MPEG-D USAC & RSVD60 3D audio Extension Element Types."] 1232 | pub type USAC_EXT_ELEMENT_TYPE = u32; 1233 | pub const TP_CONFIG_TYPE_TC_NOTHING: TP_CONFIG_TYPE = 0; 1234 | pub const TP_CONFIG_TYPE_TC_RAW_ADTS: TP_CONFIG_TYPE = 2; 1235 | pub const TP_CONFIG_TYPE_TC_RAW_LATM_MCP1: TP_CONFIG_TYPE = 6; 1236 | pub const TP_CONFIG_TYPE_TC_RAW_SDC: TP_CONFIG_TYPE = 21; 1237 | #[doc = " Proprietary raw packet file configuration data type identifier."] 1238 | pub type TP_CONFIG_TYPE = u32; 1239 | pub const FDK_MODULE_ID_FDK_NONE: FDK_MODULE_ID = 0; 1240 | pub const FDK_MODULE_ID_FDK_TOOLS: FDK_MODULE_ID = 1; 1241 | pub const FDK_MODULE_ID_FDK_SYSLIB: FDK_MODULE_ID = 2; 1242 | pub const FDK_MODULE_ID_FDK_AACDEC: FDK_MODULE_ID = 3; 1243 | pub const FDK_MODULE_ID_FDK_AACENC: FDK_MODULE_ID = 4; 1244 | pub const FDK_MODULE_ID_FDK_SBRDEC: FDK_MODULE_ID = 5; 1245 | pub const FDK_MODULE_ID_FDK_SBRENC: FDK_MODULE_ID = 6; 1246 | pub const FDK_MODULE_ID_FDK_TPDEC: FDK_MODULE_ID = 7; 1247 | pub const FDK_MODULE_ID_FDK_TPENC: FDK_MODULE_ID = 8; 1248 | pub const FDK_MODULE_ID_FDK_MPSDEC: FDK_MODULE_ID = 9; 1249 | pub const FDK_MODULE_ID_FDK_MPEGFILEREAD: FDK_MODULE_ID = 10; 1250 | pub const FDK_MODULE_ID_FDK_MPEGFILEWRITE: FDK_MODULE_ID = 11; 1251 | pub const FDK_MODULE_ID_FDK_PCMDMX: FDK_MODULE_ID = 31; 1252 | pub const FDK_MODULE_ID_FDK_MPSENC: FDK_MODULE_ID = 34; 1253 | pub const FDK_MODULE_ID_FDK_TDLIMIT: FDK_MODULE_ID = 35; 1254 | pub const FDK_MODULE_ID_FDK_UNIDRCDEC: FDK_MODULE_ID = 38; 1255 | pub const FDK_MODULE_ID_FDK_MODULE_LAST: FDK_MODULE_ID = 39; 1256 | pub type FDK_MODULE_ID = u32; 1257 | #[doc = " Library information."] 1258 | #[repr(C)] 1259 | #[derive(Debug, Copy, Clone)] 1260 | pub struct LIB_INFO { 1261 | pub title: *const ::std::os::raw::c_char, 1262 | pub build_date: *const ::std::os::raw::c_char, 1263 | pub build_time: *const ::std::os::raw::c_char, 1264 | pub module_id: FDK_MODULE_ID, 1265 | pub version: INT, 1266 | pub flags: UINT, 1267 | pub versionStr: [::std::os::raw::c_char; 32usize], 1268 | } 1269 | #[test] 1270 | fn bindgen_test_layout_LIB_INFO() { 1271 | assert_eq!( 1272 | ::std::mem::size_of::(), 1273 | 72usize, 1274 | concat!("Size of: ", stringify!(LIB_INFO)) 1275 | ); 1276 | assert_eq!( 1277 | ::std::mem::align_of::(), 1278 | 8usize, 1279 | concat!("Alignment of ", stringify!(LIB_INFO)) 1280 | ); 1281 | assert_eq!( 1282 | unsafe { &(*(::std::ptr::null::())).title as *const _ as usize }, 1283 | 0usize, 1284 | concat!( 1285 | "Offset of field: ", 1286 | stringify!(LIB_INFO), 1287 | "::", 1288 | stringify!(title) 1289 | ) 1290 | ); 1291 | assert_eq!( 1292 | unsafe { &(*(::std::ptr::null::())).build_date as *const _ as usize }, 1293 | 8usize, 1294 | concat!( 1295 | "Offset of field: ", 1296 | stringify!(LIB_INFO), 1297 | "::", 1298 | stringify!(build_date) 1299 | ) 1300 | ); 1301 | assert_eq!( 1302 | unsafe { &(*(::std::ptr::null::())).build_time as *const _ as usize }, 1303 | 16usize, 1304 | concat!( 1305 | "Offset of field: ", 1306 | stringify!(LIB_INFO), 1307 | "::", 1308 | stringify!(build_time) 1309 | ) 1310 | ); 1311 | assert_eq!( 1312 | unsafe { &(*(::std::ptr::null::())).module_id as *const _ as usize }, 1313 | 24usize, 1314 | concat!( 1315 | "Offset of field: ", 1316 | stringify!(LIB_INFO), 1317 | "::", 1318 | stringify!(module_id) 1319 | ) 1320 | ); 1321 | assert_eq!( 1322 | unsafe { &(*(::std::ptr::null::())).version as *const _ as usize }, 1323 | 28usize, 1324 | concat!( 1325 | "Offset of field: ", 1326 | stringify!(LIB_INFO), 1327 | "::", 1328 | stringify!(version) 1329 | ) 1330 | ); 1331 | assert_eq!( 1332 | unsafe { &(*(::std::ptr::null::())).flags as *const _ as usize }, 1333 | 32usize, 1334 | concat!( 1335 | "Offset of field: ", 1336 | stringify!(LIB_INFO), 1337 | "::", 1338 | stringify!(flags) 1339 | ) 1340 | ); 1341 | assert_eq!( 1342 | unsafe { &(*(::std::ptr::null::())).versionStr as *const _ as usize }, 1343 | 36usize, 1344 | concat!( 1345 | "Offset of field: ", 1346 | stringify!(LIB_INFO), 1347 | "::", 1348 | stringify!(versionStr) 1349 | ) 1350 | ); 1351 | } 1352 | #[doc = " I/O buffer descriptor."] 1353 | #[repr(C)] 1354 | #[derive(Debug, Copy, Clone)] 1355 | pub struct FDK_bufDescr { 1356 | #[doc = "< Pointer to an array containing buffer base addresses."] 1357 | #[doc = "Set to NULL for buffer requirement info."] 1358 | pub ppBase: *mut *mut ::std::os::raw::c_void, 1359 | #[doc = "< Pointer to an array containing the number of elements"] 1360 | #[doc = "that can be placed in the specific buffer."] 1361 | pub pBufSize: *mut UINT, 1362 | #[doc = "< Pointer to an array containing the element size for each"] 1363 | #[doc = "buffer in bytes. That is mostly the number returned by the"] 1364 | #[doc = "sizeof() operator for the data type used for the specific"] 1365 | #[doc = "buffer."] 1366 | pub pEleSize: *mut UINT, 1367 | #[doc = "< Pointer to an array of bit fields containing a description"] 1368 | #[doc = "for each buffer. See XXX below for more details."] 1369 | pub pBufType: *mut UINT, 1370 | #[doc = "< Total number of buffers."] 1371 | pub numBufs: UINT, 1372 | } 1373 | #[test] 1374 | fn bindgen_test_layout_FDK_bufDescr() { 1375 | assert_eq!( 1376 | ::std::mem::size_of::(), 1377 | 40usize, 1378 | concat!("Size of: ", stringify!(FDK_bufDescr)) 1379 | ); 1380 | assert_eq!( 1381 | ::std::mem::align_of::(), 1382 | 8usize, 1383 | concat!("Alignment of ", stringify!(FDK_bufDescr)) 1384 | ); 1385 | assert_eq!( 1386 | unsafe { &(*(::std::ptr::null::())).ppBase as *const _ as usize }, 1387 | 0usize, 1388 | concat!( 1389 | "Offset of field: ", 1390 | stringify!(FDK_bufDescr), 1391 | "::", 1392 | stringify!(ppBase) 1393 | ) 1394 | ); 1395 | assert_eq!( 1396 | unsafe { &(*(::std::ptr::null::())).pBufSize as *const _ as usize }, 1397 | 8usize, 1398 | concat!( 1399 | "Offset of field: ", 1400 | stringify!(FDK_bufDescr), 1401 | "::", 1402 | stringify!(pBufSize) 1403 | ) 1404 | ); 1405 | assert_eq!( 1406 | unsafe { &(*(::std::ptr::null::())).pEleSize as *const _ as usize }, 1407 | 16usize, 1408 | concat!( 1409 | "Offset of field: ", 1410 | stringify!(FDK_bufDescr), 1411 | "::", 1412 | stringify!(pEleSize) 1413 | ) 1414 | ); 1415 | assert_eq!( 1416 | unsafe { &(*(::std::ptr::null::())).pBufType as *const _ as usize }, 1417 | 24usize, 1418 | concat!( 1419 | "Offset of field: ", 1420 | stringify!(FDK_bufDescr), 1421 | "::", 1422 | stringify!(pBufType) 1423 | ) 1424 | ); 1425 | assert_eq!( 1426 | unsafe { &(*(::std::ptr::null::())).numBufs as *const _ as usize }, 1427 | 32usize, 1428 | concat!( 1429 | "Offset of field: ", 1430 | stringify!(FDK_bufDescr), 1431 | "::", 1432 | stringify!(numBufs) 1433 | ) 1434 | ); 1435 | } 1436 | #[doc = "< No error happened. All fine."] 1437 | pub const AACENC_ERROR_AACENC_OK: AACENC_ERROR = 0; 1438 | pub const AACENC_ERROR_AACENC_INVALID_HANDLE: AACENC_ERROR = 32; 1439 | #[doc = "< Memory allocation failed."] 1440 | pub const AACENC_ERROR_AACENC_MEMORY_ERROR: AACENC_ERROR = 33; 1441 | #[doc = "< Parameter not available."] 1442 | pub const AACENC_ERROR_AACENC_UNSUPPORTED_PARAMETER: AACENC_ERROR = 34; 1443 | #[doc = "< Configuration not provided."] 1444 | pub const AACENC_ERROR_AACENC_INVALID_CONFIG: AACENC_ERROR = 35; 1445 | #[doc = "< General initialization error."] 1446 | pub const AACENC_ERROR_AACENC_INIT_ERROR: AACENC_ERROR = 64; 1447 | #[doc = "< AAC library initialization error."] 1448 | pub const AACENC_ERROR_AACENC_INIT_AAC_ERROR: AACENC_ERROR = 65; 1449 | #[doc = "< SBR library initialization error."] 1450 | pub const AACENC_ERROR_AACENC_INIT_SBR_ERROR: AACENC_ERROR = 66; 1451 | #[doc = "< Transport library initialization error."] 1452 | pub const AACENC_ERROR_AACENC_INIT_TP_ERROR: AACENC_ERROR = 67; 1453 | pub const AACENC_ERROR_AACENC_INIT_META_ERROR: AACENC_ERROR = 68; 1454 | #[doc = "< MPS library initialization error."] 1455 | pub const AACENC_ERROR_AACENC_INIT_MPS_ERROR: AACENC_ERROR = 69; 1456 | #[doc = "< The encoding process was interrupted by an"] 1457 | #[doc = "unexpected error."] 1458 | pub const AACENC_ERROR_AACENC_ENCODE_ERROR: AACENC_ERROR = 96; 1459 | #[doc = "< End of file reached."] 1460 | pub const AACENC_ERROR_AACENC_ENCODE_EOF: AACENC_ERROR = 128; 1461 | #[doc = " AAC encoder error codes."] 1462 | pub type AACENC_ERROR = u32; 1463 | #[doc = "< Audio input buffer, interleaved INT_PCM samples."] 1464 | pub const AACENC_BufferIdentifier_IN_AUDIO_DATA: AACENC_BufferIdentifier = 0; 1465 | #[doc = "< Ancillary data to be embedded into bitstream."] 1466 | pub const AACENC_BufferIdentifier_IN_ANCILLRY_DATA: AACENC_BufferIdentifier = 1; 1467 | #[doc = "< Setup structure for embedding meta data."] 1468 | pub const AACENC_BufferIdentifier_IN_METADATA_SETUP: AACENC_BufferIdentifier = 2; 1469 | #[doc = "< Buffer holds bitstream output data."] 1470 | pub const AACENC_BufferIdentifier_OUT_BITSTREAM_DATA: AACENC_BufferIdentifier = 3; 1471 | pub const AACENC_BufferIdentifier_OUT_AU_SIZES: AACENC_BufferIdentifier = 4; 1472 | #[doc = " AAC encoder buffer descriptors identifier."] 1473 | #[doc = " This identifier are used within buffer descriptors"] 1474 | #[doc = " AACENC_BufDesc::bufferIdentifiers."] 1475 | pub type AACENC_BufferIdentifier = u32; 1476 | #[repr(C)] 1477 | #[derive(Debug, Copy, Clone)] 1478 | pub struct AACENCODER { 1479 | _unused: [u8; 0], 1480 | } 1481 | #[doc = " AAC encoder handle."] 1482 | pub type HANDLE_AACENCODER = *mut AACENCODER; 1483 | #[doc = " Provides some info about the encoder configuration."] 1484 | #[repr(C)] 1485 | #[derive(Copy, Clone)] 1486 | pub struct AACENC_InfoStruct { 1487 | #[doc = "< Maximum number of encoder bitstream bytes within one"] 1488 | #[doc = "frame. Size depends on maximum number of supported"] 1489 | #[doc = "channels in encoder instance. For superframing (as"] 1490 | #[doc = "used for example in DAB+), size has to be a multiple"] 1491 | #[doc = "accordingly."] 1492 | pub maxOutBufBytes: UINT, 1493 | #[doc = "< Maximum number of ancillary data bytes which can be"] 1494 | #[doc = "inserted into bitstream within one frame."] 1495 | pub maxAncBytes: UINT, 1496 | #[doc = "< Internal input buffer fill level in samples per"] 1497 | #[doc = "channel. This parameter will automatically be cleared"] 1498 | #[doc = "if samplingrate or channel(Mode/Order) changes."] 1499 | pub inBufFillLevel: UINT, 1500 | #[doc = "< Number of input channels expected in encoding"] 1501 | #[doc = "process."] 1502 | pub inputChannels: UINT, 1503 | #[doc = "< Amount of input audio samples consumed each frame per"] 1504 | #[doc = "channel, depending on audio object type configuration."] 1505 | pub frameLength: UINT, 1506 | #[doc = "< Codec delay in PCM samples/channel. Depends on framelength"] 1507 | #[doc = "and AOT. Does not include framing delay for filling up encoder"] 1508 | #[doc = "PCM input buffer."] 1509 | pub nDelay: UINT, 1510 | #[doc = "< Codec delay in PCM samples/channel, w/o delay caused by"] 1511 | #[doc = "the decoder SBR module. This delay is needed to correctly"] 1512 | #[doc = "write edit lists for gapless playback. The decoder may not"] 1513 | #[doc = "know how much delay is introdcued by SBR, since it may not"] 1514 | #[doc = "know if SBR is active at all (implicit signaling),"] 1515 | #[doc = "therefore the deocder must take into account any delay"] 1516 | #[doc = "caused by the SBR module."] 1517 | pub nDelayCore: UINT, 1518 | #[doc = "< Configuration buffer in binary format as an"] 1519 | #[doc = "AudioSpecificConfig or StreamMuxConfig according to the"] 1520 | #[doc = "selected transport type."] 1521 | pub confBuf: [UCHAR; 64usize], 1522 | #[doc = "< Number of valid bytes in confBuf."] 1523 | pub confSize: UINT, 1524 | } 1525 | #[test] 1526 | fn bindgen_test_layout_AACENC_InfoStruct() { 1527 | assert_eq!( 1528 | ::std::mem::size_of::(), 1529 | 96usize, 1530 | concat!("Size of: ", stringify!(AACENC_InfoStruct)) 1531 | ); 1532 | assert_eq!( 1533 | ::std::mem::align_of::(), 1534 | 4usize, 1535 | concat!("Alignment of ", stringify!(AACENC_InfoStruct)) 1536 | ); 1537 | assert_eq!( 1538 | unsafe { 1539 | &(*(::std::ptr::null::())).maxOutBufBytes as *const _ as usize 1540 | }, 1541 | 0usize, 1542 | concat!( 1543 | "Offset of field: ", 1544 | stringify!(AACENC_InfoStruct), 1545 | "::", 1546 | stringify!(maxOutBufBytes) 1547 | ) 1548 | ); 1549 | assert_eq!( 1550 | unsafe { &(*(::std::ptr::null::())).maxAncBytes as *const _ as usize }, 1551 | 4usize, 1552 | concat!( 1553 | "Offset of field: ", 1554 | stringify!(AACENC_InfoStruct), 1555 | "::", 1556 | stringify!(maxAncBytes) 1557 | ) 1558 | ); 1559 | assert_eq!( 1560 | unsafe { 1561 | &(*(::std::ptr::null::())).inBufFillLevel as *const _ as usize 1562 | }, 1563 | 8usize, 1564 | concat!( 1565 | "Offset of field: ", 1566 | stringify!(AACENC_InfoStruct), 1567 | "::", 1568 | stringify!(inBufFillLevel) 1569 | ) 1570 | ); 1571 | assert_eq!( 1572 | unsafe { &(*(::std::ptr::null::())).inputChannels as *const _ as usize }, 1573 | 12usize, 1574 | concat!( 1575 | "Offset of field: ", 1576 | stringify!(AACENC_InfoStruct), 1577 | "::", 1578 | stringify!(inputChannels) 1579 | ) 1580 | ); 1581 | assert_eq!( 1582 | unsafe { &(*(::std::ptr::null::())).frameLength as *const _ as usize }, 1583 | 16usize, 1584 | concat!( 1585 | "Offset of field: ", 1586 | stringify!(AACENC_InfoStruct), 1587 | "::", 1588 | stringify!(frameLength) 1589 | ) 1590 | ); 1591 | assert_eq!( 1592 | unsafe { &(*(::std::ptr::null::())).nDelay as *const _ as usize }, 1593 | 20usize, 1594 | concat!( 1595 | "Offset of field: ", 1596 | stringify!(AACENC_InfoStruct), 1597 | "::", 1598 | stringify!(nDelay) 1599 | ) 1600 | ); 1601 | assert_eq!( 1602 | unsafe { &(*(::std::ptr::null::())).nDelayCore as *const _ as usize }, 1603 | 24usize, 1604 | concat!( 1605 | "Offset of field: ", 1606 | stringify!(AACENC_InfoStruct), 1607 | "::", 1608 | stringify!(nDelayCore) 1609 | ) 1610 | ); 1611 | assert_eq!( 1612 | unsafe { &(*(::std::ptr::null::())).confBuf as *const _ as usize }, 1613 | 28usize, 1614 | concat!( 1615 | "Offset of field: ", 1616 | stringify!(AACENC_InfoStruct), 1617 | "::", 1618 | stringify!(confBuf) 1619 | ) 1620 | ); 1621 | assert_eq!( 1622 | unsafe { &(*(::std::ptr::null::())).confSize as *const _ as usize }, 1623 | 92usize, 1624 | concat!( 1625 | "Offset of field: ", 1626 | stringify!(AACENC_InfoStruct), 1627 | "::", 1628 | stringify!(confSize) 1629 | ) 1630 | ); 1631 | } 1632 | #[doc = " Describes the input and output buffers for an aacEncEncode() call."] 1633 | #[repr(C)] 1634 | #[derive(Debug, Copy, Clone)] 1635 | pub struct AACENC_BufDesc { 1636 | #[doc = "< Number of buffers."] 1637 | pub numBufs: INT, 1638 | #[doc = "< Pointer to vector containing buffer addresses."] 1639 | pub bufs: *mut *mut ::std::os::raw::c_void, 1640 | #[doc = "< Identifier of each buffer element. See"] 1641 | #[doc = "::AACENC_BufferIdentifier."] 1642 | pub bufferIdentifiers: *mut INT, 1643 | #[doc = "< Size of each buffer in 8-bit bytes."] 1644 | pub bufSizes: *mut INT, 1645 | #[doc = "< Size of each buffer element in bytes."] 1646 | pub bufElSizes: *mut INT, 1647 | } 1648 | #[test] 1649 | fn bindgen_test_layout_AACENC_BufDesc() { 1650 | assert_eq!( 1651 | ::std::mem::size_of::(), 1652 | 40usize, 1653 | concat!("Size of: ", stringify!(AACENC_BufDesc)) 1654 | ); 1655 | assert_eq!( 1656 | ::std::mem::align_of::(), 1657 | 8usize, 1658 | concat!("Alignment of ", stringify!(AACENC_BufDesc)) 1659 | ); 1660 | assert_eq!( 1661 | unsafe { &(*(::std::ptr::null::())).numBufs as *const _ as usize }, 1662 | 0usize, 1663 | concat!( 1664 | "Offset of field: ", 1665 | stringify!(AACENC_BufDesc), 1666 | "::", 1667 | stringify!(numBufs) 1668 | ) 1669 | ); 1670 | assert_eq!( 1671 | unsafe { &(*(::std::ptr::null::())).bufs as *const _ as usize }, 1672 | 8usize, 1673 | concat!( 1674 | "Offset of field: ", 1675 | stringify!(AACENC_BufDesc), 1676 | "::", 1677 | stringify!(bufs) 1678 | ) 1679 | ); 1680 | assert_eq!( 1681 | unsafe { 1682 | &(*(::std::ptr::null::())).bufferIdentifiers as *const _ as usize 1683 | }, 1684 | 16usize, 1685 | concat!( 1686 | "Offset of field: ", 1687 | stringify!(AACENC_BufDesc), 1688 | "::", 1689 | stringify!(bufferIdentifiers) 1690 | ) 1691 | ); 1692 | assert_eq!( 1693 | unsafe { &(*(::std::ptr::null::())).bufSizes as *const _ as usize }, 1694 | 24usize, 1695 | concat!( 1696 | "Offset of field: ", 1697 | stringify!(AACENC_BufDesc), 1698 | "::", 1699 | stringify!(bufSizes) 1700 | ) 1701 | ); 1702 | assert_eq!( 1703 | unsafe { &(*(::std::ptr::null::())).bufElSizes as *const _ as usize }, 1704 | 32usize, 1705 | concat!( 1706 | "Offset of field: ", 1707 | stringify!(AACENC_BufDesc), 1708 | "::", 1709 | stringify!(bufElSizes) 1710 | ) 1711 | ); 1712 | } 1713 | #[doc = " Defines the input arguments for an aacEncEncode() call."] 1714 | #[repr(C)] 1715 | #[derive(Debug, Copy, Clone)] 1716 | pub struct AACENC_InArgs { 1717 | #[doc = "< Number of valid input audio samples (multiple of input"] 1718 | #[doc = "channels)."] 1719 | pub numInSamples: INT, 1720 | #[doc = "< Number of ancillary data bytes to be encoded."] 1721 | pub numAncBytes: INT, 1722 | } 1723 | #[test] 1724 | fn bindgen_test_layout_AACENC_InArgs() { 1725 | assert_eq!( 1726 | ::std::mem::size_of::(), 1727 | 8usize, 1728 | concat!("Size of: ", stringify!(AACENC_InArgs)) 1729 | ); 1730 | assert_eq!( 1731 | ::std::mem::align_of::(), 1732 | 4usize, 1733 | concat!("Alignment of ", stringify!(AACENC_InArgs)) 1734 | ); 1735 | assert_eq!( 1736 | unsafe { &(*(::std::ptr::null::())).numInSamples as *const _ as usize }, 1737 | 0usize, 1738 | concat!( 1739 | "Offset of field: ", 1740 | stringify!(AACENC_InArgs), 1741 | "::", 1742 | stringify!(numInSamples) 1743 | ) 1744 | ); 1745 | assert_eq!( 1746 | unsafe { &(*(::std::ptr::null::())).numAncBytes as *const _ as usize }, 1747 | 4usize, 1748 | concat!( 1749 | "Offset of field: ", 1750 | stringify!(AACENC_InArgs), 1751 | "::", 1752 | stringify!(numAncBytes) 1753 | ) 1754 | ); 1755 | } 1756 | #[doc = " Defines the output arguments for an aacEncEncode() call."] 1757 | #[repr(C)] 1758 | #[derive(Debug, Copy, Clone)] 1759 | pub struct AACENC_OutArgs { 1760 | #[doc = "< Number of valid bitstream bytes generated during"] 1761 | #[doc = "aacEncEncode()."] 1762 | pub numOutBytes: INT, 1763 | #[doc = "< Number of input audio samples consumed by the encoder."] 1764 | pub numInSamples: INT, 1765 | #[doc = "< Number of ancillary data bytes consumed by the encoder."] 1766 | pub numAncBytes: INT, 1767 | #[doc = "< State of the bit reservoir in bits."] 1768 | pub bitResState: INT, 1769 | } 1770 | #[test] 1771 | fn bindgen_test_layout_AACENC_OutArgs() { 1772 | assert_eq!( 1773 | ::std::mem::size_of::(), 1774 | 16usize, 1775 | concat!("Size of: ", stringify!(AACENC_OutArgs)) 1776 | ); 1777 | assert_eq!( 1778 | ::std::mem::align_of::(), 1779 | 4usize, 1780 | concat!("Alignment of ", stringify!(AACENC_OutArgs)) 1781 | ); 1782 | assert_eq!( 1783 | unsafe { &(*(::std::ptr::null::())).numOutBytes as *const _ as usize }, 1784 | 0usize, 1785 | concat!( 1786 | "Offset of field: ", 1787 | stringify!(AACENC_OutArgs), 1788 | "::", 1789 | stringify!(numOutBytes) 1790 | ) 1791 | ); 1792 | assert_eq!( 1793 | unsafe { &(*(::std::ptr::null::())).numInSamples as *const _ as usize }, 1794 | 4usize, 1795 | concat!( 1796 | "Offset of field: ", 1797 | stringify!(AACENC_OutArgs), 1798 | "::", 1799 | stringify!(numInSamples) 1800 | ) 1801 | ); 1802 | assert_eq!( 1803 | unsafe { &(*(::std::ptr::null::())).numAncBytes as *const _ as usize }, 1804 | 8usize, 1805 | concat!( 1806 | "Offset of field: ", 1807 | stringify!(AACENC_OutArgs), 1808 | "::", 1809 | stringify!(numAncBytes) 1810 | ) 1811 | ); 1812 | assert_eq!( 1813 | unsafe { &(*(::std::ptr::null::())).bitResState as *const _ as usize }, 1814 | 12usize, 1815 | concat!( 1816 | "Offset of field: ", 1817 | stringify!(AACENC_OutArgs), 1818 | "::", 1819 | stringify!(bitResState) 1820 | ) 1821 | ); 1822 | } 1823 | #[doc = "< None."] 1824 | pub const AACENC_METADATA_DRC_PROFILE_AACENC_METADATA_DRC_NONE: AACENC_METADATA_DRC_PROFILE = 0; 1825 | #[doc = "< Film standard."] 1826 | pub const AACENC_METADATA_DRC_PROFILE_AACENC_METADATA_DRC_FILMSTANDARD: 1827 | AACENC_METADATA_DRC_PROFILE = 1; 1828 | #[doc = "< Film light."] 1829 | pub const AACENC_METADATA_DRC_PROFILE_AACENC_METADATA_DRC_FILMLIGHT: AACENC_METADATA_DRC_PROFILE = 1830 | 2; 1831 | #[doc = "< Music standard."] 1832 | pub const AACENC_METADATA_DRC_PROFILE_AACENC_METADATA_DRC_MUSICSTANDARD: 1833 | AACENC_METADATA_DRC_PROFILE = 3; 1834 | #[doc = "< Music light."] 1835 | pub const AACENC_METADATA_DRC_PROFILE_AACENC_METADATA_DRC_MUSICLIGHT: AACENC_METADATA_DRC_PROFILE = 1836 | 4; 1837 | #[doc = "< Speech."] 1838 | pub const AACENC_METADATA_DRC_PROFILE_AACENC_METADATA_DRC_SPEECH: AACENC_METADATA_DRC_PROFILE = 5; 1839 | pub const AACENC_METADATA_DRC_PROFILE_AACENC_METADATA_DRC_NOT_PRESENT: AACENC_METADATA_DRC_PROFILE = 1840 | 256; 1841 | #[doc = " Meta Data Compression Profiles."] 1842 | pub type AACENC_METADATA_DRC_PROFILE = u32; 1843 | #[doc = " Meta Data setup structure."] 1844 | #[repr(C)] 1845 | #[derive(Debug, Copy, Clone)] 1846 | pub struct AACENC_MetaData { 1847 | #[doc = "< MPEG DRC compression profile. See"] 1848 | #[doc = "::AACENC_METADATA_DRC_PROFILE."] 1849 | pub drc_profile: AACENC_METADATA_DRC_PROFILE, 1850 | #[doc = "< ETSI heavy compression profile. See"] 1851 | #[doc = "::AACENC_METADATA_DRC_PROFILE."] 1852 | pub comp_profile: AACENC_METADATA_DRC_PROFILE, 1853 | #[doc = "< Used to define expected level to:"] 1854 | #[doc = "Scaled with 16 bit. x*2^16."] 1855 | pub drc_TargetRefLevel: INT, 1856 | #[doc = "< Adjust limiter to avoid overload."] 1857 | #[doc = "Scaled with 16 bit. x*2^16."] 1858 | pub comp_TargetRefLevel: INT, 1859 | #[doc = "< Flag, if prog_ref_level is present"] 1860 | pub prog_ref_level_present: INT, 1861 | #[doc = "< Programme Reference Level = Dialogue Level:"] 1862 | #[doc = "-31.75dB .. 0 dB ; stepsize: 0.25dB"] 1863 | #[doc = "Scaled with 16 bit. x*2^16."] 1864 | pub prog_ref_level: INT, 1865 | #[doc = "< Flag, if dmx-idx should be written in"] 1866 | #[doc = "programme config element"] 1867 | pub PCE_mixdown_idx_present: UCHAR, 1868 | #[doc = "< Flag, if dmx-lvl should be written in"] 1869 | #[doc = "ETSI-ancData"] 1870 | pub ETSI_DmxLvl_present: UCHAR, 1871 | #[doc = "< Center downmix level (0...7, according to table)"] 1872 | pub centerMixLevel: SCHAR, 1873 | #[doc = "< Surround downmix level (0...7, according to"] 1874 | #[doc = "table)"] 1875 | pub surroundMixLevel: SCHAR, 1876 | #[doc = "< Indication for Dolby Surround Encoding Mode."] 1877 | #[doc = "- 0: Dolby Surround mode not indicated"] 1878 | #[doc = "- 1: 2-ch audio part is not Dolby surround encoded"] 1879 | #[doc = "- 2: 2-ch audio part is Dolby surround encoded"] 1880 | pub dolbySurroundMode: UCHAR, 1881 | #[doc = "< Indicatin for DRC Presentation Mode."] 1882 | #[doc = "- 0: Presentation mode not inticated"] 1883 | #[doc = "- 1: Presentation mode 1"] 1884 | #[doc = "- 2: Presentation mode 2"] 1885 | pub drcPresentationMode: UCHAR, 1886 | pub ExtMetaData: AACENC_MetaData__bindgen_ty_1, 1887 | } 1888 | #[repr(C)] 1889 | #[derive(Debug, Copy, Clone)] 1890 | pub struct AACENC_MetaData__bindgen_ty_1 { 1891 | pub extAncDataEnable: UCHAR, 1892 | pub extDownmixLevelEnable: UCHAR, 1893 | pub extDownmixLevel_A: UCHAR, 1894 | pub extDownmixLevel_B: UCHAR, 1895 | pub dmxGainEnable: UCHAR, 1896 | pub dmxGain5: INT, 1897 | pub dmxGain2: INT, 1898 | pub lfeDmxEnable: UCHAR, 1899 | pub lfeDmxLevel: UCHAR, 1900 | } 1901 | #[test] 1902 | fn bindgen_test_layout_AACENC_MetaData__bindgen_ty_1() { 1903 | assert_eq!( 1904 | ::std::mem::size_of::(), 1905 | 20usize, 1906 | concat!("Size of: ", stringify!(AACENC_MetaData__bindgen_ty_1)) 1907 | ); 1908 | assert_eq!( 1909 | ::std::mem::align_of::(), 1910 | 4usize, 1911 | concat!("Alignment of ", stringify!(AACENC_MetaData__bindgen_ty_1)) 1912 | ); 1913 | assert_eq!( 1914 | unsafe { 1915 | &(*(::std::ptr::null::())).extAncDataEnable as *const _ 1916 | as usize 1917 | }, 1918 | 0usize, 1919 | concat!( 1920 | "Offset of field: ", 1921 | stringify!(AACENC_MetaData__bindgen_ty_1), 1922 | "::", 1923 | stringify!(extAncDataEnable) 1924 | ) 1925 | ); 1926 | assert_eq!( 1927 | unsafe { 1928 | &(*(::std::ptr::null::())).extDownmixLevelEnable 1929 | as *const _ as usize 1930 | }, 1931 | 1usize, 1932 | concat!( 1933 | "Offset of field: ", 1934 | stringify!(AACENC_MetaData__bindgen_ty_1), 1935 | "::", 1936 | stringify!(extDownmixLevelEnable) 1937 | ) 1938 | ); 1939 | assert_eq!( 1940 | unsafe { 1941 | &(*(::std::ptr::null::())).extDownmixLevel_A as *const _ 1942 | as usize 1943 | }, 1944 | 2usize, 1945 | concat!( 1946 | "Offset of field: ", 1947 | stringify!(AACENC_MetaData__bindgen_ty_1), 1948 | "::", 1949 | stringify!(extDownmixLevel_A) 1950 | ) 1951 | ); 1952 | assert_eq!( 1953 | unsafe { 1954 | &(*(::std::ptr::null::())).extDownmixLevel_B as *const _ 1955 | as usize 1956 | }, 1957 | 3usize, 1958 | concat!( 1959 | "Offset of field: ", 1960 | stringify!(AACENC_MetaData__bindgen_ty_1), 1961 | "::", 1962 | stringify!(extDownmixLevel_B) 1963 | ) 1964 | ); 1965 | assert_eq!( 1966 | unsafe { 1967 | &(*(::std::ptr::null::())).dmxGainEnable as *const _ 1968 | as usize 1969 | }, 1970 | 4usize, 1971 | concat!( 1972 | "Offset of field: ", 1973 | stringify!(AACENC_MetaData__bindgen_ty_1), 1974 | "::", 1975 | stringify!(dmxGainEnable) 1976 | ) 1977 | ); 1978 | assert_eq!( 1979 | unsafe { 1980 | &(*(::std::ptr::null::())).dmxGain5 as *const _ as usize 1981 | }, 1982 | 8usize, 1983 | concat!( 1984 | "Offset of field: ", 1985 | stringify!(AACENC_MetaData__bindgen_ty_1), 1986 | "::", 1987 | stringify!(dmxGain5) 1988 | ) 1989 | ); 1990 | assert_eq!( 1991 | unsafe { 1992 | &(*(::std::ptr::null::())).dmxGain2 as *const _ as usize 1993 | }, 1994 | 12usize, 1995 | concat!( 1996 | "Offset of field: ", 1997 | stringify!(AACENC_MetaData__bindgen_ty_1), 1998 | "::", 1999 | stringify!(dmxGain2) 2000 | ) 2001 | ); 2002 | assert_eq!( 2003 | unsafe { 2004 | &(*(::std::ptr::null::())).lfeDmxEnable as *const _ 2005 | as usize 2006 | }, 2007 | 16usize, 2008 | concat!( 2009 | "Offset of field: ", 2010 | stringify!(AACENC_MetaData__bindgen_ty_1), 2011 | "::", 2012 | stringify!(lfeDmxEnable) 2013 | ) 2014 | ); 2015 | assert_eq!( 2016 | unsafe { 2017 | &(*(::std::ptr::null::())).lfeDmxLevel as *const _ 2018 | as usize 2019 | }, 2020 | 17usize, 2021 | concat!( 2022 | "Offset of field: ", 2023 | stringify!(AACENC_MetaData__bindgen_ty_1), 2024 | "::", 2025 | stringify!(lfeDmxLevel) 2026 | ) 2027 | ); 2028 | } 2029 | #[test] 2030 | fn bindgen_test_layout_AACENC_MetaData() { 2031 | assert_eq!( 2032 | ::std::mem::size_of::(), 2033 | 52usize, 2034 | concat!("Size of: ", stringify!(AACENC_MetaData)) 2035 | ); 2036 | assert_eq!( 2037 | ::std::mem::align_of::(), 2038 | 4usize, 2039 | concat!("Alignment of ", stringify!(AACENC_MetaData)) 2040 | ); 2041 | assert_eq!( 2042 | unsafe { &(*(::std::ptr::null::())).drc_profile as *const _ as usize }, 2043 | 0usize, 2044 | concat!( 2045 | "Offset of field: ", 2046 | stringify!(AACENC_MetaData), 2047 | "::", 2048 | stringify!(drc_profile) 2049 | ) 2050 | ); 2051 | assert_eq!( 2052 | unsafe { &(*(::std::ptr::null::())).comp_profile as *const _ as usize }, 2053 | 4usize, 2054 | concat!( 2055 | "Offset of field: ", 2056 | stringify!(AACENC_MetaData), 2057 | "::", 2058 | stringify!(comp_profile) 2059 | ) 2060 | ); 2061 | assert_eq!( 2062 | unsafe { 2063 | &(*(::std::ptr::null::())).drc_TargetRefLevel as *const _ as usize 2064 | }, 2065 | 8usize, 2066 | concat!( 2067 | "Offset of field: ", 2068 | stringify!(AACENC_MetaData), 2069 | "::", 2070 | stringify!(drc_TargetRefLevel) 2071 | ) 2072 | ); 2073 | assert_eq!( 2074 | unsafe { 2075 | &(*(::std::ptr::null::())).comp_TargetRefLevel as *const _ as usize 2076 | }, 2077 | 12usize, 2078 | concat!( 2079 | "Offset of field: ", 2080 | stringify!(AACENC_MetaData), 2081 | "::", 2082 | stringify!(comp_TargetRefLevel) 2083 | ) 2084 | ); 2085 | assert_eq!( 2086 | unsafe { 2087 | &(*(::std::ptr::null::())).prog_ref_level_present as *const _ as usize 2088 | }, 2089 | 16usize, 2090 | concat!( 2091 | "Offset of field: ", 2092 | stringify!(AACENC_MetaData), 2093 | "::", 2094 | stringify!(prog_ref_level_present) 2095 | ) 2096 | ); 2097 | assert_eq!( 2098 | unsafe { &(*(::std::ptr::null::())).prog_ref_level as *const _ as usize }, 2099 | 20usize, 2100 | concat!( 2101 | "Offset of field: ", 2102 | stringify!(AACENC_MetaData), 2103 | "::", 2104 | stringify!(prog_ref_level) 2105 | ) 2106 | ); 2107 | assert_eq!( 2108 | unsafe { 2109 | &(*(::std::ptr::null::())).PCE_mixdown_idx_present as *const _ as usize 2110 | }, 2111 | 24usize, 2112 | concat!( 2113 | "Offset of field: ", 2114 | stringify!(AACENC_MetaData), 2115 | "::", 2116 | stringify!(PCE_mixdown_idx_present) 2117 | ) 2118 | ); 2119 | assert_eq!( 2120 | unsafe { 2121 | &(*(::std::ptr::null::())).ETSI_DmxLvl_present as *const _ as usize 2122 | }, 2123 | 25usize, 2124 | concat!( 2125 | "Offset of field: ", 2126 | stringify!(AACENC_MetaData), 2127 | "::", 2128 | stringify!(ETSI_DmxLvl_present) 2129 | ) 2130 | ); 2131 | assert_eq!( 2132 | unsafe { &(*(::std::ptr::null::())).centerMixLevel as *const _ as usize }, 2133 | 26usize, 2134 | concat!( 2135 | "Offset of field: ", 2136 | stringify!(AACENC_MetaData), 2137 | "::", 2138 | stringify!(centerMixLevel) 2139 | ) 2140 | ); 2141 | assert_eq!( 2142 | unsafe { 2143 | &(*(::std::ptr::null::())).surroundMixLevel as *const _ as usize 2144 | }, 2145 | 27usize, 2146 | concat!( 2147 | "Offset of field: ", 2148 | stringify!(AACENC_MetaData), 2149 | "::", 2150 | stringify!(surroundMixLevel) 2151 | ) 2152 | ); 2153 | assert_eq!( 2154 | unsafe { 2155 | &(*(::std::ptr::null::())).dolbySurroundMode as *const _ as usize 2156 | }, 2157 | 28usize, 2158 | concat!( 2159 | "Offset of field: ", 2160 | stringify!(AACENC_MetaData), 2161 | "::", 2162 | stringify!(dolbySurroundMode) 2163 | ) 2164 | ); 2165 | assert_eq!( 2166 | unsafe { 2167 | &(*(::std::ptr::null::())).drcPresentationMode as *const _ as usize 2168 | }, 2169 | 29usize, 2170 | concat!( 2171 | "Offset of field: ", 2172 | stringify!(AACENC_MetaData), 2173 | "::", 2174 | stringify!(drcPresentationMode) 2175 | ) 2176 | ); 2177 | assert_eq!( 2178 | unsafe { &(*(::std::ptr::null::())).ExtMetaData as *const _ as usize }, 2179 | 32usize, 2180 | concat!( 2181 | "Offset of field: ", 2182 | stringify!(AACENC_MetaData), 2183 | "::", 2184 | stringify!(ExtMetaData) 2185 | ) 2186 | ); 2187 | } 2188 | #[doc = "< Do not trigger initialization."] 2189 | pub const AACENC_CTRLFLAGS_AACENC_INIT_NONE: AACENC_CTRLFLAGS = 0; 2190 | pub const AACENC_CTRLFLAGS_AACENC_INIT_CONFIG: AACENC_CTRLFLAGS = 1; 2191 | #[doc = "< Reset all encoder modules history buffer."] 2192 | pub const AACENC_CTRLFLAGS_AACENC_INIT_STATES: AACENC_CTRLFLAGS = 2; 2193 | pub const AACENC_CTRLFLAGS_AACENC_INIT_TRANSPORT: AACENC_CTRLFLAGS = 4096; 2194 | pub const AACENC_CTRLFLAGS_AACENC_RESET_INBUFFER: AACENC_CTRLFLAGS = 8192; 2195 | #[doc = "< Initialize all."] 2196 | pub const AACENC_CTRLFLAGS_AACENC_INIT_ALL: AACENC_CTRLFLAGS = 65535; 2197 | #[doc = " AAC encoder control flags."] 2198 | #[doc = ""] 2199 | #[doc = " In interaction with the ::AACENC_CONTROL_STATE parameter it is possible to"] 2200 | #[doc = " get information about the internal initialization process. It is also"] 2201 | #[doc = " possible to overwrite the internal state from extern when necessary."] 2202 | pub type AACENC_CTRLFLAGS = u32; 2203 | pub const AACENC_PARAM_AACENC_AOT: AACENC_PARAM = 256; 2204 | #[doc = "< Total encoder bitrate. This parameter is"] 2205 | #[doc = "mandatory and interacts with ::AACENC_BITRATEMODE."] 2206 | #[doc = "- CBR: Bitrate in bits/second."] 2207 | #[doc = "- VBR: Variable bitrate. Bitrate argument will"] 2208 | #[doc = "be ignored. See \\ref suppBitrates for details."] 2209 | pub const AACENC_PARAM_AACENC_BITRATE: AACENC_PARAM = 257; 2210 | #[doc = "< Bitrate mode. Configuration can be different"] 2211 | #[doc = "kind of bitrate configurations:"] 2212 | #[doc = "- 0: Constant bitrate, use bitrate according"] 2213 | #[doc = "to ::AACENC_BITRATE. (default) Within none"] 2214 | #[doc = "LD/ELD ::AUDIO_OBJECT_TYPE, the CBR mode makes"] 2215 | #[doc = "use of full allowed bitreservoir. In contrast,"] 2216 | #[doc = "at Low-Delay ::AUDIO_OBJECT_TYPE the"] 2217 | #[doc = "bitreservoir is kept very small."] 2218 | #[doc = "- 1: Variable bitrate mode, \\ref vbrmode"] 2219 | #[doc = "\"very low bitrate\"."] 2220 | #[doc = "- 2: Variable bitrate mode, \\ref vbrmode"] 2221 | #[doc = "\"low bitrate\"."] 2222 | #[doc = "- 3: Variable bitrate mode, \\ref vbrmode"] 2223 | #[doc = "\"medium bitrate\"."] 2224 | #[doc = "- 4: Variable bitrate mode, \\ref vbrmode"] 2225 | #[doc = "\"high bitrate\"."] 2226 | #[doc = "- 5: Variable bitrate mode, \\ref vbrmode"] 2227 | #[doc = "\"very high bitrate\"."] 2228 | pub const AACENC_PARAM_AACENC_BITRATEMODE: AACENC_PARAM = 258; 2229 | #[doc = "< Audio input data sampling rate. Encoder"] 2230 | #[doc = "supports following sampling rates: 8000, 11025,"] 2231 | #[doc = "12000, 16000, 22050, 24000, 32000, 44100,"] 2232 | #[doc = "48000, 64000, 88200, 96000"] 2233 | pub const AACENC_PARAM_AACENC_SAMPLERATE: AACENC_PARAM = 259; 2234 | #[doc = "< Configure SBR independently of the chosen Audio"] 2235 | #[doc = "Object Type ::AUDIO_OBJECT_TYPE. This parameter"] 2236 | #[doc = "is for ELD audio object type only."] 2237 | #[doc = "- -1: Use ELD SBR auto configurator (default)."] 2238 | #[doc = "- 0: Disable Spectral Band Replication."] 2239 | #[doc = "- 1: Enable Spectral Band Replication."] 2240 | pub const AACENC_PARAM_AACENC_SBR_MODE: AACENC_PARAM = 260; 2241 | pub const AACENC_PARAM_AACENC_GRANULE_LENGTH: AACENC_PARAM = 261; 2242 | #[doc = "< Set explicit channel mode. Channel mode must"] 2243 | #[doc = "match with number of input channels."] 2244 | #[doc = "- 1-7, 11,12,14 and 33,34: MPEG channel"] 2245 | #[doc = "modes supported, see ::CHANNEL_MODE in"] 2246 | #[doc = "FDK_audio.h."] 2247 | pub const AACENC_PARAM_AACENC_CHANNELMODE: AACENC_PARAM = 262; 2248 | pub const AACENC_PARAM_AACENC_CHANNELORDER: AACENC_PARAM = 263; 2249 | pub const AACENC_PARAM_AACENC_SBR_RATIO: AACENC_PARAM = 264; 2250 | pub const AACENC_PARAM_AACENC_AFTERBURNER: AACENC_PARAM = 512; 2251 | #[doc = "< Core encoder audio bandwidth:"] 2252 | #[doc = "- 0: Determine audio bandwidth internally"] 2253 | #[doc = "(default, see chapter \\ref BEHAVIOUR_BANDWIDTH)."] 2254 | #[doc = "- 1 to fs/2: Audio bandwidth in Hertz. Limited"] 2255 | #[doc = "to 20kHz max. Not usable if SBR is active. This"] 2256 | #[doc = "setting is for experts only, better do not touch"] 2257 | #[doc = "this value to avoid degraded audio quality."] 2258 | pub const AACENC_PARAM_AACENC_BANDWIDTH: AACENC_PARAM = 515; 2259 | pub const AACENC_PARAM_AACENC_PEAK_BITRATE: AACENC_PARAM = 519; 2260 | #[doc = "< Transport type to be used. See ::TRANSPORT_TYPE"] 2261 | #[doc = "in FDK_audio.h. Following types can be configured"] 2262 | #[doc = "in encoder library:"] 2263 | #[doc = "- 0: raw access units"] 2264 | #[doc = "- 1: ADIF bitstream format"] 2265 | #[doc = "- 2: ADTS bitstream format"] 2266 | #[doc = "- 6: Audio Mux Elements (LATM) with"] 2267 | #[doc = "muxConfigPresent = 1"] 2268 | #[doc = "- 7: Audio Mux Elements (LATM) with"] 2269 | #[doc = "muxConfigPresent = 0, out of band StreamMuxConfig"] 2270 | #[doc = "- 10: Audio Sync Stream (LOAS)"] 2271 | pub const AACENC_PARAM_AACENC_TRANSMUX: AACENC_PARAM = 768; 2272 | pub const AACENC_PARAM_AACENC_HEADER_PERIOD: AACENC_PARAM = 769; 2273 | pub const AACENC_PARAM_AACENC_SIGNALING_MODE: AACENC_PARAM = 770; 2274 | pub const AACENC_PARAM_AACENC_TPSUBFRAMES: AACENC_PARAM = 771; 2275 | pub const AACENC_PARAM_AACENC_AUDIOMUXVER: AACENC_PARAM = 772; 2276 | #[doc = "< Configure protection in transport layer:"] 2277 | #[doc = "- 0: No protection. (default)"] 2278 | #[doc = "- 1: CRC active for ADTS transport format."] 2279 | pub const AACENC_PARAM_AACENC_PROTECTION: AACENC_PARAM = 774; 2280 | pub const AACENC_PARAM_AACENC_ANCILLARY_BITRATE: AACENC_PARAM = 1280; 2281 | #[doc = "< Configure Meta Data. See ::AACENC_MetaData"] 2282 | #[doc = "for further details:"] 2283 | #[doc = "- 0: Do not embed any metadata."] 2284 | #[doc = "- 1: Embed dynamic_range_info metadata."] 2285 | #[doc = "- 2: Embed dynamic_range_info and"] 2286 | #[doc = "ancillary_data metadata."] 2287 | #[doc = "- 3: Embed ancillary_data metadata."] 2288 | pub const AACENC_PARAM_AACENC_METADATA_MODE: AACENC_PARAM = 1536; 2289 | pub const AACENC_PARAM_AACENC_CONTROL_STATE: AACENC_PARAM = 65280; 2290 | #[doc = "< ------"] 2291 | pub const AACENC_PARAM_AACENC_NONE: AACENC_PARAM = 65535; 2292 | #[doc = " \\brief AAC encoder setting parameters."] 2293 | #[doc = ""] 2294 | #[doc = " Use aacEncoder_SetParam() function to configure, or use aacEncoder_GetParam()"] 2295 | #[doc = " function to read the internal status of the following parameters."] 2296 | pub type AACENC_PARAM = u32; 2297 | extern "C" { 2298 | #[doc = " \\brief Open an instance of the encoder."] 2299 | #[doc = ""] 2300 | #[doc = " Allocate memory for an encoder instance with a functional range denoted by"] 2301 | #[doc = " the function parameters. Preinitialize encoder instance with default"] 2302 | #[doc = " configuration."] 2303 | #[doc = ""] 2304 | #[doc = " \\param phAacEncoder A pointer to an encoder handle. Initialized on return."] 2305 | #[doc = " \\param encModules Specify encoder modules to be supported in this encoder"] 2306 | #[doc = " instance:"] 2307 | #[doc = " - 0x0: Allocate memory for all available encoder"] 2308 | #[doc = " modules."] 2309 | #[doc = " - else: Select memory allocation regarding encoder"] 2310 | #[doc = " modules. Following flags are possible and can be combined."] 2311 | #[doc = " - 0x01: AAC module."] 2312 | #[doc = " - 0x02: SBR module."] 2313 | #[doc = " - 0x04: PS module."] 2314 | #[doc = " - 0x08: MPS module."] 2315 | #[doc = " - 0x10: Metadata module."] 2316 | #[doc = " - example: (0x01|0x02|0x04|0x08|0x10) allocates"] 2317 | #[doc = " all modules and is equivalent to default configuration denotet by 0x0."] 2318 | #[doc = " \\param maxChannels Number of channels to be allocated. This parameter can"] 2319 | #[doc = " be used in different ways:"] 2320 | #[doc = " - 0: Allocate maximum number of AAC and SBR channels as"] 2321 | #[doc = " supported by the library."] 2322 | #[doc = " - nChannels: Use same maximum number of channels for"] 2323 | #[doc = " allocating memory in AAC and SBR module."] 2324 | #[doc = " - nChannels | (nSbrCh<<8): Number of SBR channels can be"] 2325 | #[doc = " different to AAC channels to save data memory."] 2326 | #[doc = ""] 2327 | #[doc = " \\return"] 2328 | #[doc = " - AACENC_OK, on succes."] 2329 | #[doc = " - AACENC_INVALID_HANDLE, AACENC_MEMORY_ERROR, AACENC_INVALID_CONFIG,"] 2330 | #[doc = " on failure."] 2331 | pub fn aacEncOpen( 2332 | phAacEncoder: *mut HANDLE_AACENCODER, 2333 | encModules: UINT, 2334 | maxChannels: UINT, 2335 | ) -> AACENC_ERROR; 2336 | } 2337 | extern "C" { 2338 | #[doc = " \\brief Close the encoder instance."] 2339 | #[doc = ""] 2340 | #[doc = " Deallocate encoder instance and free whole memory."] 2341 | #[doc = ""] 2342 | #[doc = " \\param phAacEncoder Pointer to the encoder handle to be deallocated."] 2343 | #[doc = ""] 2344 | #[doc = " \\return"] 2345 | #[doc = " - AACENC_OK, on success."] 2346 | #[doc = " - AACENC_INVALID_HANDLE, on failure."] 2347 | pub fn aacEncClose(phAacEncoder: *mut HANDLE_AACENCODER) -> AACENC_ERROR; 2348 | } 2349 | extern "C" { 2350 | #[doc = " \\brief Encode audio data."] 2351 | #[doc = ""] 2352 | #[doc = " This function is mainly for encoding audio data. In addition the function can"] 2353 | #[doc = " be used for an encoder (re)configuration process."] 2354 | #[doc = " - PCM input data will be retrieved from external input buffer until the fill"] 2355 | #[doc = " level allows encoding a single frame. This functionality allows an external"] 2356 | #[doc = " buffer with reduced size in comparison to the AAC or HE-AAC audio frame"] 2357 | #[doc = " length."] 2358 | #[doc = " - If the value of the input samples argument is zero, just internal"] 2359 | #[doc = " reinitialization will be applied if it is requested."] 2360 | #[doc = " - At the end of a file the flushing process can be triggerd via setting the"] 2361 | #[doc = " value of the input samples argument to -1. The encoder delay lines are fully"] 2362 | #[doc = " flushed when the encoder returns no valid bitstream data"] 2363 | #[doc = " AACENC_OutArgs::numOutBytes. Furthermore the end of file is signaled by the"] 2364 | #[doc = " return value AACENC_ENCODE_EOF."] 2365 | #[doc = " - If an error occured in the previous frame or any of the encoder parameters"] 2366 | #[doc = " changed, an internal reinitialization process will be applied before encoding"] 2367 | #[doc = " the incoming audio samples."] 2368 | #[doc = " - The function can also be used for an independent reconfiguration process"] 2369 | #[doc = " without encoding. The first parameter has to be a valid encoder handle and"] 2370 | #[doc = " all other parameters can be set to NULL."] 2371 | #[doc = " - If the size of the external bitbuffer in outBufDesc is not sufficient for"] 2372 | #[doc = " writing the whole bitstream, an internal error will be the return value and a"] 2373 | #[doc = " reconfiguration will be triggered."] 2374 | #[doc = ""] 2375 | #[doc = " \\param hAacEncoder A valid AAC encoder handle."] 2376 | #[doc = " \\param inBufDesc Input buffer descriptor, see AACENC_BufDesc:"] 2377 | #[doc = " - At least one input buffer with audio data is"] 2378 | #[doc = " expected."] 2379 | #[doc = " - Optionally a second input buffer with"] 2380 | #[doc = " ancillary data can be fed."] 2381 | #[doc = " \\param outBufDesc Output buffer descriptor, see AACENC_BufDesc:"] 2382 | #[doc = " - Provide one output buffer for the encoded"] 2383 | #[doc = " bitstream."] 2384 | #[doc = " \\param inargs Input arguments, see AACENC_InArgs."] 2385 | #[doc = " \\param outargs Output arguments, AACENC_OutArgs."] 2386 | #[doc = ""] 2387 | #[doc = " \\return"] 2388 | #[doc = " - AACENC_OK, on success."] 2389 | #[doc = " - AACENC_INVALID_HANDLE, AACENC_ENCODE_ERROR, on failure in encoding"] 2390 | #[doc = " process."] 2391 | #[doc = " - AACENC_INVALID_CONFIG, AACENC_INIT_ERROR, AACENC_INIT_AAC_ERROR,"] 2392 | #[doc = " AACENC_INIT_SBR_ERROR, AACENC_INIT_TP_ERROR, AACENC_INIT_META_ERROR,"] 2393 | #[doc = " AACENC_INIT_MPS_ERROR, on failure in encoder initialization."] 2394 | #[doc = " - AACENC_UNSUPPORTED_PARAMETER, on incorrect input or output buffer"] 2395 | #[doc = " descriptor initialization."] 2396 | #[doc = " - AACENC_ENCODE_EOF, when flushing fully concluded."] 2397 | pub fn aacEncEncode( 2398 | hAacEncoder: HANDLE_AACENCODER, 2399 | inBufDesc: *const AACENC_BufDesc, 2400 | outBufDesc: *const AACENC_BufDesc, 2401 | inargs: *const AACENC_InArgs, 2402 | outargs: *mut AACENC_OutArgs, 2403 | ) -> AACENC_ERROR; 2404 | } 2405 | extern "C" { 2406 | #[doc = " \\brief Acquire info about present encoder instance."] 2407 | #[doc = ""] 2408 | #[doc = " This function retrieves information of the encoder configuration. In addition"] 2409 | #[doc = " to informative internal states, a configuration data block of the current"] 2410 | #[doc = " encoder settings will be returned. The format is either Audio Specific Config"] 2411 | #[doc = " in case of Raw Packets transport format or StreamMuxConfig in case of"] 2412 | #[doc = " LOAS/LATM transport format. The configuration data block is binary coded as"] 2413 | #[doc = " specified in ISO/IEC 14496-3 (MPEG-4 audio), to be used directly for MPEG-4"] 2414 | #[doc = " File Format or RFC3016 or RFC3640 applications."] 2415 | #[doc = ""] 2416 | #[doc = " \\param hAacEncoder A valid AAC encoder handle."] 2417 | #[doc = " \\param pInfo Pointer to AACENC_InfoStruct. Filled on return."] 2418 | #[doc = ""] 2419 | #[doc = " \\return"] 2420 | #[doc = " - AACENC_OK, on succes."] 2421 | #[doc = " - AACENC_INIT_ERROR, on failure."] 2422 | pub fn aacEncInfo( 2423 | hAacEncoder: HANDLE_AACENCODER, 2424 | pInfo: *mut AACENC_InfoStruct, 2425 | ) -> AACENC_ERROR; 2426 | } 2427 | extern "C" { 2428 | #[doc = " \\brief Set one single AAC encoder parameter."] 2429 | #[doc = ""] 2430 | #[doc = " This function allows configuration of all encoder parameters specified in"] 2431 | #[doc = " ::AACENC_PARAM. Each parameter must be set with a separate function call. An"] 2432 | #[doc = " internal validation of the configuration value range will be done and an"] 2433 | #[doc = " internal reconfiguration will be signaled. The actual configuration adoption"] 2434 | #[doc = " is part of the subsequent aacEncEncode() call."] 2435 | #[doc = ""] 2436 | #[doc = " \\param hAacEncoder A valid AAC encoder handle."] 2437 | #[doc = " \\param param Parameter to be set. See ::AACENC_PARAM."] 2438 | #[doc = " \\param value Parameter value. See parameter description in"] 2439 | #[doc = " ::AACENC_PARAM."] 2440 | #[doc = ""] 2441 | #[doc = " \\return"] 2442 | #[doc = " - AACENC_OK, on success."] 2443 | #[doc = " - AACENC_INVALID_HANDLE, AACENC_UNSUPPORTED_PARAMETER,"] 2444 | #[doc = " AACENC_INVALID_CONFIG, on failure."] 2445 | pub fn aacEncoder_SetParam( 2446 | hAacEncoder: HANDLE_AACENCODER, 2447 | param: AACENC_PARAM, 2448 | value: UINT, 2449 | ) -> AACENC_ERROR; 2450 | } 2451 | extern "C" { 2452 | #[doc = " \\brief Get one single AAC encoder parameter."] 2453 | #[doc = ""] 2454 | #[doc = " This function is the complement to aacEncoder_SetParam(). After encoder"] 2455 | #[doc = " reinitialization with user defined settings, the internal status can be"] 2456 | #[doc = " obtained of each parameter, specified with ::AACENC_PARAM."] 2457 | #[doc = ""] 2458 | #[doc = " \\param hAacEncoder A valid AAC encoder handle."] 2459 | #[doc = " \\param param Parameter to be returned. See ::AACENC_PARAM."] 2460 | #[doc = ""] 2461 | #[doc = " \\return Internal configuration value of specifed parameter ::AACENC_PARAM."] 2462 | pub fn aacEncoder_GetParam(hAacEncoder: HANDLE_AACENCODER, param: AACENC_PARAM) -> UINT; 2463 | } 2464 | extern "C" { 2465 | #[doc = " \\brief Get information about encoder library build."] 2466 | #[doc = ""] 2467 | #[doc = " Fill a given LIB_INFO structure with library version information."] 2468 | #[doc = ""] 2469 | #[doc = " \\param info Pointer to an allocated LIB_INFO struct."] 2470 | #[doc = ""] 2471 | #[doc = " \\return"] 2472 | #[doc = " - AACENC_OK, on success."] 2473 | #[doc = " - AACENC_INVALID_HANDLE, AACENC_INIT_ERROR, on failure."] 2474 | pub fn aacEncGetLibInfo(info: *mut LIB_INFO) -> AACENC_ERROR; 2475 | } 2476 | pub const AAC_DECODER_ERROR_AAC_DEC_OK: AAC_DECODER_ERROR = 0; 2477 | pub const AAC_DECODER_ERROR_AAC_DEC_OUT_OF_MEMORY: AAC_DECODER_ERROR = 2; 2478 | pub const AAC_DECODER_ERROR_AAC_DEC_UNKNOWN: AAC_DECODER_ERROR = 5; 2479 | pub const AAC_DECODER_ERROR_aac_dec_sync_error_start: AAC_DECODER_ERROR = 4096; 2480 | #[doc = "< The transport decoder had"] 2481 | #[doc = "synchronization problems. Do not"] 2482 | #[doc = "exit decoding. Just feed new"] 2483 | #[doc = "bitstream data."] 2484 | pub const AAC_DECODER_ERROR_AAC_DEC_TRANSPORT_SYNC_ERROR: AAC_DECODER_ERROR = 4097; 2485 | #[doc = "< The input buffer ran out of bits."] 2486 | pub const AAC_DECODER_ERROR_AAC_DEC_NOT_ENOUGH_BITS: AAC_DECODER_ERROR = 4098; 2487 | pub const AAC_DECODER_ERROR_aac_dec_sync_error_end: AAC_DECODER_ERROR = 8191; 2488 | pub const AAC_DECODER_ERROR_aac_dec_init_error_start: AAC_DECODER_ERROR = 8192; 2489 | pub const AAC_DECODER_ERROR_AAC_DEC_INVALID_HANDLE: AAC_DECODER_ERROR = 8193; 2490 | pub const AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_AOT: AAC_DECODER_ERROR = 8194; 2491 | pub const AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_FORMAT: AAC_DECODER_ERROR = 8195; 2492 | pub const AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_ER_FORMAT: AAC_DECODER_ERROR = 8196; 2493 | pub const AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_EPCONFIG: AAC_DECODER_ERROR = 8197; 2494 | pub const AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_MULTILAYER: AAC_DECODER_ERROR = 8198; 2495 | pub const AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_CHANNELCONFIG: AAC_DECODER_ERROR = 8199; 2496 | #[doc = "< The sample rate specified in"] 2497 | #[doc = "the configuration is not"] 2498 | #[doc = "supported."] 2499 | pub const AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_SAMPLINGRATE: AAC_DECODER_ERROR = 8200; 2500 | pub const AAC_DECODER_ERROR_AAC_DEC_INVALID_SBR_CONFIG: AAC_DECODER_ERROR = 8201; 2501 | #[doc = "< The parameter could not be set. Either"] 2502 | #[doc = "the value was out of range or the"] 2503 | #[doc = "parameter does not exist."] 2504 | pub const AAC_DECODER_ERROR_AAC_DEC_SET_PARAM_FAIL: AAC_DECODER_ERROR = 8202; 2505 | #[doc = "< The decoder needs to be restarted,"] 2506 | #[doc = "since the required configuration change"] 2507 | #[doc = "cannot be performed."] 2508 | pub const AAC_DECODER_ERROR_AAC_DEC_NEED_TO_RESTART: AAC_DECODER_ERROR = 8203; 2509 | pub const AAC_DECODER_ERROR_AAC_DEC_OUTPUT_BUFFER_TOO_SMALL: AAC_DECODER_ERROR = 8204; 2510 | pub const AAC_DECODER_ERROR_aac_dec_init_error_end: AAC_DECODER_ERROR = 12287; 2511 | pub const AAC_DECODER_ERROR_aac_dec_decode_error_start: AAC_DECODER_ERROR = 16384; 2512 | pub const AAC_DECODER_ERROR_AAC_DEC_TRANSPORT_ERROR: AAC_DECODER_ERROR = 16385; 2513 | #[doc = "< Error while parsing the bitstream. Most"] 2514 | #[doc = "probably it is corrupted, or the system"] 2515 | #[doc = "crashed."] 2516 | pub const AAC_DECODER_ERROR_AAC_DEC_PARSE_ERROR: AAC_DECODER_ERROR = 16386; 2517 | pub const AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_EXTENSION_PAYLOAD: AAC_DECODER_ERROR = 16387; 2518 | #[doc = "< The parsed bitstream value is out of"] 2519 | #[doc = "range. Most probably the bitstream is"] 2520 | #[doc = "corrupt, or the system crashed."] 2521 | pub const AAC_DECODER_ERROR_AAC_DEC_DECODE_FRAME_ERROR: AAC_DECODER_ERROR = 16388; 2522 | #[doc = "< The embedded CRC did not match."] 2523 | pub const AAC_DECODER_ERROR_AAC_DEC_CRC_ERROR: AAC_DECODER_ERROR = 16389; 2524 | #[doc = "< An invalid codebook was signaled."] 2525 | #[doc = "Most probably the bitstream is corrupt,"] 2526 | #[doc = "or the system crashed."] 2527 | pub const AAC_DECODER_ERROR_AAC_DEC_INVALID_CODE_BOOK: AAC_DECODER_ERROR = 16390; 2528 | pub const AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_PREDICTION: AAC_DECODER_ERROR = 16391; 2529 | #[doc = "< A CCE element was found which is not"] 2530 | #[doc = "supported. Most probably the bitstream is"] 2531 | #[doc = "corrupt, or has a wrong format."] 2532 | pub const AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_CCE: AAC_DECODER_ERROR = 16392; 2533 | #[doc = "< A LFE element was found which is not"] 2534 | #[doc = "supported. Most probably the bitstream is"] 2535 | #[doc = "corrupt, or has a wrong format."] 2536 | pub const AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_LFE: AAC_DECODER_ERROR = 16393; 2537 | pub const AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_GAIN_CONTROL_DATA: AAC_DECODER_ERROR = 16394; 2538 | pub const AAC_DECODER_ERROR_AAC_DEC_UNSUPPORTED_SBA: AAC_DECODER_ERROR = 16395; 2539 | #[doc = "< Error while reading TNS data. Most"] 2540 | #[doc = "probably the bitstream is corrupt or the"] 2541 | #[doc = "system crashed."] 2542 | pub const AAC_DECODER_ERROR_AAC_DEC_TNS_READ_ERROR: AAC_DECODER_ERROR = 16396; 2543 | pub const AAC_DECODER_ERROR_AAC_DEC_RVLC_ERROR: AAC_DECODER_ERROR = 16397; 2544 | pub const AAC_DECODER_ERROR_aac_dec_decode_error_end: AAC_DECODER_ERROR = 20479; 2545 | pub const AAC_DECODER_ERROR_aac_dec_anc_data_error_start: AAC_DECODER_ERROR = 32768; 2546 | pub const AAC_DECODER_ERROR_AAC_DEC_ANC_DATA_ERROR: AAC_DECODER_ERROR = 32769; 2547 | #[doc = "< The registered ancillary data"] 2548 | #[doc = "buffer is too small to receive the"] 2549 | #[doc = "parsed data."] 2550 | pub const AAC_DECODER_ERROR_AAC_DEC_TOO_SMALL_ANC_BUFFER: AAC_DECODER_ERROR = 32770; 2551 | #[doc = "< More than the allowed number of"] 2552 | #[doc = "ancillary data elements should be"] 2553 | #[doc = "written to buffer."] 2554 | pub const AAC_DECODER_ERROR_AAC_DEC_TOO_MANY_ANC_ELEMENTS: AAC_DECODER_ERROR = 32771; 2555 | pub const AAC_DECODER_ERROR_aac_dec_anc_data_error_end: AAC_DECODER_ERROR = 36863; 2556 | #[doc = " \\brief AAC decoder error codes."] 2557 | pub type AAC_DECODER_ERROR = u32; 2558 | pub const AAC_MD_PROFILE_AAC_MD_PROFILE_MPEG_STANDARD: AAC_MD_PROFILE = 0; 2559 | pub const AAC_MD_PROFILE_AAC_MD_PROFILE_MPEG_LEGACY: AAC_MD_PROFILE = 1; 2560 | pub const AAC_MD_PROFILE_AAC_MD_PROFILE_MPEG_LEGACY_PRIO: AAC_MD_PROFILE = 2; 2561 | pub const AAC_MD_PROFILE_AAC_MD_PROFILE_ARIB_JAPAN: AAC_MD_PROFILE = 3; 2562 | #[doc = " \\enum AAC_MD_PROFILE"] 2563 | #[doc = " \\brief The available metadata profiles which are mostly related to downmixing. The values define the arguments"] 2564 | #[doc = " for the use with parameter ::AAC_METADATA_PROFILE."] 2565 | pub type AAC_MD_PROFILE = u32; 2566 | #[doc = "< DRC parameter handling"] 2567 | #[doc = "disabled, all parameters are"] 2568 | #[doc = "applied as requested."] 2569 | pub const AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS_AAC_DRC_PARAMETER_HANDLING_DISABLED: 2570 | AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS = -1; 2571 | pub const AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS_AAC_DRC_PARAMETER_HANDLING_ENABLED: 2572 | AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS = 0; 2573 | pub const AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS_AAC_DRC_PRESENTATION_MODE_1_DEFAULT: 2574 | AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS = 1; 2575 | pub const AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS_AAC_DRC_PRESENTATION_MODE_2_DEFAULT: 2576 | AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS = 2; 2577 | #[doc = " \\enum AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS"] 2578 | #[doc = " \\brief Options for handling of DRC parameters, if presentation mode is not indicated in bitstream"] 2579 | pub type AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS = i32; 2580 | pub const AACDEC_PARAM_AAC_PCM_DUAL_CHANNEL_OUTPUT_MODE: AACDEC_PARAM = 2; 2581 | pub const AACDEC_PARAM_AAC_PCM_OUTPUT_CHANNEL_MAPPING: AACDEC_PARAM = 3; 2582 | pub const AACDEC_PARAM_AAC_PCM_LIMITER_ENABLE: AACDEC_PARAM = 4; 2583 | #[doc = "< Signal level limiting attack time"] 2584 | #[doc = "in ms. Default configuration is 15"] 2585 | #[doc = "ms. Adjustable range from 1 ms to 15"] 2586 | #[doc = "ms."] 2587 | pub const AACDEC_PARAM_AAC_PCM_LIMITER_ATTACK_TIME: AACDEC_PARAM = 5; 2588 | #[doc = "< Signal level limiting release time"] 2589 | #[doc = "in ms. Default configuration is 50"] 2590 | #[doc = "ms. Adjustable time must be larger"] 2591 | #[doc = "than 0 ms."] 2592 | pub const AACDEC_PARAM_AAC_PCM_LIMITER_RELEAS_TIME: AACDEC_PARAM = 6; 2593 | pub const AACDEC_PARAM_AAC_PCM_MIN_OUTPUT_CHANNELS: AACDEC_PARAM = 17; 2594 | pub const AACDEC_PARAM_AAC_PCM_MAX_OUTPUT_CHANNELS: AACDEC_PARAM = 18; 2595 | pub const AACDEC_PARAM_AAC_METADATA_PROFILE: AACDEC_PARAM = 32; 2596 | #[doc = "< Defines the time in ms after which all"] 2597 | #[doc = "the bitstream associated meta-data (DRC,"] 2598 | #[doc = "downmix coefficients, ...) will be reset"] 2599 | #[doc = "to default if no update has been"] 2600 | #[doc = "received. Negative values disable the"] 2601 | #[doc = "feature."] 2602 | pub const AACDEC_PARAM_AAC_METADATA_EXPIRY_TIME: AACDEC_PARAM = 33; 2603 | #[doc = "< Error concealment: Processing method. \\n"] 2604 | #[doc = "0: Spectral muting. \\n"] 2605 | #[doc = "1: Noise substitution (see ::CONCEAL_NOISE)."] 2606 | #[doc = "\\n 2: Energy interpolation (adds additional"] 2607 | #[doc = "signal delay of one frame, see"] 2608 | #[doc = "::CONCEAL_INTER. only some AOTs are"] 2609 | #[doc = "supported). \\n"] 2610 | pub const AACDEC_PARAM_AAC_CONCEAL_METHOD: AACDEC_PARAM = 256; 2611 | pub const AACDEC_PARAM_AAC_DRC_BOOST_FACTOR: AACDEC_PARAM = 512; 2612 | #[doc = "< MPEG-4 / MPEG-D DRC: Scaling factor"] 2613 | #[doc = "for attenuating gain values. Same as"] 2614 | #[doc = "::AAC_DRC_BOOST_FACTOR but for"] 2615 | #[doc = "attenuating DRC factors."] 2616 | pub const AACDEC_PARAM_AAC_DRC_ATTENUATION_FACTOR: AACDEC_PARAM = 513; 2617 | pub const AACDEC_PARAM_AAC_DRC_REFERENCE_LEVEL: AACDEC_PARAM = 514; 2618 | pub const AACDEC_PARAM_AAC_DRC_HEAVY_COMPRESSION: AACDEC_PARAM = 515; 2619 | pub const AACDEC_PARAM_AAC_DRC_DEFAULT_PRESENTATION_MODE: AACDEC_PARAM = 516; 2620 | pub const AACDEC_PARAM_AAC_DRC_ENC_TARGET_LEVEL: AACDEC_PARAM = 517; 2621 | #[doc = "< MPEG-D DRC: Request a DRC effect type for"] 2622 | #[doc = "selection of a DRC set.\\n Supported indices"] 2623 | #[doc = "are:\\n -1: DRC off. Completely disables"] 2624 | #[doc = "MPEG-D DRC.\\n 0: None (default). Disables"] 2625 | #[doc = "MPEG-D DRC, but automatically enables DRC"] 2626 | #[doc = "if necessary to prevent clipping.\\n 1: Late"] 2627 | #[doc = "night\\n 2: Noisy environment\\n 3: Limited"] 2628 | #[doc = "playback range\\n 4: Low playback level\\n 5:"] 2629 | #[doc = "Dialog enhancement\\n 6: General"] 2630 | #[doc = "compression. Used for generally enabling"] 2631 | #[doc = "MPEG-D DRC without particular request.\\n"] 2632 | pub const AACDEC_PARAM_AAC_UNIDRC_SET_EFFECT: AACDEC_PARAM = 518; 2633 | pub const AACDEC_PARAM_AAC_UNIDRC_ALBUM_MODE: AACDEC_PARAM = 519; 2634 | #[doc = "< Quadrature Mirror Filter (QMF) Bank processing"] 2635 | #[doc = "mode. \\n -1: Use internal default. Implies MPEG"] 2636 | #[doc = "Surround partially complex accordingly. \\n 0:"] 2637 | #[doc = "Use complex QMF data mode. \\n 1: Use real (low"] 2638 | #[doc = "power) QMF data mode. \\n"] 2639 | pub const AACDEC_PARAM_AAC_QMF_LOWPOWER: AACDEC_PARAM = 768; 2640 | pub const AACDEC_PARAM_AAC_TPDEC_CLEAR_BUFFER: AACDEC_PARAM = 1539; 2641 | #[doc = " \\brief AAC decoder setting parameters"] 2642 | pub type AACDEC_PARAM = u32; 2643 | #[doc = " \\brief This structure gives information about the currently decoded audio"] 2644 | #[doc = " data. All fields are read-only."] 2645 | #[repr(C)] 2646 | #[derive(Debug, Copy, Clone)] 2647 | pub struct CStreamInfo { 2648 | #[doc = "< The sample rate in Hz of the decoded PCM audio signal."] 2649 | pub sampleRate: INT, 2650 | #[doc = "< The frame size of the decoded PCM audio signal. \\n"] 2651 | #[doc = "Typically this is: \\n"] 2652 | #[doc = "1024 or 960 for AAC-LC \\n"] 2653 | #[doc = "2048 or 1920 for HE-AAC (v2) \\n"] 2654 | #[doc = "512 or 480 for AAC-LD and AAC-ELD \\n"] 2655 | #[doc = "768, 1024, 2048 or 4096 for USAC"] 2656 | pub frameSize: INT, 2657 | #[doc = "< The number of output audio channels before the rendering"] 2658 | #[doc = "module, i.e. the original channel configuration."] 2659 | pub numChannels: INT, 2660 | #[doc = "< Audio channel type of each output audio channel."] 2661 | pub pChannelType: *mut AUDIO_CHANNEL_TYPE, 2662 | #[doc = "< Audio channel index for each output audio"] 2663 | #[doc = "channel. See ISO/IEC 13818-7:2005(E), 8.5.3.2"] 2664 | #[doc = "Explicit channel mapping using a"] 2665 | #[doc = "program_config_element()"] 2666 | pub pChannelIndices: *mut UCHAR, 2667 | #[doc = "< Sampling rate in Hz without SBR (from configuration"] 2668 | #[doc = "info) divided by a (ELD) downscale factor if present."] 2669 | pub aacSampleRate: INT, 2670 | #[doc = "< MPEG-2 profile (from file header) (-1: not applicable (e. g."] 2671 | #[doc = "MPEG-4))."] 2672 | pub profile: INT, 2673 | #[doc = "< Audio Object Type (from ASC): is set to the appropriate value"] 2674 | #[doc = "for MPEG-2 bitstreams (e. g. 2 for AAC-LC)."] 2675 | pub aot: AUDIO_OBJECT_TYPE, 2676 | #[doc = "< Channel configuration (0: PCE defined, 1: mono, 2:"] 2677 | #[doc = "stereo, ..."] 2678 | pub channelConfig: INT, 2679 | #[doc = "< Instantaneous bit rate."] 2680 | pub bitRate: INT, 2681 | #[doc = "< Samples per frame for the AAC core (from ASC)"] 2682 | #[doc = "divided by a (ELD) downscale factor if present. \\n"] 2683 | #[doc = "Typically this is (with a downscale factor of 1):"] 2684 | #[doc = "\\n 1024 or 960 for AAC-LC \\n 512 or 480 for"] 2685 | #[doc = "AAC-LD and AAC-ELD"] 2686 | pub aacSamplesPerFrame: INT, 2687 | #[doc = "< The number of audio channels after AAC core"] 2688 | #[doc = "processing (before PS or MPS processing). CAUTION: This"] 2689 | #[doc = "are not the final number of output channels!"] 2690 | pub aacNumChannels: INT, 2691 | #[doc = "< Extension Audio Object Type (from ASC)"] 2692 | pub extAot: AUDIO_OBJECT_TYPE, 2693 | #[doc = "< Extension sampling rate in Hz (from ASC) divided by"] 2694 | #[doc = "a (ELD) downscale factor if present."] 2695 | pub extSamplingRate: INT, 2696 | #[doc = "< The number of samples the output is additionally"] 2697 | #[doc = "delayed by.the decoder."] 2698 | pub outputDelay: UINT, 2699 | #[doc = "< Copy of internal flags. Only to be written by the decoder,"] 2700 | #[doc = "and only to be read externally."] 2701 | pub flags: UINT, 2702 | #[doc = "< epConfig level (from ASC): only level 0 supported, -1"] 2703 | #[doc = "means no ER (e. g. AOT=2, MPEG-2 AAC, etc.)"] 2704 | pub epConfig: SCHAR, 2705 | #[doc = "< This integer will reflect the estimated amount of"] 2706 | #[doc = "lost access units in case aacDecoder_DecodeFrame()"] 2707 | #[doc = "returns AAC_DEC_TRANSPORT_SYNC_ERROR. It will be"] 2708 | #[doc = "< 0 if the estimation failed."] 2709 | pub numLostAccessUnits: INT, 2710 | #[doc = "< This is the number of total bytes that have passed"] 2711 | #[doc = "through the decoder."] 2712 | pub numTotalBytes: INT64, 2713 | #[doc = "< This is the number of total bytes that were considered"] 2714 | #[doc = "with errors from numTotalBytes."] 2715 | pub numBadBytes: INT64, 2716 | #[doc = "< This is the number of total access units that"] 2717 | #[doc = "have passed through the decoder."] 2718 | pub numTotalAccessUnits: INT64, 2719 | #[doc = "< This is the number of total access units that"] 2720 | #[doc = "were considered with errors from numTotalBytes."] 2721 | pub numBadAccessUnits: INT64, 2722 | #[doc = "< DRC program reference level. Defines the reference"] 2723 | #[doc = "level below full-scale. It is quantized in steps of"] 2724 | #[doc = "0.25dB. The valid values range from 0 (0 dBFS) to 127"] 2725 | #[doc = "(-31.75 dBFS). It is used to reflect the average"] 2726 | #[doc = "loudness of the audio in LKFS according to ITU-R BS"] 2727 | #[doc = "1770. If no level has been found in the bitstream the"] 2728 | #[doc = "value is -1."] 2729 | pub drcProgRefLev: SCHAR, 2730 | #[doc = "< DRC presentation mode. According to ETSI TS 101 154,"] 2731 | #[doc = "this field indicates whether light (MPEG-4 Dynamic Range"] 2732 | #[doc = "Control tool) or heavy compression (DVB heavy"] 2733 | #[doc = "compression) dynamic range control shall take priority"] 2734 | #[doc = "on the outputs. For details, see ETSI TS 101 154, table"] 2735 | #[doc = "C.33. Possible values are: \\n -1: No corresponding"] 2736 | #[doc = "metadata found in the bitstream \\n 0: DRC presentation"] 2737 | #[doc = "mode not indicated \\n 1: DRC presentation mode 1 \\n 2:"] 2738 | #[doc = "DRC presentation mode 2 \\n 3: Reserved"] 2739 | pub drcPresMode: SCHAR, 2740 | } 2741 | #[test] 2742 | fn bindgen_test_layout_CStreamInfo() { 2743 | assert_eq!( 2744 | ::std::mem::size_of::(), 2745 | 128usize, 2746 | concat!("Size of: ", stringify!(CStreamInfo)) 2747 | ); 2748 | assert_eq!( 2749 | ::std::mem::align_of::(), 2750 | 8usize, 2751 | concat!("Alignment of ", stringify!(CStreamInfo)) 2752 | ); 2753 | assert_eq!( 2754 | unsafe { &(*(::std::ptr::null::())).sampleRate as *const _ as usize }, 2755 | 0usize, 2756 | concat!( 2757 | "Offset of field: ", 2758 | stringify!(CStreamInfo), 2759 | "::", 2760 | stringify!(sampleRate) 2761 | ) 2762 | ); 2763 | assert_eq!( 2764 | unsafe { &(*(::std::ptr::null::())).frameSize as *const _ as usize }, 2765 | 4usize, 2766 | concat!( 2767 | "Offset of field: ", 2768 | stringify!(CStreamInfo), 2769 | "::", 2770 | stringify!(frameSize) 2771 | ) 2772 | ); 2773 | assert_eq!( 2774 | unsafe { &(*(::std::ptr::null::())).numChannels as *const _ as usize }, 2775 | 8usize, 2776 | concat!( 2777 | "Offset of field: ", 2778 | stringify!(CStreamInfo), 2779 | "::", 2780 | stringify!(numChannels) 2781 | ) 2782 | ); 2783 | assert_eq!( 2784 | unsafe { &(*(::std::ptr::null::())).pChannelType as *const _ as usize }, 2785 | 16usize, 2786 | concat!( 2787 | "Offset of field: ", 2788 | stringify!(CStreamInfo), 2789 | "::", 2790 | stringify!(pChannelType) 2791 | ) 2792 | ); 2793 | assert_eq!( 2794 | unsafe { &(*(::std::ptr::null::())).pChannelIndices as *const _ as usize }, 2795 | 24usize, 2796 | concat!( 2797 | "Offset of field: ", 2798 | stringify!(CStreamInfo), 2799 | "::", 2800 | stringify!(pChannelIndices) 2801 | ) 2802 | ); 2803 | assert_eq!( 2804 | unsafe { &(*(::std::ptr::null::())).aacSampleRate as *const _ as usize }, 2805 | 32usize, 2806 | concat!( 2807 | "Offset of field: ", 2808 | stringify!(CStreamInfo), 2809 | "::", 2810 | stringify!(aacSampleRate) 2811 | ) 2812 | ); 2813 | assert_eq!( 2814 | unsafe { &(*(::std::ptr::null::())).profile as *const _ as usize }, 2815 | 36usize, 2816 | concat!( 2817 | "Offset of field: ", 2818 | stringify!(CStreamInfo), 2819 | "::", 2820 | stringify!(profile) 2821 | ) 2822 | ); 2823 | assert_eq!( 2824 | unsafe { &(*(::std::ptr::null::())).aot as *const _ as usize }, 2825 | 40usize, 2826 | concat!( 2827 | "Offset of field: ", 2828 | stringify!(CStreamInfo), 2829 | "::", 2830 | stringify!(aot) 2831 | ) 2832 | ); 2833 | assert_eq!( 2834 | unsafe { &(*(::std::ptr::null::())).channelConfig as *const _ as usize }, 2835 | 44usize, 2836 | concat!( 2837 | "Offset of field: ", 2838 | stringify!(CStreamInfo), 2839 | "::", 2840 | stringify!(channelConfig) 2841 | ) 2842 | ); 2843 | assert_eq!( 2844 | unsafe { &(*(::std::ptr::null::())).bitRate as *const _ as usize }, 2845 | 48usize, 2846 | concat!( 2847 | "Offset of field: ", 2848 | stringify!(CStreamInfo), 2849 | "::", 2850 | stringify!(bitRate) 2851 | ) 2852 | ); 2853 | assert_eq!( 2854 | unsafe { &(*(::std::ptr::null::())).aacSamplesPerFrame as *const _ as usize }, 2855 | 52usize, 2856 | concat!( 2857 | "Offset of field: ", 2858 | stringify!(CStreamInfo), 2859 | "::", 2860 | stringify!(aacSamplesPerFrame) 2861 | ) 2862 | ); 2863 | assert_eq!( 2864 | unsafe { &(*(::std::ptr::null::())).aacNumChannels as *const _ as usize }, 2865 | 56usize, 2866 | concat!( 2867 | "Offset of field: ", 2868 | stringify!(CStreamInfo), 2869 | "::", 2870 | stringify!(aacNumChannels) 2871 | ) 2872 | ); 2873 | assert_eq!( 2874 | unsafe { &(*(::std::ptr::null::())).extAot as *const _ as usize }, 2875 | 60usize, 2876 | concat!( 2877 | "Offset of field: ", 2878 | stringify!(CStreamInfo), 2879 | "::", 2880 | stringify!(extAot) 2881 | ) 2882 | ); 2883 | assert_eq!( 2884 | unsafe { &(*(::std::ptr::null::())).extSamplingRate as *const _ as usize }, 2885 | 64usize, 2886 | concat!( 2887 | "Offset of field: ", 2888 | stringify!(CStreamInfo), 2889 | "::", 2890 | stringify!(extSamplingRate) 2891 | ) 2892 | ); 2893 | assert_eq!( 2894 | unsafe { &(*(::std::ptr::null::())).outputDelay as *const _ as usize }, 2895 | 68usize, 2896 | concat!( 2897 | "Offset of field: ", 2898 | stringify!(CStreamInfo), 2899 | "::", 2900 | stringify!(outputDelay) 2901 | ) 2902 | ); 2903 | assert_eq!( 2904 | unsafe { &(*(::std::ptr::null::())).flags as *const _ as usize }, 2905 | 72usize, 2906 | concat!( 2907 | "Offset of field: ", 2908 | stringify!(CStreamInfo), 2909 | "::", 2910 | stringify!(flags) 2911 | ) 2912 | ); 2913 | assert_eq!( 2914 | unsafe { &(*(::std::ptr::null::())).epConfig as *const _ as usize }, 2915 | 76usize, 2916 | concat!( 2917 | "Offset of field: ", 2918 | stringify!(CStreamInfo), 2919 | "::", 2920 | stringify!(epConfig) 2921 | ) 2922 | ); 2923 | assert_eq!( 2924 | unsafe { &(*(::std::ptr::null::())).numLostAccessUnits as *const _ as usize }, 2925 | 80usize, 2926 | concat!( 2927 | "Offset of field: ", 2928 | stringify!(CStreamInfo), 2929 | "::", 2930 | stringify!(numLostAccessUnits) 2931 | ) 2932 | ); 2933 | assert_eq!( 2934 | unsafe { &(*(::std::ptr::null::())).numTotalBytes as *const _ as usize }, 2935 | 88usize, 2936 | concat!( 2937 | "Offset of field: ", 2938 | stringify!(CStreamInfo), 2939 | "::", 2940 | stringify!(numTotalBytes) 2941 | ) 2942 | ); 2943 | assert_eq!( 2944 | unsafe { &(*(::std::ptr::null::())).numBadBytes as *const _ as usize }, 2945 | 96usize, 2946 | concat!( 2947 | "Offset of field: ", 2948 | stringify!(CStreamInfo), 2949 | "::", 2950 | stringify!(numBadBytes) 2951 | ) 2952 | ); 2953 | assert_eq!( 2954 | unsafe { &(*(::std::ptr::null::())).numTotalAccessUnits as *const _ as usize }, 2955 | 104usize, 2956 | concat!( 2957 | "Offset of field: ", 2958 | stringify!(CStreamInfo), 2959 | "::", 2960 | stringify!(numTotalAccessUnits) 2961 | ) 2962 | ); 2963 | assert_eq!( 2964 | unsafe { &(*(::std::ptr::null::())).numBadAccessUnits as *const _ as usize }, 2965 | 112usize, 2966 | concat!( 2967 | "Offset of field: ", 2968 | stringify!(CStreamInfo), 2969 | "::", 2970 | stringify!(numBadAccessUnits) 2971 | ) 2972 | ); 2973 | assert_eq!( 2974 | unsafe { &(*(::std::ptr::null::())).drcProgRefLev as *const _ as usize }, 2975 | 120usize, 2976 | concat!( 2977 | "Offset of field: ", 2978 | stringify!(CStreamInfo), 2979 | "::", 2980 | stringify!(drcProgRefLev) 2981 | ) 2982 | ); 2983 | assert_eq!( 2984 | unsafe { &(*(::std::ptr::null::())).drcPresMode as *const _ as usize }, 2985 | 121usize, 2986 | concat!( 2987 | "Offset of field: ", 2988 | stringify!(CStreamInfo), 2989 | "::", 2990 | stringify!(drcPresMode) 2991 | ) 2992 | ); 2993 | } 2994 | #[repr(C)] 2995 | #[derive(Debug, Copy, Clone)] 2996 | pub struct AAC_DECODER_INSTANCE { 2997 | _unused: [u8; 0], 2998 | } 2999 | pub type HANDLE_AACDECODER = *mut AAC_DECODER_INSTANCE; 3000 | extern "C" { 3001 | #[doc = " \\brief Initialize ancillary data buffer."] 3002 | #[doc = ""] 3003 | #[doc = " \\param self AAC decoder handle."] 3004 | #[doc = " \\param buffer Pointer to (external) ancillary data buffer."] 3005 | #[doc = " \\param size Size of the buffer pointed to by buffer."] 3006 | #[doc = " \\return Error code."] 3007 | pub fn aacDecoder_AncDataInit( 3008 | self_: HANDLE_AACDECODER, 3009 | buffer: *mut UCHAR, 3010 | size: ::std::os::raw::c_int, 3011 | ) -> AAC_DECODER_ERROR; 3012 | } 3013 | extern "C" { 3014 | #[doc = " \\brief Get one ancillary data element."] 3015 | #[doc = ""] 3016 | #[doc = " \\param self AAC decoder handle."] 3017 | #[doc = " \\param index Index of the ancillary data element to get."] 3018 | #[doc = " \\param ptr Pointer to a buffer receiving a pointer to the requested"] 3019 | #[doc = " ancillary data element."] 3020 | #[doc = " \\param size Pointer to a buffer receiving the length of the requested"] 3021 | #[doc = " ancillary data element."] 3022 | #[doc = " \\return Error code."] 3023 | pub fn aacDecoder_AncDataGet( 3024 | self_: HANDLE_AACDECODER, 3025 | index: ::std::os::raw::c_int, 3026 | ptr: *mut *mut UCHAR, 3027 | size: *mut ::std::os::raw::c_int, 3028 | ) -> AAC_DECODER_ERROR; 3029 | } 3030 | extern "C" { 3031 | #[doc = " \\brief Set one single decoder parameter."] 3032 | #[doc = ""] 3033 | #[doc = " \\param self AAC decoder handle."] 3034 | #[doc = " \\param param Parameter to be set."] 3035 | #[doc = " \\param value Parameter value."] 3036 | #[doc = " \\return Error code."] 3037 | pub fn aacDecoder_SetParam( 3038 | self_: HANDLE_AACDECODER, 3039 | param: AACDEC_PARAM, 3040 | value: INT, 3041 | ) -> AAC_DECODER_ERROR; 3042 | } 3043 | extern "C" { 3044 | #[doc = " \\brief Get free bytes inside decoder internal buffer."] 3045 | #[doc = " \\param self Handle of AAC decoder instance."] 3046 | #[doc = " \\param pFreeBytes Pointer to variable receiving amount of free bytes inside"] 3047 | #[doc = " decoder internal buffer."] 3048 | #[doc = " \\return Error code."] 3049 | pub fn aacDecoder_GetFreeBytes( 3050 | self_: HANDLE_AACDECODER, 3051 | pFreeBytes: *mut UINT, 3052 | ) -> AAC_DECODER_ERROR; 3053 | } 3054 | extern "C" { 3055 | #[doc = " \\brief Open an AAC decoder instance."] 3056 | #[doc = " \\param transportFmt The transport type to be used."] 3057 | #[doc = " \\param nrOfLayers Number of transport layers."] 3058 | #[doc = " \\return AAC decoder handle."] 3059 | pub fn aacDecoder_Open(transportFmt: TRANSPORT_TYPE, nrOfLayers: UINT) -> HANDLE_AACDECODER; 3060 | } 3061 | extern "C" { 3062 | #[doc = " \\brief Explicitly configure the decoder by passing a raw AudioSpecificConfig"] 3063 | #[doc = " (ASC) or a StreamMuxConfig (SMC), contained in a binary buffer. This is"] 3064 | #[doc = " required for MPEG-4 and Raw Packets file format bitstreams as well as for"] 3065 | #[doc = " LATM bitstreams with no in-band SMC. If the transport format is LATM with or"] 3066 | #[doc = " without LOAS, configuration is assumed to be an SMC, for all other file"] 3067 | #[doc = " formats an ASC."] 3068 | #[doc = ""] 3069 | #[doc = " \\param self AAC decoder handle."] 3070 | #[doc = " \\param conf Pointer to an unsigned char buffer containing the binary"] 3071 | #[doc = " configuration buffer (either ASC or SMC)."] 3072 | #[doc = " \\param length Length of the configuration buffer in bytes."] 3073 | #[doc = " \\return Error code."] 3074 | pub fn aacDecoder_ConfigRaw( 3075 | self_: HANDLE_AACDECODER, 3076 | conf: *mut *mut UCHAR, 3077 | length: *const UINT, 3078 | ) -> AAC_DECODER_ERROR; 3079 | } 3080 | extern "C" { 3081 | #[doc = " \\brief Submit raw ISO base media file format boxes to decoder for parsing"] 3082 | #[doc = " (only some box types are recognized)."] 3083 | #[doc = ""] 3084 | #[doc = " \\param self AAC decoder handle."] 3085 | #[doc = " \\param buffer Pointer to an unsigned char buffer containing the binary box"] 3086 | #[doc = " data (including size and type, can be a sequence of multiple boxes)."] 3087 | #[doc = " \\param length Length of the data in bytes."] 3088 | #[doc = " \\return Error code."] 3089 | pub fn aacDecoder_RawISOBMFFData( 3090 | self_: HANDLE_AACDECODER, 3091 | buffer: *mut UCHAR, 3092 | length: UINT, 3093 | ) -> AAC_DECODER_ERROR; 3094 | } 3095 | extern "C" { 3096 | #[doc = " \\brief Fill AAC decoder's internal input buffer with bitstream data from the"] 3097 | #[doc = " external input buffer. The function only copies such data as long as the"] 3098 | #[doc = " decoder-internal input buffer is not full. So it grabs whatever it can from"] 3099 | #[doc = " pBuffer and returns information (bytesValid) so that at a subsequent call of"] 3100 | #[doc = " %aacDecoder_Fill(), the right position in pBuffer can be determined to grab"] 3101 | #[doc = " the next data."] 3102 | #[doc = ""] 3103 | #[doc = " \\param self AAC decoder handle."] 3104 | #[doc = " \\param pBuffer Pointer to external input buffer."] 3105 | #[doc = " \\param bufferSize Size of external input buffer. This argument is required"] 3106 | #[doc = " because decoder-internally we need the information to calculate the offset to"] 3107 | #[doc = " pBuffer, where the next available data is, which is then"] 3108 | #[doc = " fed into the decoder-internal buffer (as much as"] 3109 | #[doc = " possible). Our example framework implementation fills the"] 3110 | #[doc = " buffer at pBuffer again, once it contains no available valid bytes anymore"] 3111 | #[doc = " (meaning bytesValid equal 0)."] 3112 | #[doc = " \\param bytesValid Number of bitstream bytes in the external bitstream buffer"] 3113 | #[doc = " that have not yet been copied into the decoder's internal bitstream buffer by"] 3114 | #[doc = " calling this function. The value is updated according to"] 3115 | #[doc = " the amount of newly copied bytes."] 3116 | #[doc = " \\return Error code."] 3117 | pub fn aacDecoder_Fill( 3118 | self_: HANDLE_AACDECODER, 3119 | pBuffer: *mut *mut UCHAR, 3120 | bufferSize: *const UINT, 3121 | bytesValid: *mut UINT, 3122 | ) -> AAC_DECODER_ERROR; 3123 | } 3124 | extern "C" { 3125 | #[doc = " \\brief Decode one audio frame"] 3126 | #[doc = ""] 3127 | #[doc = " \\param self AAC decoder handle."] 3128 | #[doc = " \\param pTimeData Pointer to external output buffer where the decoded PCM"] 3129 | #[doc = " samples will be stored into."] 3130 | #[doc = " \\param timeDataSize Size of external output buffer."] 3131 | #[doc = " \\param flags Bit field with flags for the decoder: \\n"] 3132 | #[doc = " (flags & AACDEC_CONCEAL) == 1: Do concealment. \\n"] 3133 | #[doc = " (flags & AACDEC_FLUSH) == 2: Discard input data. Flush"] 3134 | #[doc = " filter banks (output delayed audio). \\n (flags & AACDEC_INTR) == 4: Input"] 3135 | #[doc = " data is discontinuous. Resynchronize any internals as"] 3136 | #[doc = " necessary. \\n (flags & AACDEC_CLRHIST) == 8: Clear all signal delay lines and"] 3137 | #[doc = " history buffers."] 3138 | #[doc = " \\return Error code."] 3139 | pub fn aacDecoder_DecodeFrame( 3140 | self_: HANDLE_AACDECODER, 3141 | pTimeData: *mut INT_PCM, 3142 | timeDataSize: INT, 3143 | flags: UINT, 3144 | ) -> AAC_DECODER_ERROR; 3145 | } 3146 | extern "C" { 3147 | #[doc = " \\brief De-allocate all resources of an AAC decoder instance."] 3148 | #[doc = ""] 3149 | #[doc = " \\param self AAC decoder handle."] 3150 | #[doc = " \\return void."] 3151 | pub fn aacDecoder_Close(self_: HANDLE_AACDECODER); 3152 | } 3153 | extern "C" { 3154 | #[doc = " \\brief Get CStreamInfo handle from decoder."] 3155 | #[doc = ""] 3156 | #[doc = " \\param self AAC decoder handle."] 3157 | #[doc = " \\return Reference to requested CStreamInfo."] 3158 | pub fn aacDecoder_GetStreamInfo(self_: HANDLE_AACDECODER) -> *mut CStreamInfo; 3159 | } 3160 | extern "C" { 3161 | #[doc = " \\brief Get decoder library info."] 3162 | #[doc = ""] 3163 | #[doc = " \\param info Pointer to an allocated LIB_INFO structure."] 3164 | #[doc = " \\return 0 on success."] 3165 | pub fn aacDecoder_GetLibInfo(info: *mut LIB_INFO) -> INT; 3166 | } 3167 | --------------------------------------------------------------------------------