1 /* ----------------------------------------------------------------------------- 2 Software License for The Fraunhofer FDK AAC Codec Library for Android 3 4 © Copyright 1995 - 2018 Fraunhofer-Gesellschaft zur Förderung der angewandten 5 Forschung e.V. All rights reserved. 6 7 1. INTRODUCTION 8 The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software 9 that implements the MPEG Advanced Audio Coding ("AAC") encoding and decoding 10 scheme for digital audio. This FDK AAC Codec software is intended to be used on 11 a wide variety of Android devices. 12 13 AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient 14 general perceptual audio codecs. AAC-ELD is considered the best-performing 15 full-bandwidth communications codec by independent studies and is widely 16 deployed. AAC has been standardized by ISO and IEC as part of the MPEG 17 specifications. 18 19 Patent licenses for necessary patent claims for the FDK AAC Codec (including 20 those of Fraunhofer) may be obtained through Via Licensing 21 (www.vialicensing.com) or through the respective patent owners individually for 22 the purpose of encoding or decoding bit streams in products that are compliant 23 with the ISO/IEC MPEG audio standards. Please note that most manufacturers of 24 Android devices already license these patent claims through Via Licensing or 25 directly from the patent owners, and therefore FDK AAC Codec software may 26 already be covered under those patent licenses when it is used for those 27 licensed purposes only. 28 29 Commercially-licensed AAC software libraries, including floating-point versions 30 with enhanced sound quality, are also available from Fraunhofer. Users are 31 encouraged to check the Fraunhofer website for additional applications 32 information and documentation. 33 34 2. COPYRIGHT LICENSE 35 36 Redistribution and use in source and binary forms, with or without modification, 37 are permitted without payment of copyright license fees provided that you 38 satisfy the following conditions: 39 40 You must retain the complete text of this software license in redistributions of 41 the FDK AAC Codec or your modifications thereto in source code form. 42 43 You must retain the complete text of this software license in the documentation 44 and/or other materials provided with redistributions of the FDK AAC Codec or 45 your modifications thereto in binary form. You must make available free of 46 charge copies of the complete source code of the FDK AAC Codec and your 47 modifications thereto to recipients of copies in binary form. 48 49 The name of Fraunhofer may not be used to endorse or promote products derived 50 from this library without prior written permission. 51 52 You may not charge copyright license fees for anyone to use, copy or distribute 53 the FDK AAC Codec software or your modifications thereto. 54 55 Your modified versions of the FDK AAC Codec must carry prominent notices stating 56 that you changed the software and the date of any change. For modified versions 57 of the FDK AAC Codec, the term "Fraunhofer FDK AAC Codec Library for Android" 58 must be replaced by the term "Third-Party Modified Version of the Fraunhofer FDK 59 AAC Codec Library for Android." 60 61 3. NO PATENT LICENSE 62 63 NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without 64 limitation the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE. 65 Fraunhofer provides no warranty of patent non-infringement with respect to this 66 software. 67 68 You may use this FDK AAC Codec software or modifications thereto only for 69 purposes that are authorized by appropriate patent licenses. 70 71 4. DISCLAIMER 72 73 This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright 74 holders and contributors "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, 75 including but not limited to the implied warranties of merchantability and 76 fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 77 CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, 78 or consequential damages, including but not limited to procurement of substitute 79 goods or services; loss of use, data, or profits, or business interruption, 80 however caused and on any theory of liability, whether in contract, strict 81 liability, or tort (including negligence), arising in any way out of the use of 82 this software, even if advised of the possibility of such damage. 83 84 5. CONTACT INFORMATION 85 86 Fraunhofer Institute for Integrated Circuits IIS 87 Attention: Audio and Multimedia Departments - FDK AAC LL 88 Am Wolfsmantel 33 89 91058 Erlangen, Germany 90 91 www.iis.fraunhofer.de/amm 92 amm-info@iis.fraunhofer.de 93 ----------------------------------------------------------------------------- */ 94 95 /**************************** SBR encoder library ****************************** 96 97 Author(s): 98 99 Description: 100 101 *******************************************************************************/ 102 103 /*! 104 \file 105 \brief SBR bit writing $Revision: 92790 $ 106 */ 107 #ifndef BIT_SBR_H 108 #define BIT_SBR_H 109 110 #include "sbr_def.h" 111 #include "cmondata.h" 112 #include "fram_gen.h" 113 114 struct SBR_ENV_DATA; 115 116 struct SBR_BITSTREAM_DATA { 117 INT TotalBits; 118 INT PayloadBits; 119 INT FillBits; 120 INT HeaderActive; 121 INT HeaderActiveDelay; /**< sbr payload and its header is delayed depending on 122 encoder configuration*/ 123 INT NrSendHeaderData; /**< input from commandline */ 124 INT CountSendHeaderData; /**< modulo count. If < 0 then no counting is done 125 (no SBR headers) */ 126 INT rightBorderFIX; /**< force VARFIX or FIXFIX frames */ 127 }; 128 129 typedef struct SBR_BITSTREAM_DATA *HANDLE_SBR_BITSTREAM_DATA; 130 131 struct SBR_HEADER_DATA { 132 AMP_RES sbr_amp_res; 133 INT sbr_start_frequency; 134 INT sbr_stop_frequency; 135 INT sbr_xover_band; 136 INT sbr_noise_bands; 137 INT sbr_data_extra; 138 INT header_extra_1; 139 INT header_extra_2; 140 INT sbr_lc_stereo_mode; 141 INT sbr_limiter_bands; 142 INT sbr_limiter_gains; 143 INT sbr_interpol_freq; 144 INT sbr_smoothing_length; 145 INT alterScale; 146 INT freqScale; 147 148 /* 149 element of channelpairelement 150 */ 151 INT coupling; 152 INT prev_coupling; 153 154 /* 155 element of singlechannelelement 156 */ 157 }; 158 typedef struct SBR_HEADER_DATA *HANDLE_SBR_HEADER_DATA; 159 160 struct SBR_ENV_DATA { 161 INT sbr_xpos_ctrl; 162 FREQ_RES freq_res_fixfix[2]; 163 UCHAR fResTransIsLow; 164 165 INVF_MODE sbr_invf_mode; 166 INVF_MODE sbr_invf_mode_vec[MAX_NUM_NOISE_VALUES]; 167 168 XPOS_MODE sbr_xpos_mode; 169 170 INT ienvelope[MAX_ENVELOPES][MAX_FREQ_COEFFS]; 171 172 INT codeBookScfLavBalance; 173 INT codeBookScfLav; 174 const INT *hufftableTimeC; 175 const INT *hufftableFreqC; 176 const UCHAR *hufftableTimeL; 177 const UCHAR *hufftableFreqL; 178 179 const INT *hufftableLevelTimeC; 180 const INT *hufftableBalanceTimeC; 181 const INT *hufftableLevelFreqC; 182 const INT *hufftableBalanceFreqC; 183 const UCHAR *hufftableLevelTimeL; 184 const UCHAR *hufftableBalanceTimeL; 185 const UCHAR *hufftableLevelFreqL; 186 const UCHAR *hufftableBalanceFreqL; 187 188 const UCHAR *hufftableNoiseTimeL; 189 const INT *hufftableNoiseTimeC; 190 const UCHAR *hufftableNoiseFreqL; 191 const INT *hufftableNoiseFreqC; 192 193 const UCHAR *hufftableNoiseLevelTimeL; 194 const INT *hufftableNoiseLevelTimeC; 195 const UCHAR *hufftableNoiseBalanceTimeL; 196 const INT *hufftableNoiseBalanceTimeC; 197 const UCHAR *hufftableNoiseLevelFreqL; 198 const INT *hufftableNoiseLevelFreqC; 199 const UCHAR *hufftableNoiseBalanceFreqL; 200 const INT *hufftableNoiseBalanceFreqC; 201 202 HANDLE_SBR_GRID hSbrBSGrid; 203 204 INT noHarmonics; 205 INT addHarmonicFlag; 206 UCHAR addHarmonic[MAX_FREQ_COEFFS]; 207 208 /* calculated helper vars */ 209 INT si_sbr_start_env_bits_balance; 210 INT si_sbr_start_env_bits; 211 INT si_sbr_start_noise_bits_balance; 212 INT si_sbr_start_noise_bits; 213 214 INT noOfEnvelopes; 215 INT noScfBands[MAX_ENVELOPES]; 216 INT domain_vec[MAX_ENVELOPES]; 217 INT domain_vec_noise[MAX_ENVELOPES]; 218 SCHAR sbr_noise_levels[MAX_FREQ_COEFFS]; 219 INT noOfnoisebands; 220 221 INT balance; 222 AMP_RES init_sbr_amp_res; 223 AMP_RES currentAmpResFF; 224 FIXP_DBL 225 ton_HF[SBR_GLOBAL_TONALITY_VALUES]; /* tonality is scaled by 226 2^19/0.524288f (fract part of 227 RELAXATION) */ 228 FIXP_DBL global_tonality; 229 230 /* extended data */ 231 INT extended_data; 232 INT extension_size; 233 INT extension_id; 234 UCHAR extended_data_buffer[SBR_EXTENDED_DATA_MAX_CNT]; 235 236 UCHAR ldGrid; 237 }; 238 typedef struct SBR_ENV_DATA *HANDLE_SBR_ENV_DATA; 239 240 INT FDKsbrEnc_WriteEnvSingleChannelElement( 241 struct SBR_HEADER_DATA *sbrHeaderData, 242 struct T_PARAMETRIC_STEREO *hParametricStereo, 243 struct SBR_BITSTREAM_DATA *sbrBitstreamData, 244 struct SBR_ENV_DATA *sbrEnvData, struct COMMON_DATA *cmonData, 245 UINT sbrSyntaxFlags); 246 247 INT FDKsbrEnc_WriteEnvChannelPairElement( 248 struct SBR_HEADER_DATA *sbrHeaderData, 249 struct T_PARAMETRIC_STEREO *hParametricStereo, 250 struct SBR_BITSTREAM_DATA *sbrBitstreamData, 251 struct SBR_ENV_DATA *sbrEnvDataLeft, struct SBR_ENV_DATA *sbrEnvDataRight, 252 struct COMMON_DATA *cmonData, UINT sbrSyntaxFlags); 253 254 INT FDKsbrEnc_CountSbrChannelPairElement( 255 struct SBR_HEADER_DATA *sbrHeaderData, 256 struct T_PARAMETRIC_STEREO *hParametricStereo, 257 struct SBR_BITSTREAM_DATA *sbrBitstreamData, 258 struct SBR_ENV_DATA *sbrEnvDataLeft, struct SBR_ENV_DATA *sbrEnvDataRight, 259 struct COMMON_DATA *cmonData, UINT sbrSyntaxFlags); 260 261 /* debugging and tuning functions */ 262 263 /*#define SBR_ENV_STATISTICS */ 264 265 /*#define SBR_PAYLOAD_MONITOR*/ 266 267 #endif 268