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 General tonality correction detector module. 106 */ 107 #ifndef TON_CORR_H 108 #define TON_CORR_H 109 110 #include "sbr_encoder.h" 111 #include "mh_det.h" 112 #include "nf_est.h" 113 #include "invf_est.h" 114 115 #define MAX_NUM_PATCHES 6 116 #define SCALE_NRGVEC 4 117 118 /** parameter set for one single patch */ 119 typedef struct { 120 INT sourceStartBand; /*!< first band in lowbands where to take the samples 121 from */ 122 INT sourceStopBand; /*!< first band in lowbands which is not included in the 123 patch anymore */ 124 INT guardStartBand; /*!< first band in highbands to be filled with zeros in 125 order to reduce interferences between patches */ 126 INT targetStartBand; /*!< first band in highbands to be filled with whitened 127 lowband signal */ 128 INT targetBandOffs; /*!< difference between 'startTargetBand' and 129 'startSourceBand' */ 130 INT numBandsInPatch; /*!< number of consecutive bands in this one patch */ 131 } PATCH_PARAM; 132 133 typedef struct { 134 INT switchInverseFilt; /*!< Flag to enable dynamic adaption of invf. detection 135 */ 136 INT noQmfChannels; 137 INT bufferLength; /*!< Length of the r and i buffers. */ 138 INT stepSize; /*!< Stride for the lpc estimate. */ 139 INT numberOfEstimates; /*!< The total number of estiamtes, available in the 140 quotaMatrix.*/ 141 UINT numberOfEstimatesPerFrame; /*!< The number of estimates per frame 142 available in the quotaMatrix.*/ 143 INT lpcLength[2]; /*!< Segment length used for second order LPC analysis.*/ 144 INT nextSample; /*!< Where to start the LPC analysis of the current frame.*/ 145 INT move; /*!< How many estimates to move in the quotaMatrix, when buffering. 146 */ 147 INT frameStartIndex; /*!< The start index for the current frame in the r and i 148 buffers. */ 149 INT startIndexMatrix; /*!< The start index for the current frame in the 150 quotaMatrix. */ 151 INT frameStartIndexInvfEst; /*!< The start index of the inverse filtering, not 152 the same as the others, dependent on what 153 decoder is used (buffer opt, or no buffer opt). 154 */ 155 INT prevTransientFlag; /*!< The transisent flag (from the transient detector) 156 for the previous frame. */ 157 INT transientNextFrame; /*!< Flag to indicate that the transient will show up 158 in the next frame. */ 159 INT transientPosOffset; /*!< An offset value to match the transient pos as 160 calculated by the transient detector with the 161 actual position in the frame.*/ 162 163 INT* signMatrix[MAX_NO_OF_ESTIMATES]; /*!< Matrix holding the sign of each 164 channe, i.e. indicating in what part 165 of a QMF channel a possible sine is. 166 */ 167 168 FIXP_DBL* quotaMatrix[MAX_NO_OF_ESTIMATES]; /*!< Matrix holding the quota 169 values for all estimates, all 170 channels. */ 171 172 FIXP_DBL nrgVector[MAX_NO_OF_ESTIMATES]; /*!< Vector holding the averaged 173 energies for every QMF band. */ 174 FIXP_DBL nrgVectorFreq[64]; /*!< Vector holding the averaged energies for 175 every QMF channel */ 176 177 SCHAR indexVector[64]; /*!< Index vector poINTing to the correct lowband 178 channel, when indexing a highband channel, -1 179 represents a guard band */ 180 PATCH_PARAM 181 patchParam[MAX_NUM_PATCHES]; /*!< new parameter set for patching */ 182 INT guard; /*!< number of guardbands between every patch */ 183 INT shiftStartSb; /*!< lowest subband of source range to be included in the 184 patches */ 185 INT noOfPatches; /*!< number of patches */ 186 187 SBR_MISSING_HARMONICS_DETECTOR 188 sbrMissingHarmonicsDetector; /*!< SBR_MISSING_HARMONICS_DETECTOR struct. 189 */ 190 SBR_NOISE_FLOOR_ESTIMATE 191 sbrNoiseFloorEstimate; /*!< SBR_NOISE_FLOOR_ESTIMATE struct. */ 192 SBR_INV_FILT_EST sbrInvFilt; /*!< SBR_INV_FILT_EST struct. */ 193 } SBR_TON_CORR_EST; 194 195 typedef SBR_TON_CORR_EST* HANDLE_SBR_TON_CORR_EST; 196 197 void FDKsbrEnc_TonCorrParamExtr( 198 HANDLE_SBR_TON_CORR_EST hTonCorr, /*!< Handle to SBR_TON_CORR struct. */ 199 INVF_MODE* infVec, /*!< Vector where the inverse filtering levels will be 200 stored. */ 201 FIXP_DBL* noiseLevels, /*!< Vector where the noise levels will be stored. */ 202 INT* missingHarmonicFlag, /*!< Flag set to one or zero, dependent on if any 203 strong sines are missing.*/ 204 UCHAR* missingHarmonicsIndex, /*!< Vector indicating where sines are 205 missing. */ 206 UCHAR* envelopeCompensation, /*!< Vector to store compensation values for 207 the energies in. */ 208 const SBR_FRAME_INFO* frameInfo, /*!< Frame info struct, contains the time 209 and frequency grid of the current 210 frame.*/ 211 UCHAR* transientInfo, /*!< Transient info.*/ 212 UCHAR* freqBandTable, /*!< Frequency band tables for high-res.*/ 213 INT nSfb, /*!< Number of scalefactor bands for high-res. */ 214 XPOS_MODE xposType, /*!< Type of transposer used in the decoder.*/ 215 UINT sbrSyntaxFlags); 216 217 INT FDKsbrEnc_CreateTonCorrParamExtr( 218 HANDLE_SBR_TON_CORR_EST 219 hTonCorr, /*!< Pointer to handle to SBR_TON_CORR struct. */ 220 INT chan); /*!< Channel index, needed for mem allocation */ 221 222 INT FDKsbrEnc_InitTonCorrParamExtr( 223 INT frameSize, /*!< Current SBR frame size. */ 224 HANDLE_SBR_TON_CORR_EST 225 hTonCorr, /*!< Pointer to handle to SBR_TON_CORR struct. */ 226 HANDLE_SBR_CONFIG_DATA 227 sbrCfg, /*!< Pointer to SBR configuration parameters. */ 228 INT timeSlots, /*!< Number of time-slots per frame */ 229 INT xposCtrl, /*!< Different patch modes. */ 230 INT ana_max_level, /*!< Maximum level of the adaptive noise. */ 231 INT noiseBands, /*!< Number of noise bands per octave. */ 232 INT noiseFloorOffset, /*!< Noise floor offset. */ 233 UINT useSpeechConfig /*!< Speech or music tuning. */ 234 ); 235 236 void FDKsbrEnc_DeleteTonCorrParamExtr( 237 HANDLE_SBR_TON_CORR_EST hTonCorr); /*!< Handle to SBR_TON_CORR struct. */ 238 239 void FDKsbrEnc_CalculateTonalityQuotas( 240 HANDLE_SBR_TON_CORR_EST hTonCorr, FIXP_DBL** sourceBufferReal, 241 FIXP_DBL** sourceBufferImag, INT usb, 242 INT qmfScale /*!< sclefactor of QMF subsamples */ 243 ); 244 245 INT FDKsbrEnc_ResetTonCorrParamExtr( 246 HANDLE_SBR_TON_CORR_EST hTonCorr, /*!< Handle to SBR_TON_CORR struct. */ 247 INT xposctrl, /*!< Different patch modes. */ 248 INT highBandStartSb, /*!< Start band of the SBR range. */ 249 UCHAR* v_k_master, /*!< Master frequency table from which all other table 250 are derived.*/ 251 INT numMaster, /*!< Number of elements in the master table. */ 252 INT fs, /*!< Sampling frequency (of the SBR part). */ 253 UCHAR** 254 freqBandTable, /*!< Frequency band table for low-res and high-res. */ 255 INT* nSfb, /*!< Number of frequency bands (hig-res and low-res). */ 256 INT noQmfChannels /*!< Number of QMF channels. */ 257 ); 258 #endif 259