1*e5436536SAndroid Build Coastguard Worker /* ----------------------------------------------------------------------------- 2*e5436536SAndroid Build Coastguard Worker Software License for The Fraunhofer FDK AAC Codec Library for Android 3*e5436536SAndroid Build Coastguard Worker 4*e5436536SAndroid Build Coastguard Worker © Copyright 1995 - 2020 Fraunhofer-Gesellschaft zur Förderung der angewandten 5*e5436536SAndroid Build Coastguard Worker Forschung e.V. All rights reserved. 6*e5436536SAndroid Build Coastguard Worker 7*e5436536SAndroid Build Coastguard Worker 1. INTRODUCTION 8*e5436536SAndroid Build Coastguard Worker The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software 9*e5436536SAndroid Build Coastguard Worker that implements the MPEG Advanced Audio Coding ("AAC") encoding and decoding 10*e5436536SAndroid Build Coastguard Worker scheme for digital audio. This FDK AAC Codec software is intended to be used on 11*e5436536SAndroid Build Coastguard Worker a wide variety of Android devices. 12*e5436536SAndroid Build Coastguard Worker 13*e5436536SAndroid Build Coastguard Worker AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient 14*e5436536SAndroid Build Coastguard Worker general perceptual audio codecs. AAC-ELD is considered the best-performing 15*e5436536SAndroid Build Coastguard Worker full-bandwidth communications codec by independent studies and is widely 16*e5436536SAndroid Build Coastguard Worker deployed. AAC has been standardized by ISO and IEC as part of the MPEG 17*e5436536SAndroid Build Coastguard Worker specifications. 18*e5436536SAndroid Build Coastguard Worker 19*e5436536SAndroid Build Coastguard Worker Patent licenses for necessary patent claims for the FDK AAC Codec (including 20*e5436536SAndroid Build Coastguard Worker those of Fraunhofer) may be obtained through Via Licensing 21*e5436536SAndroid Build Coastguard Worker (www.vialicensing.com) or through the respective patent owners individually for 22*e5436536SAndroid Build Coastguard Worker the purpose of encoding or decoding bit streams in products that are compliant 23*e5436536SAndroid Build Coastguard Worker with the ISO/IEC MPEG audio standards. Please note that most manufacturers of 24*e5436536SAndroid Build Coastguard Worker Android devices already license these patent claims through Via Licensing or 25*e5436536SAndroid Build Coastguard Worker directly from the patent owners, and therefore FDK AAC Codec software may 26*e5436536SAndroid Build Coastguard Worker already be covered under those patent licenses when it is used for those 27*e5436536SAndroid Build Coastguard Worker licensed purposes only. 28*e5436536SAndroid Build Coastguard Worker 29*e5436536SAndroid Build Coastguard Worker Commercially-licensed AAC software libraries, including floating-point versions 30*e5436536SAndroid Build Coastguard Worker with enhanced sound quality, are also available from Fraunhofer. Users are 31*e5436536SAndroid Build Coastguard Worker encouraged to check the Fraunhofer website for additional applications 32*e5436536SAndroid Build Coastguard Worker information and documentation. 33*e5436536SAndroid Build Coastguard Worker 34*e5436536SAndroid Build Coastguard Worker 2. COPYRIGHT LICENSE 35*e5436536SAndroid Build Coastguard Worker 36*e5436536SAndroid Build Coastguard Worker Redistribution and use in source and binary forms, with or without modification, 37*e5436536SAndroid Build Coastguard Worker are permitted without payment of copyright license fees provided that you 38*e5436536SAndroid Build Coastguard Worker satisfy the following conditions: 39*e5436536SAndroid Build Coastguard Worker 40*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in redistributions of 41*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec or your modifications thereto in source code form. 42*e5436536SAndroid Build Coastguard Worker 43*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in the documentation 44*e5436536SAndroid Build Coastguard Worker and/or other materials provided with redistributions of the FDK AAC Codec or 45*e5436536SAndroid Build Coastguard Worker your modifications thereto in binary form. You must make available free of 46*e5436536SAndroid Build Coastguard Worker charge copies of the complete source code of the FDK AAC Codec and your 47*e5436536SAndroid Build Coastguard Worker modifications thereto to recipients of copies in binary form. 48*e5436536SAndroid Build Coastguard Worker 49*e5436536SAndroid Build Coastguard Worker The name of Fraunhofer may not be used to endorse or promote products derived 50*e5436536SAndroid Build Coastguard Worker from this library without prior written permission. 51*e5436536SAndroid Build Coastguard Worker 52*e5436536SAndroid Build Coastguard Worker You may not charge copyright license fees for anyone to use, copy or distribute 53*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec software or your modifications thereto. 54*e5436536SAndroid Build Coastguard Worker 55*e5436536SAndroid Build Coastguard Worker Your modified versions of the FDK AAC Codec must carry prominent notices stating 56*e5436536SAndroid Build Coastguard Worker that you changed the software and the date of any change. For modified versions 57*e5436536SAndroid Build Coastguard Worker of the FDK AAC Codec, the term "Fraunhofer FDK AAC Codec Library for Android" 58*e5436536SAndroid Build Coastguard Worker must be replaced by the term "Third-Party Modified Version of the Fraunhofer FDK 59*e5436536SAndroid Build Coastguard Worker AAC Codec Library for Android." 60*e5436536SAndroid Build Coastguard Worker 61*e5436536SAndroid Build Coastguard Worker 3. NO PATENT LICENSE 62*e5436536SAndroid Build Coastguard Worker 63*e5436536SAndroid Build Coastguard Worker NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without 64*e5436536SAndroid Build Coastguard Worker limitation the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE. 65*e5436536SAndroid Build Coastguard Worker Fraunhofer provides no warranty of patent non-infringement with respect to this 66*e5436536SAndroid Build Coastguard Worker software. 67*e5436536SAndroid Build Coastguard Worker 68*e5436536SAndroid Build Coastguard Worker You may use this FDK AAC Codec software or modifications thereto only for 69*e5436536SAndroid Build Coastguard Worker purposes that are authorized by appropriate patent licenses. 70*e5436536SAndroid Build Coastguard Worker 71*e5436536SAndroid Build Coastguard Worker 4. DISCLAIMER 72*e5436536SAndroid Build Coastguard Worker 73*e5436536SAndroid Build Coastguard Worker This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright 74*e5436536SAndroid Build Coastguard Worker holders and contributors "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, 75*e5436536SAndroid Build Coastguard Worker including but not limited to the implied warranties of merchantability and 76*e5436536SAndroid Build Coastguard Worker fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 77*e5436536SAndroid Build Coastguard Worker CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, 78*e5436536SAndroid Build Coastguard Worker or consequential damages, including but not limited to procurement of substitute 79*e5436536SAndroid Build Coastguard Worker goods or services; loss of use, data, or profits, or business interruption, 80*e5436536SAndroid Build Coastguard Worker however caused and on any theory of liability, whether in contract, strict 81*e5436536SAndroid Build Coastguard Worker liability, or tort (including negligence), arising in any way out of the use of 82*e5436536SAndroid Build Coastguard Worker this software, even if advised of the possibility of such damage. 83*e5436536SAndroid Build Coastguard Worker 84*e5436536SAndroid Build Coastguard Worker 5. CONTACT INFORMATION 85*e5436536SAndroid Build Coastguard Worker 86*e5436536SAndroid Build Coastguard Worker Fraunhofer Institute for Integrated Circuits IIS 87*e5436536SAndroid Build Coastguard Worker Attention: Audio and Multimedia Departments - FDK AAC LL 88*e5436536SAndroid Build Coastguard Worker Am Wolfsmantel 33 89*e5436536SAndroid Build Coastguard Worker 91058 Erlangen, Germany 90*e5436536SAndroid Build Coastguard Worker 91*e5436536SAndroid Build Coastguard Worker www.iis.fraunhofer.de/amm 92*e5436536SAndroid Build Coastguard Worker [email protected] 93*e5436536SAndroid Build Coastguard Worker ----------------------------------------------------------------------------- */ 94*e5436536SAndroid Build Coastguard Worker 95*e5436536SAndroid Build Coastguard Worker /**************************** AAC encoder library ****************************** 96*e5436536SAndroid Build Coastguard Worker 97*e5436536SAndroid Build Coastguard Worker Author(s): M. Schug / A. Groeschel 98*e5436536SAndroid Build Coastguard Worker 99*e5436536SAndroid Build Coastguard Worker Description: fast aac coder interface library functions 100*e5436536SAndroid Build Coastguard Worker 101*e5436536SAndroid Build Coastguard Worker *******************************************************************************/ 102*e5436536SAndroid Build Coastguard Worker 103*e5436536SAndroid Build Coastguard Worker #ifndef AACENC_H 104*e5436536SAndroid Build Coastguard Worker #define AACENC_H 105*e5436536SAndroid Build Coastguard Worker 106*e5436536SAndroid Build Coastguard Worker #include "common_fix.h" 107*e5436536SAndroid Build Coastguard Worker #include "FDK_audio.h" 108*e5436536SAndroid Build Coastguard Worker 109*e5436536SAndroid Build Coastguard Worker #include "tpenc_lib.h" 110*e5436536SAndroid Build Coastguard Worker 111*e5436536SAndroid Build Coastguard Worker #include "sbr_encoder.h" 112*e5436536SAndroid Build Coastguard Worker 113*e5436536SAndroid Build Coastguard Worker #define MIN_BUFSIZE_PER_EFF_CHAN 6144 114*e5436536SAndroid Build Coastguard Worker 115*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus 116*e5436536SAndroid Build Coastguard Worker extern "C" { 117*e5436536SAndroid Build Coastguard Worker #endif 118*e5436536SAndroid Build Coastguard Worker 119*e5436536SAndroid Build Coastguard Worker /* 120*e5436536SAndroid Build Coastguard Worker * AAC-LC error codes. 121*e5436536SAndroid Build Coastguard Worker */ 122*e5436536SAndroid Build Coastguard Worker typedef enum { 123*e5436536SAndroid Build Coastguard Worker AAC_ENC_OK = 0x0000, /*!< All fine. */ 124*e5436536SAndroid Build Coastguard Worker 125*e5436536SAndroid Build Coastguard Worker AAC_ENC_UNKNOWN = 0x0002, /*!< Error condition is of unknown reason, or from 126*e5436536SAndroid Build Coastguard Worker another module. */ 127*e5436536SAndroid Build Coastguard Worker 128*e5436536SAndroid Build Coastguard Worker /* initialization errors */ 129*e5436536SAndroid Build Coastguard Worker aac_enc_init_error_start = 0x2000, 130*e5436536SAndroid Build Coastguard Worker AAC_ENC_INVALID_HANDLE = 0x2020, /*!< The handle passed to the function call 131*e5436536SAndroid Build Coastguard Worker was invalid (probably NULL). */ 132*e5436536SAndroid Build Coastguard Worker AAC_ENC_INVALID_FRAME_LENGTH = 133*e5436536SAndroid Build Coastguard Worker 0x2080, /*!< Invalid frame length (must be 1024 or 960). */ 134*e5436536SAndroid Build Coastguard Worker AAC_ENC_INVALID_N_CHANNELS = 135*e5436536SAndroid Build Coastguard Worker 0x20e0, /*!< Invalid amount of audio input channels. */ 136*e5436536SAndroid Build Coastguard Worker AAC_ENC_INVALID_SFB_TABLE = 0x2140, /*!< Internal encoder error. */ 137*e5436536SAndroid Build Coastguard Worker 138*e5436536SAndroid Build Coastguard Worker AAC_ENC_UNSUPPORTED_AOT = 139*e5436536SAndroid Build Coastguard Worker 0x3000, /*!< The Audio Object Type (AOT) is not supported. */ 140*e5436536SAndroid Build Coastguard Worker AAC_ENC_UNSUPPORTED_FILTERBANK = 141*e5436536SAndroid Build Coastguard Worker 0x3010, /*!< Filterbank type is not supported. */ 142*e5436536SAndroid Build Coastguard Worker AAC_ENC_UNSUPPORTED_BITRATE = 143*e5436536SAndroid Build Coastguard Worker 0x3020, /*!< The chosen bitrate is not supported. */ 144*e5436536SAndroid Build Coastguard Worker AAC_ENC_UNSUPPORTED_BITRATE_MODE = 145*e5436536SAndroid Build Coastguard Worker 0x3028, /*!< Unsupported bit rate mode (CBR or VBR). */ 146*e5436536SAndroid Build Coastguard Worker AAC_ENC_UNSUPPORTED_ANC_BITRATE = 147*e5436536SAndroid Build Coastguard Worker 0x3040, /*!< Unsupported ancillay bitrate. */ 148*e5436536SAndroid Build Coastguard Worker AAC_ENC_UNSUPPORTED_ANC_MODE = 0x3060, 149*e5436536SAndroid Build Coastguard Worker AAC_ENC_UNSUPPORTED_TRANSPORT_TYPE = 150*e5436536SAndroid Build Coastguard Worker 0x3080, /*!< The bitstream format is not supported. */ 151*e5436536SAndroid Build Coastguard Worker AAC_ENC_UNSUPPORTED_ER_FORMAT = 152*e5436536SAndroid Build Coastguard Worker 0x30a0, /*!< The error resilience tool format is not supported. */ 153*e5436536SAndroid Build Coastguard Worker AAC_ENC_UNSUPPORTED_EPCONFIG = 154*e5436536SAndroid Build Coastguard Worker 0x30c0, /*!< The error protection format is not supported. */ 155*e5436536SAndroid Build Coastguard Worker AAC_ENC_UNSUPPORTED_CHANNELCONFIG = 156*e5436536SAndroid Build Coastguard Worker 0x30e0, /*!< The channel configuration (either number or arrangement) is 157*e5436536SAndroid Build Coastguard Worker not supported. */ 158*e5436536SAndroid Build Coastguard Worker AAC_ENC_UNSUPPORTED_SAMPLINGRATE = 159*e5436536SAndroid Build Coastguard Worker 0x3100, /*!< Sample rate of audio input is not supported. */ 160*e5436536SAndroid Build Coastguard Worker AAC_ENC_NO_MEMORY = 0x3120, /*!< Could not allocate memory. */ 161*e5436536SAndroid Build Coastguard Worker AAC_ENC_PE_INIT_TABLE_NOT_FOUND = 0x3140, /*!< Internal encoder error. */ 162*e5436536SAndroid Build Coastguard Worker 163*e5436536SAndroid Build Coastguard Worker aac_enc_init_error_end, 164*e5436536SAndroid Build Coastguard Worker 165*e5436536SAndroid Build Coastguard Worker /* encode errors */ 166*e5436536SAndroid Build Coastguard Worker aac_enc_error_start = 0x4000, 167*e5436536SAndroid Build Coastguard Worker AAC_ENC_QUANT_ERROR = 0x4020, /*!< Too many bits used in quantization. */ 168*e5436536SAndroid Build Coastguard Worker AAC_ENC_WRITTEN_BITS_ERROR = 169*e5436536SAndroid Build Coastguard Worker 0x4040, /*!< Unexpected number of written bits, differs to 170*e5436536SAndroid Build Coastguard Worker calculated number of bits. */ 171*e5436536SAndroid Build Coastguard Worker AAC_ENC_PNS_TABLE_ERROR = 0x4060, /*!< PNS level out of range. */ 172*e5436536SAndroid Build Coastguard Worker AAC_ENC_GLOBAL_GAIN_TOO_HIGH = 0x4080, /*!< Internal quantizer error. */ 173*e5436536SAndroid Build Coastguard Worker AAC_ENC_BITRES_TOO_LOW = 0x40a0, /*!< Too few bits in bit reservoir. */ 174*e5436536SAndroid Build Coastguard Worker AAC_ENC_BITRES_TOO_HIGH = 0x40a1, /*!< Too many bits in bit reservoir. */ 175*e5436536SAndroid Build Coastguard Worker AAC_ENC_INVALID_CHANNEL_BITRATE = 0x4100, 176*e5436536SAndroid Build Coastguard Worker AAC_ENC_INVALID_ELEMENTINFO_TYPE = 0x4120, /*!< Internal encoder error. */ 177*e5436536SAndroid Build Coastguard Worker 178*e5436536SAndroid Build Coastguard Worker AAC_ENC_WRITE_SCAL_ERROR = 0x41e0, /*!< Error writing scalefacData. */ 179*e5436536SAndroid Build Coastguard Worker AAC_ENC_WRITE_SEC_ERROR = 0x4200, /*!< Error writing sectionData. */ 180*e5436536SAndroid Build Coastguard Worker AAC_ENC_WRITE_SPEC_ERROR = 0x4220, /*!< Error writing spectralData. */ 181*e5436536SAndroid Build Coastguard Worker aac_enc_error_end 182*e5436536SAndroid Build Coastguard Worker 183*e5436536SAndroid Build Coastguard Worker } AAC_ENCODER_ERROR; 184*e5436536SAndroid Build Coastguard Worker /*-------------------------- defines --------------------------------------*/ 185*e5436536SAndroid Build Coastguard Worker 186*e5436536SAndroid Build Coastguard Worker #define ANC_DATA_BUFFERSIZE 1024 /* ancBuffer size */ 187*e5436536SAndroid Build Coastguard Worker 188*e5436536SAndroid Build Coastguard Worker #define MAX_TOTAL_EXT_PAYLOADS ((((8)) * (1)) + (2 + 2)) 189*e5436536SAndroid Build Coastguard Worker 190*e5436536SAndroid Build Coastguard Worker typedef enum { 191*e5436536SAndroid Build Coastguard Worker AACENC_BR_MODE_INVALID = -1, /*!< Invalid bitrate mode. */ 192*e5436536SAndroid Build Coastguard Worker AACENC_BR_MODE_CBR = 0, /*!< Constant bitrate mode. */ 193*e5436536SAndroid Build Coastguard Worker AACENC_BR_MODE_VBR_1 = 1, /*!< Variable bitrate mode, very low bitrate. */ 194*e5436536SAndroid Build Coastguard Worker AACENC_BR_MODE_VBR_2 = 2, /*!< Variable bitrate mode, low bitrate. */ 195*e5436536SAndroid Build Coastguard Worker AACENC_BR_MODE_VBR_3 = 3, /*!< Variable bitrate mode, medium bitrate. */ 196*e5436536SAndroid Build Coastguard Worker AACENC_BR_MODE_VBR_4 = 4, /*!< Variable bitrate mode, high bitrate. */ 197*e5436536SAndroid Build Coastguard Worker AACENC_BR_MODE_VBR_5 = 5, /*!< Variable bitrate mode, very high bitrate. */ 198*e5436536SAndroid Build Coastguard Worker AACENC_BR_MODE_FF = 6, /*!< Fixed frame mode. */ 199*e5436536SAndroid Build Coastguard Worker AACENC_BR_MODE_SFR = 7 /*!< Superframe mode. */ 200*e5436536SAndroid Build Coastguard Worker 201*e5436536SAndroid Build Coastguard Worker } AACENC_BITRATE_MODE; 202*e5436536SAndroid Build Coastguard Worker 203*e5436536SAndroid Build Coastguard Worker #define AACENC_BR_MODE_IS_VBR(brMode) ((brMode >= 1) && (brMode <= 5)) 204*e5436536SAndroid Build Coastguard Worker 205*e5436536SAndroid Build Coastguard Worker typedef enum { 206*e5436536SAndroid Build Coastguard Worker 207*e5436536SAndroid Build Coastguard Worker CH_ORDER_MPEG = 208*e5436536SAndroid Build Coastguard Worker 0, /*!< MPEG channel ordering (e. g. 5.1: C, L, R, SL, SR, LFE) */ 209*e5436536SAndroid Build Coastguard Worker CH_ORDER_WAV /*!< WAV fileformat channel ordering (e. g. 5.1: L, R, C, LFE, 210*e5436536SAndroid Build Coastguard Worker SL, SR) */ 211*e5436536SAndroid Build Coastguard Worker 212*e5436536SAndroid Build Coastguard Worker } CHANNEL_ORDER; 213*e5436536SAndroid Build Coastguard Worker 214*e5436536SAndroid Build Coastguard Worker /*-------------------- structure definitions ------------------------------*/ 215*e5436536SAndroid Build Coastguard Worker 216*e5436536SAndroid Build Coastguard Worker struct AACENC_CONFIG { 217*e5436536SAndroid Build Coastguard Worker INT sampleRate; /* encoder sample rate */ 218*e5436536SAndroid Build Coastguard Worker INT bitRate; /* encoder bit rate in bits/sec */ 219*e5436536SAndroid Build Coastguard Worker INT ancDataBitRate; /* additional bits consumed by anc data or sbr have to be 220*e5436536SAndroid Build Coastguard Worker consiedered while configuration */ 221*e5436536SAndroid Build Coastguard Worker 222*e5436536SAndroid Build Coastguard Worker INT nSubFrames; /* number of frames in super frame (not ADTS/LATM subframes !) 223*e5436536SAndroid Build Coastguard Worker */ 224*e5436536SAndroid Build Coastguard Worker AUDIO_OBJECT_TYPE audioObjectType; /* Audio Object Type */ 225*e5436536SAndroid Build Coastguard Worker 226*e5436536SAndroid Build Coastguard Worker INT averageBits; /* encoder bit rate in bits/superframe */ 227*e5436536SAndroid Build Coastguard Worker AACENC_BITRATE_MODE bitrateMode; /* encoder bitrate mode (CBR/VBR) */ 228*e5436536SAndroid Build Coastguard Worker INT nChannels; /* number of channels to process */ 229*e5436536SAndroid Build Coastguard Worker CHANNEL_ORDER channelOrder; /* input Channel ordering scheme. */ 230*e5436536SAndroid Build Coastguard Worker INT bandWidth; /* targeted audio bandwidth in Hz */ 231*e5436536SAndroid Build Coastguard Worker CHANNEL_MODE channelMode; /* encoder channel mode configuration */ 232*e5436536SAndroid Build Coastguard Worker INT framelength; /* used frame size */ 233*e5436536SAndroid Build Coastguard Worker 234*e5436536SAndroid Build Coastguard Worker UINT syntaxFlags; /* bitstreams syntax configuration */ 235*e5436536SAndroid Build Coastguard Worker SCHAR epConfig; /* error protection configuration */ 236*e5436536SAndroid Build Coastguard Worker 237*e5436536SAndroid Build Coastguard Worker INT anc_Rate; /* ancillary rate, 0 (disabled), -1 (default) else desired rate 238*e5436536SAndroid Build Coastguard Worker */ 239*e5436536SAndroid Build Coastguard Worker UINT maxAncBytesPerAU; 240*e5436536SAndroid Build Coastguard Worker INT minBitsPerFrame; /* minimum number of bits in AU */ 241*e5436536SAndroid Build Coastguard Worker INT maxBitsPerFrame; /* maximum number of bits in AU */ 242*e5436536SAndroid Build Coastguard Worker 243*e5436536SAndroid Build Coastguard Worker INT audioMuxVersion; /* audio mux version in loas/latm transport format */ 244*e5436536SAndroid Build Coastguard Worker 245*e5436536SAndroid Build Coastguard Worker UINT sbrRatio; /* sbr sampling rate ratio: dual- or single-rate */ 246*e5436536SAndroid Build Coastguard Worker 247*e5436536SAndroid Build Coastguard Worker UCHAR useTns; /* flag: use temporal noise shaping */ 248*e5436536SAndroid Build Coastguard Worker UCHAR usePns; /* flag: use perceptual noise substitution */ 249*e5436536SAndroid Build Coastguard Worker UCHAR useIS; /* flag: use intensity coding */ 250*e5436536SAndroid Build Coastguard Worker UCHAR useMS; /* flag: use ms stereo tool */ 251*e5436536SAndroid Build Coastguard Worker 252*e5436536SAndroid Build Coastguard Worker UCHAR useRequant; /* flag: use afterburner */ 253*e5436536SAndroid Build Coastguard Worker 254*e5436536SAndroid Build Coastguard Worker UINT downscaleFactor; 255*e5436536SAndroid Build Coastguard Worker }; 256*e5436536SAndroid Build Coastguard Worker 257*e5436536SAndroid Build Coastguard Worker typedef struct { 258*e5436536SAndroid Build Coastguard Worker UCHAR *pData; /* pointer to extension payload data */ 259*e5436536SAndroid Build Coastguard Worker UINT dataSize; /* extension payload data size in bits */ 260*e5436536SAndroid Build Coastguard Worker EXT_PAYLOAD_TYPE dataType; /* extension payload data type */ 261*e5436536SAndroid Build Coastguard Worker INT associatedChElement; /* number of the channel element the data is assigned 262*e5436536SAndroid Build Coastguard Worker to */ 263*e5436536SAndroid Build Coastguard Worker } AACENC_EXT_PAYLOAD; 264*e5436536SAndroid Build Coastguard Worker 265*e5436536SAndroid Build Coastguard Worker typedef struct AAC_ENC *HANDLE_AAC_ENC; 266*e5436536SAndroid Build Coastguard Worker 267*e5436536SAndroid Build Coastguard Worker /** 268*e5436536SAndroid Build Coastguard Worker * \brief Calculate framesize in bits for given bit rate, frame length and 269*e5436536SAndroid Build Coastguard Worker * sampling rate. 270*e5436536SAndroid Build Coastguard Worker * 271*e5436536SAndroid Build Coastguard Worker * \param bitRate Ttarget bitrate in bits per second. 272*e5436536SAndroid Build Coastguard Worker * \param frameLength Number of audio samples in one frame. 273*e5436536SAndroid Build Coastguard Worker * \param samplingRate Sampling rate in Hz. 274*e5436536SAndroid Build Coastguard Worker * 275*e5436536SAndroid Build Coastguard Worker * \return Framesize in bits per frame. 276*e5436536SAndroid Build Coastguard Worker */ 277*e5436536SAndroid Build Coastguard Worker INT FDKaacEnc_CalcBitsPerFrame(const INT bitRate, const INT frameLength, 278*e5436536SAndroid Build Coastguard Worker const INT samplingRate); 279*e5436536SAndroid Build Coastguard Worker 280*e5436536SAndroid Build Coastguard Worker /** 281*e5436536SAndroid Build Coastguard Worker * \brief Calculate bitrate in bits per second for given framesize, frame length 282*e5436536SAndroid Build Coastguard Worker * and sampling rate. 283*e5436536SAndroid Build Coastguard Worker * 284*e5436536SAndroid Build Coastguard Worker * \param bitsPerFrame Framesize in bits per frame 285*e5436536SAndroid Build Coastguard Worker * \param frameLength Number of audio samples in one frame. 286*e5436536SAndroid Build Coastguard Worker * \param samplingRate Sampling rate in Hz. 287*e5436536SAndroid Build Coastguard Worker * 288*e5436536SAndroid Build Coastguard Worker * \return Bitrate in bits per second. 289*e5436536SAndroid Build Coastguard Worker */ 290*e5436536SAndroid Build Coastguard Worker INT FDKaacEnc_CalcBitrate(const INT bitsPerFrame, const INT frameLength, 291*e5436536SAndroid Build Coastguard Worker const INT samplingRate); 292*e5436536SAndroid Build Coastguard Worker 293*e5436536SAndroid Build Coastguard Worker /** 294*e5436536SAndroid Build Coastguard Worker * \brief Limit given bit rate to a valid value 295*e5436536SAndroid Build Coastguard Worker * \param hTpEnc transport encoder handle 296*e5436536SAndroid Build Coastguard Worker * \param aot audio object type 297*e5436536SAndroid Build Coastguard Worker * \param coreSamplingRate the sample rate to be used for the AAC encoder 298*e5436536SAndroid Build Coastguard Worker * \param frameLength the frameLength to be used for the AAC encoder 299*e5436536SAndroid Build Coastguard Worker * \param nChannels number of total channels 300*e5436536SAndroid Build Coastguard Worker * \param nChannelsEff number of effective channels 301*e5436536SAndroid Build Coastguard Worker * \param bitRate the initial bit rate value for which the closest valid bit 302*e5436536SAndroid Build Coastguard Worker * rate value is searched for 303*e5436536SAndroid Build Coastguard Worker * \param averageBits average bits per frame for fixed framing. Set to -1 if not 304*e5436536SAndroid Build Coastguard Worker * available. 305*e5436536SAndroid Build Coastguard Worker * \param optional pointer where the current bits per frame are stored into. 306*e5436536SAndroid Build Coastguard Worker * \param bitrateMode the current bit rate mode 307*e5436536SAndroid Build Coastguard Worker * \param nSubFrames number of sub frames for super framing (not transport 308*e5436536SAndroid Build Coastguard Worker * frames). 309*e5436536SAndroid Build Coastguard Worker * \return a valid bit rate value as close as possible or identical to bitRate 310*e5436536SAndroid Build Coastguard Worker */ 311*e5436536SAndroid Build Coastguard Worker INT FDKaacEnc_LimitBitrate(HANDLE_TRANSPORTENC hTpEnc, AUDIO_OBJECT_TYPE aot, 312*e5436536SAndroid Build Coastguard Worker INT coreSamplingRate, INT frameLength, INT nChannels, 313*e5436536SAndroid Build Coastguard Worker INT nChannelsEff, INT bitRate, INT averageBits, 314*e5436536SAndroid Build Coastguard Worker INT *pAverageBitsPerFrame, 315*e5436536SAndroid Build Coastguard Worker AACENC_BITRATE_MODE bitrateMode, INT nSubFrames); 316*e5436536SAndroid Build Coastguard Worker 317*e5436536SAndroid Build Coastguard Worker /** 318*e5436536SAndroid Build Coastguard Worker * \brief Get current state of the bit reservoir 319*e5436536SAndroid Build Coastguard Worker * \param hAacEncoder encoder handle 320*e5436536SAndroid Build Coastguard Worker * \return bit reservoir state in bits 321*e5436536SAndroid Build Coastguard Worker */ 322*e5436536SAndroid Build Coastguard Worker INT FDKaacEnc_GetBitReservoirState(const HANDLE_AAC_ENC hAacEncoder); 323*e5436536SAndroid Build Coastguard Worker 324*e5436536SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------- 325*e5436536SAndroid Build Coastguard Worker 326*e5436536SAndroid Build Coastguard Worker functionname: FDKaacEnc_GetVBRBitrate 327*e5436536SAndroid Build Coastguard Worker description: Get VBR bitrate from vbr quality 328*e5436536SAndroid Build Coastguard Worker input params: int vbrQuality (VBR0, VBR1, VBR2) 329*e5436536SAndroid Build Coastguard Worker channelMode 330*e5436536SAndroid Build Coastguard Worker returns: vbr bitrate 331*e5436536SAndroid Build Coastguard Worker 332*e5436536SAndroid Build Coastguard Worker ------------------------------------------------------------------------------*/ 333*e5436536SAndroid Build Coastguard Worker INT FDKaacEnc_GetVBRBitrate(AACENC_BITRATE_MODE bitrateMode, 334*e5436536SAndroid Build Coastguard Worker CHANNEL_MODE channelMode); 335*e5436536SAndroid Build Coastguard Worker 336*e5436536SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------- 337*e5436536SAndroid Build Coastguard Worker 338*e5436536SAndroid Build Coastguard Worker functionname: FDKaacEnc_AdjustVBRBitrateMode 339*e5436536SAndroid Build Coastguard Worker description: Adjust bitrate mode to given bitrate parameter 340*e5436536SAndroid Build Coastguard Worker input params: int vbrQuality (VBR0, VBR1, VBR2) 341*e5436536SAndroid Build Coastguard Worker bitrate 342*e5436536SAndroid Build Coastguard Worker channelMode 343*e5436536SAndroid Build Coastguard Worker returns: vbr bitrate mode 344*e5436536SAndroid Build Coastguard Worker 345*e5436536SAndroid Build Coastguard Worker ------------------------------------------------------------------------------*/ 346*e5436536SAndroid Build Coastguard Worker AACENC_BITRATE_MODE FDKaacEnc_AdjustVBRBitrateMode( 347*e5436536SAndroid Build Coastguard Worker AACENC_BITRATE_MODE bitrateMode, INT bitrate, CHANNEL_MODE channelMode); 348*e5436536SAndroid Build Coastguard Worker 349*e5436536SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------- 350*e5436536SAndroid Build Coastguard Worker 351*e5436536SAndroid Build Coastguard Worker functionname: FDKaacEnc_AacInitDefaultConfig 352*e5436536SAndroid Build Coastguard Worker description: gives reasonable default configuration 353*e5436536SAndroid Build Coastguard Worker returns: --- 354*e5436536SAndroid Build Coastguard Worker 355*e5436536SAndroid Build Coastguard Worker ------------------------------------------------------------------------------*/ 356*e5436536SAndroid Build Coastguard Worker void FDKaacEnc_AacInitDefaultConfig(AACENC_CONFIG *config); 357*e5436536SAndroid Build Coastguard Worker 358*e5436536SAndroid Build Coastguard Worker /*--------------------------------------------------------------------------- 359*e5436536SAndroid Build Coastguard Worker 360*e5436536SAndroid Build Coastguard Worker functionname:FDKaacEnc_Open 361*e5436536SAndroid Build Coastguard Worker description: allocate and initialize a new encoder instance 362*e5436536SAndroid Build Coastguard Worker returns: 0 if success 363*e5436536SAndroid Build Coastguard Worker 364*e5436536SAndroid Build Coastguard Worker ---------------------------------------------------------------------------*/ 365*e5436536SAndroid Build Coastguard Worker AAC_ENCODER_ERROR FDKaacEnc_Open( 366*e5436536SAndroid Build Coastguard Worker HANDLE_AAC_ENC 367*e5436536SAndroid Build Coastguard Worker *phAacEnc, /* pointer to an encoder handle, initialized on return */ 368*e5436536SAndroid Build Coastguard Worker const INT nElements, /* number of maximal elements in instance to support */ 369*e5436536SAndroid Build Coastguard Worker const INT nChannels, /* number of maximal channels in instance to support */ 370*e5436536SAndroid Build Coastguard Worker const INT nSubFrames); /* support superframing in instance */ 371*e5436536SAndroid Build Coastguard Worker 372*e5436536SAndroid Build Coastguard Worker AAC_ENCODER_ERROR FDKaacEnc_Initialize( 373*e5436536SAndroid Build Coastguard Worker HANDLE_AAC_ENC 374*e5436536SAndroid Build Coastguard Worker hAacEncoder, /* pointer to an encoder handle, initialized on return */ 375*e5436536SAndroid Build Coastguard Worker AACENC_CONFIG *config, /* pre-initialized config struct */ 376*e5436536SAndroid Build Coastguard Worker HANDLE_TRANSPORTENC hTpEnc, ULONG initFlags); 377*e5436536SAndroid Build Coastguard Worker 378*e5436536SAndroid Build Coastguard Worker /*--------------------------------------------------------------------------- 379*e5436536SAndroid Build Coastguard Worker 380*e5436536SAndroid Build Coastguard Worker functionname: FDKaacEnc_EncodeFrame 381*e5436536SAndroid Build Coastguard Worker description: encode one frame 382*e5436536SAndroid Build Coastguard Worker returns: 0 if success 383*e5436536SAndroid Build Coastguard Worker 384*e5436536SAndroid Build Coastguard Worker ---------------------------------------------------------------------------*/ 385*e5436536SAndroid Build Coastguard Worker 386*e5436536SAndroid Build Coastguard Worker AAC_ENCODER_ERROR FDKaacEnc_EncodeFrame( 387*e5436536SAndroid Build Coastguard Worker HANDLE_AAC_ENC hAacEnc, /* encoder handle */ 388*e5436536SAndroid Build Coastguard Worker HANDLE_TRANSPORTENC hTpEnc, INT_PCM *inputBuffer, 389*e5436536SAndroid Build Coastguard Worker const UINT inputBufferBufSize, INT *numOutBytes, 390*e5436536SAndroid Build Coastguard Worker AACENC_EXT_PAYLOAD extPayload[MAX_TOTAL_EXT_PAYLOADS]); 391*e5436536SAndroid Build Coastguard Worker 392*e5436536SAndroid Build Coastguard Worker /*--------------------------------------------------------------------------- 393*e5436536SAndroid Build Coastguard Worker 394*e5436536SAndroid Build Coastguard Worker functionname:FDKaacEnc_Close 395*e5436536SAndroid Build Coastguard Worker description: delete encoder instance 396*e5436536SAndroid Build Coastguard Worker returns: 397*e5436536SAndroid Build Coastguard Worker 398*e5436536SAndroid Build Coastguard Worker ---------------------------------------------------------------------------*/ 399*e5436536SAndroid Build Coastguard Worker 400*e5436536SAndroid Build Coastguard Worker void FDKaacEnc_Close(HANDLE_AAC_ENC *phAacEnc); /* encoder handle */ 401*e5436536SAndroid Build Coastguard Worker 402*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus 403*e5436536SAndroid Build Coastguard Worker } 404*e5436536SAndroid Build Coastguard Worker #endif 405*e5436536SAndroid Build Coastguard Worker 406*e5436536SAndroid Build Coastguard Worker #endif /* AACENC_H */ 407