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