Home | History | Annotate | Download | only in src
      1 /* -----------------------------------------------------------------------------
      2 Software License for The Fraunhofer FDK AAC Codec Library for Android
      3 
      4  Copyright  1995 - 2018 Fraunhofer-Gesellschaft zur Frderung 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 (at) 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