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 /**************************** AAC decoder library ******************************
     96 
     97    Author(s):   Christian Griebel
     98 
     99    Description: Dynamic range control (DRC) global data types
    100 
    101 *******************************************************************************/
    102 
    103 #ifndef AACDEC_DRC_TYPES_H
    104 #define AACDEC_DRC_TYPES_H
    105 
    106 #include "common_fix.h"
    107 
    108 #define MAX_DRC_THREADS \
    109   ((8) + 1) /* Heavy compression value is handled just like MPEG DRC data */
    110 #define MAX_DRC_BANDS (16) /* 2^LEN_DRC_BAND_INCR (LEN_DRC_BAND_INCR = 4) */
    111 
    112 /**
    113  * \brief DRC module global data types
    114  */
    115 typedef enum {
    116   UNKNOWN_PAYLOAD = 0,
    117   MPEG_DRC_EXT_DATA = 1,
    118   DVB_DRC_ANC_DATA = 2
    119 
    120 } AACDEC_DRC_PAYLOAD_TYPE;
    121 
    122 /**
    123  * \brief Options for parameter handling / presentation mode
    124  */
    125 typedef enum {
    126   DISABLED_PARAMETER_HANDLING = -1, /*!< DRC parameter handling disabled, all
    127                                        parameters are applied as requested. */
    128   ENABLED_PARAMETER_HANDLING =
    129       0, /*!< Apply changes to requested DRC parameters to prevent clipping */
    130   DRC_PRESENTATION_MODE_1 = 1, /*!< DRC Presentation mode 1*/
    131   DRC_PRESENTATION_MODE_2 = 2  /*!< DRC Presentation mode 2*/
    132 
    133 } AACDEC_DRC_PARAMETER_HANDLING;
    134 
    135 typedef struct {
    136   UINT expiryCount;
    137   UINT numBands;
    138   USHORT bandTop[MAX_DRC_BANDS];
    139   SHORT drcInterpolationScheme;
    140   UCHAR drcValue[MAX_DRC_BANDS];
    141   SCHAR drcDataType;
    142 
    143 } CDrcChannelData;
    144 
    145 typedef struct {
    146   UINT excludedChnsMask;
    147   SCHAR progRefLevel;
    148   SCHAR presMode; /* Presentation mode: 0 (not indicated), 1, 2, and 3
    149                      (reserved). */
    150   SCHAR pceInstanceTag;
    151 
    152   CDrcChannelData channelData;
    153 
    154 } CDrcPayload;
    155 
    156 typedef struct {
    157   /* DRC parameters: Latest user requests */
    158   FIXP_DBL usrCut;
    159   FIXP_DBL usrBoost;
    160   UCHAR usrApplyHeavyCompression;
    161 
    162   /* DRC parameters: Currently used, possibly changed by
    163    * aacDecoder_drcParameterHandling */
    164   FIXP_DBL cut;         /* attenuation scale factor */
    165   FIXP_DBL boost;       /* boost scale factor  */
    166   SCHAR targetRefLevel; /* target reference level for loudness normalization */
    167   UCHAR applyHeavyCompression; /* heavy compression (DVB) flag */
    168 
    169   UINT expiryFrame;
    170   UCHAR bsDelayEnable;
    171   UCHAR applyDigitalNorm;
    172 
    173   AACDEC_DRC_PARAMETER_HANDLING defaultPresentationMode;
    174   UCHAR encoderTargetLevel;
    175 
    176 } CDrcParams;
    177 
    178 typedef struct {
    179   CDrcParams
    180       params; /* Module parameters that can be set by user (via SetParam API
    181                  function) */
    182 
    183   UCHAR enable;      /* Switch that controls dynamic range processing */
    184   UCHAR digitalNorm; /* Switch to en-/disable reference level normalization in
    185                         digital domain */
    186 
    187   UCHAR update; /* Flag indicating the change of a user or bitstream parameter
    188                    which affects aacDecoder_drcParameterHandling */
    189   INT numOutChannels;     /* Number of output channels */
    190   INT prevAacNumChannels; /* Previous number of channels of aac bitstream, used
    191                              for update flag */
    192 
    193   USHORT numPayloads; /* The number of DRC data payload elements found within
    194                          frame */
    195   USHORT
    196   numThreads;         /* The number of DRC data threads extracted from the found
    197                          payload elements */
    198   SCHAR progRefLevel; /* Program reference level for all channels */
    199   UCHAR progRefLevelPresent; /* Program reference level found in bitstream */
    200 
    201   UINT prlExpiryCount; /* Counter that can be used to monitor the life time of
    202                           the program reference level. */
    203 
    204   SCHAR presMode; /* Presentation mode as defined in ETSI TS 101 154 */
    205   UCHAR dvbAncDataAvailable; /* Flag that indicates whether DVB ancillary data
    206                                 is present or not */
    207   UINT dvbAncDataPosition;   /* Used to store the DVB ancillary data payload
    208                                 position in the bitstream (only one per frame) */
    209   UINT drcPayloadPosition[MAX_DRC_THREADS]; /* Used to store the DRC payload
    210                                                positions in the bitstream */
    211 
    212   UCHAR
    213   uniDrcPrecedence; /* Flag for signalling that uniDrc is active and takes
    214                        precedence over legacy DRC */
    215 
    216 } CDrcInfo;
    217 
    218 typedef CDrcInfo *HANDLE_AAC_DRC;
    219 
    220 #endif /* AACDEC_DRC_TYPES_H */
    221