16cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK/* -----------------------------------------------------------------------------
26cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKSoftware License for The Fraunhofer FDK AAC Codec Library for Android
36cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
46cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK© Copyright  1995 - 2018 Fraunhofer-Gesellschaft zur Förderung der angewandten
56cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKForschung e.V. All rights reserved.
66cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
76cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 1.    INTRODUCTION
86cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKThe Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software
96cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKthat implements the MPEG Advanced Audio Coding ("AAC") encoding and decoding
106cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKscheme for digital audio. This FDK AAC Codec software is intended to be used on
116cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKa wide variety of Android devices.
126cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
136cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKAAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient
146cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKgeneral perceptual audio codecs. AAC-ELD is considered the best-performing
156cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKfull-bandwidth communications codec by independent studies and is widely
166cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKdeployed. AAC has been standardized by ISO and IEC as part of the MPEG
176cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKspecifications.
186cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
196cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKPatent licenses for necessary patent claims for the FDK AAC Codec (including
206cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKthose of Fraunhofer) may be obtained through Via Licensing
216cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK(www.vialicensing.com) or through the respective patent owners individually for
226cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKthe purpose of encoding or decoding bit streams in products that are compliant
236cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKwith the ISO/IEC MPEG audio standards. Please note that most manufacturers of
246cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKAndroid devices already license these patent claims through Via Licensing or
256cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKdirectly from the patent owners, and therefore FDK AAC Codec software may
266cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKalready be covered under those patent licenses when it is used for those
276cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKlicensed purposes only.
286cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
296cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKCommercially-licensed AAC software libraries, including floating-point versions
306cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKwith enhanced sound quality, are also available from Fraunhofer. Users are
316cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKencouraged to check the Fraunhofer website for additional applications
326cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKinformation and documentation.
336cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
346cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK2.    COPYRIGHT LICENSE
356cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
366cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKRedistribution and use in source and binary forms, with or without modification,
376cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKare permitted without payment of copyright license fees provided that you
386cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKsatisfy the following conditions:
396cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
406cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKYou must retain the complete text of this software license in redistributions of
416cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKthe FDK AAC Codec or your modifications thereto in source code form.
426cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
436cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKYou must retain the complete text of this software license in the documentation
446cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKand/or other materials provided with redistributions of the FDK AAC Codec or
456cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKyour modifications thereto in binary form. You must make available free of
466cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKcharge copies of the complete source code of the FDK AAC Codec and your
476cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKmodifications thereto to recipients of copies in binary form.
486cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
496cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKThe name of Fraunhofer may not be used to endorse or promote products derived
506cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKfrom this library without prior written permission.
516cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
526cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKYou may not charge copyright license fees for anyone to use, copy or distribute
536cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKthe FDK AAC Codec software or your modifications thereto.
546cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
556cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKYour modified versions of the FDK AAC Codec must carry prominent notices stating
566cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKthat you changed the software and the date of any change. For modified versions
576cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKof the FDK AAC Codec, the term "Fraunhofer FDK AAC Codec Library for Android"
586cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKmust be replaced by the term "Third-Party Modified Version of the Fraunhofer FDK
596cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKAAC Codec Library for Android."
606cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
616cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK3.    NO PATENT LICENSE
626cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
636cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKNO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without
646cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKlimitation the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE.
656cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKFraunhofer provides no warranty of patent non-infringement with respect to this
666cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKsoftware.
676cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
686cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKYou may use this FDK AAC Codec software or modifications thereto only for
696cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKpurposes that are authorized by appropriate patent licenses.
706cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
716cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK4.    DISCLAIMER
726cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
736cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKThis FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright
746cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKholders and contributors "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
756cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKincluding but not limited to the implied warranties of merchantability and
766cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKfitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
776cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKCONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary,
786cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKor consequential damages, including but not limited to procurement of substitute
796cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKgoods or services; loss of use, data, or profits, or business interruption,
806cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKhowever caused and on any theory of liability, whether in contract, strict
816cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKliability, or tort (including negligence), arising in any way out of the use of
826cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKthis software, even if advised of the possibility of such damage.
836cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
846cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK5.    CONTACT INFORMATION
856cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
866cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKFraunhofer Institute for Integrated Circuits IIS
876cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKAttention: Audio and Multimedia Departments - FDK AAC LL
886cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKAm Wolfsmantel 33
896cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK91058 Erlangen, Germany
906cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
916cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKwww.iis.fraunhofer.de/amm
926cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKamm-info@iis.fraunhofer.de
936cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK----------------------------------------------------------------------------- */
946cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
956cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK/******************* Library for basic calculation routines ********************
966cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
976cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK   Author(s):
986cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
996cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK   Description: ARM scaling operations
1006cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1016cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK*******************************************************************************/
1026cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1036cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#if !defined(SCALE_ARM_H)
1046cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define SCALE_ARM_H
1056cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1066cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#if defined(__GNUC__) /* GCC Compiler */
1076cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1086cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#if defined(__ARM_ARCH_6__)
1096cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1106cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKinline static INT shiftRightSat(INT src, int scale) {
1116cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK  INT result;
1126cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK  asm("ssat %0,%2,%0;\n"
1136cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1146cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK      : "=&r"(result)
1156cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK      : "r"(src >> scale), "M"(SAMPLE_BITS));
1166cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1176cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK  return result;
1186cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK}
1196cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1206cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define SATURATE_INT_PCM_RIGHT_SHIFT(src, scale) shiftRightSat(src, scale)
1216cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1226cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKinline static INT shiftLeftSat(INT src, int scale) {
1236cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK  INT result;
1246cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK  asm("ssat %0,%2,%0;\n"
1256cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1266cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK      : "=&r"(result)
1276cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK      : "r"(src << scale), "M"(SAMPLE_BITS));
1286cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1296cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK  return result;
1306cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK}
1316cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1326cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define SATURATE_INT_PCM_LEFT_SHIFT(src, scale) shiftLeftSat(src, scale)
1336cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1346cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#endif /* __ARM_ARCH_6__ */
1356cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1366cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#endif /* compiler selection */
1376cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1386cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define FUNCTION_scaleValueInPlace
1396cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#ifdef FUNCTION_scaleValueInPlace
1406cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKinline void scaleValueInPlace(FIXP_DBL *value, /*!< Value */
1416cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK                              INT scalefactor  /*!< Scalefactor */
1426cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK) {
1436cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK  INT newscale;
1446cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK  if ((newscale = scalefactor) >= 0)
1456cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK    *value <<= newscale;
1466cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK  else
1476cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK    *value >>= -newscale;
1486cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK}
1496cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#endif /* #ifdef FUNCTION_scaleValueInPlace */
1506cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1516cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define SATURATE_RIGHT_SHIFT(src, scale, dBits)                                \
1526cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK  ((((LONG)(src) ^ ((LONG)(src) >> (DFRACT_BITS - 1))) >> (scale)) >           \
1536cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK   (LONG)(((1U) << ((dBits)-1)) - 1))                                          \
1546cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK      ? ((LONG)(src) >> (DFRACT_BITS - 1)) ^ (LONG)(((1U) << ((dBits)-1)) - 1) \
1556cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK      : ((LONG)(src) >> (scale))
1566cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1576cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define SATURATE_LEFT_SHIFT(src, scale, dBits)                                 \
1586cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK  (((LONG)(src) ^ ((LONG)(src) >> (DFRACT_BITS - 1))) >                        \
1596cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK   ((LONG)(((1U) << ((dBits)-1)) - 1) >> (scale)))                             \
1606cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK      ? ((LONG)(src) >> (DFRACT_BITS - 1)) ^ (LONG)(((1U) << ((dBits)-1)) - 1) \
1616cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK      : ((LONG)(src) << (scale))
1626cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK
1636cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#endif /* !defined(SCALE_ARM_H) */
164