16cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK/* ----------------------------------------------------------------------------- 22228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectSoftware License for The Fraunhofer FDK AAC Codec Library for Android 32228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 46cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK© Copyright 1995 - 2018 Fraunhofer-Gesellschaft zur Förderung der angewandten 56cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKForschung e.V. All rights reserved. 62228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 72228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 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. 332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project2. COPYRIGHT LICENSE 352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 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: 392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 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. 422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 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 472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectmodifications thereto to recipients of copies in binary form. 482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 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. 512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 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. 542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 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." 602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project3. NO PATENT LICENSE 622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 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. 672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 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. 702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project4. DISCLAIMER 722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 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. 832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project5. CONTACT INFORMATION 852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 862228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectFraunhofer Institute for Integrated Circuits IIS 872228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAttention: Audio and Multimedia Departments - FDK AAC LL 882228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAm Wolfsmantel 33 892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project91058 Erlangen, Germany 902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectwww.iis.fraunhofer.de/amm 922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectamm-info@iis.fraunhofer.de 936cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK----------------------------------------------------------------------------- */ 942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 956cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK/************************* System integration library ************************** 962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Author(s): 982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 996cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK Description: 1006cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 1016cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK*******************************************************************************/ 1022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** \file machine_type.h 1042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Type defines for various processors and compiler tools. 1052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1076cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#if !defined(MACHINE_TYPE_H) 1086cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define MACHINE_TYPE_H 1092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1106cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#include <stddef.h> /* Needed to define size_t */ 1112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1126cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#if defined(__ANDROID__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 4) && \ 1136cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK (__GNUC_GNU_INLINE__ == 1) 1146cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKtypedef unsigned long long uint64_t; 1156cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#include <sys/types.h> 1162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif 1172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1186cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK/* Library calling convention spec. __cdecl and friends might be added here as 1196cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * required. */ 1206cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define LINKSPEC_H 1216cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define LINKSPEC_CPP 1222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* for doxygen the following docu parts must be separated */ 1242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** \var SCHAR 1256cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Data type representing at least 1 byte signed integer on all supported 1266cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * platforms. 1272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** \var UCHAR 1296cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Data type representing at least 1 byte unsigned integer on all 1306cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * supported platforms. 1312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** \var INT 1336cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Data type representing at least 4 byte signed integer on all supported 1346cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * platforms. 1352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** \var UINT 1376cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Data type representing at least 4 byte unsigned integer on all 1386cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * supported platforms. 1392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** \var LONG 1416cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Data type representing 4 byte signed integer on all supported 1426cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * platforms. 1432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** \var ULONG 1456cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Data type representing 4 byte unsigned integer on all supported 1466cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * platforms. 1472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** \var SHORT 1496cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Data type representing 2 byte signed integer on all supported 1506cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * platforms. 1512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** \var USHORT 1536cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Data type representing 2 byte unsigned integer on all supported 1546cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * platforms. 1552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** \var INT64 1576cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Data type representing 8 byte signed integer on all supported 1586cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * platforms. 1592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** \var UINT64 1616cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Data type representing 8 byte unsigned integer on all supported 1626cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * platforms. 1632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** \def SHORT_BITS 1656cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Number of bits the data type short represents. sizeof() is not suited 1666cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * to get this info, because a byte is not always defined as 8 bits. 1672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** \def CHAR_BITS 1696cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Number of bits the data type char represents. sizeof() is not suited 1706cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * to get this info, because a byte is not always defined as 8 bits. 1712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** \var INT_PCM 1732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * Data type representing the width of input and output PCM samples. 1742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1766cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKtypedef signed int INT; 1776cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKtypedef unsigned int UINT; 178f2f96fb86d42396716b3e556da7a930956e712fbMarcus Oakland#ifdef __LP64__ 1796cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK/* force FDK long-datatypes to 4 byte */ 1806cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK/* Use defines to avoid type alias problems on 64 bit machines. */ 1816cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define LONG INT 1826cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define ULONG UINT 1836cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#else /* __LP64__ */ 1846cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKtypedef signed long LONG; 1856cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKtypedef unsigned long ULONG; 1866cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#endif /* __LP64__ */ 1876cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKtypedef signed short SHORT; 1886cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKtypedef unsigned short USHORT; 1896cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKtypedef signed char SCHAR; 1906cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKtypedef unsigned char UCHAR; 1916cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 1926cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define SHORT_BITS 16 1936cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define CHAR_BITS 8 1942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* Define 64 bit base integer type. */ 196577fcbb570d023be4cea9564292dd2bd95f40c3bJean-Michel Trivi#ifdef _MSC_VER 1976cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKtypedef __int64 INT64; 1986cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKtypedef unsigned __int64 UINT64; 1992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#else 2006cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKtypedef long long INT64; 2016cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKtypedef unsigned long long UINT64; 2022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif 2032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#ifndef NULL 2056cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#ifdef __cplusplus 2066cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define NULL 0 2076cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#else 2086cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define NULL ((void *)0) 2096cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#endif 2106cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#endif 2116cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 2126cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#if ((defined(__i686__) || defined(__i586__) || defined(__i386__) || \ 2136cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK defined(__x86_64__)) || \ 2146cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK (defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)))) && \ 2156cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK !defined(FDK_ASSERT_ENABLE) 2166cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define FDK_ASSERT_ENABLE 2172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif 2182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2196cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#if defined(FDK_ASSERT_ENABLE) 2206cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#include <assert.h> 2216cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define FDK_ASSERT(x) assert(x) 2222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#else 2236cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define FDK_ASSERT(ignore) 2242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif 2252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2266cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKtypedef SHORT INT_PCM; 2276cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define MAXVAL_PCM MAXVAL_SGL 2286cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define MINVAL_PCM MINVAL_SGL 2296cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define WAV_BITS 16 2306cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define SAMPLE_BITS 16 2316cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define SAMPLE_MAX ((INT_PCM)(((ULONG)1 << (SAMPLE_BITS - 1)) - 1)) 2326cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define SAMPLE_MIN (~SAMPLE_MAX) 2332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 2352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project* \def RAM_ALIGN 2362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project* Used to align memory as prefix before memory declaration. For example: 2372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \code 2382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project RAM_ALIGN 2392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int myArray[16]; 2402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \endcode 2412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2426cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK Note, that not all platforms support this mechanism. For example with TI 2436cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKcompilers a preprocessor pragma is used, but to do something like 2442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \code 2462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project #define RAM_ALIGN #pragma DATA_ALIGN(x) 2476cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK \endcode 2482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2496cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK would require the preprocessor to process this line twice to fully resolve 2506cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKit. Hence, a fully platform-independant way to use alignment is not supported. 2512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project* \def ALIGNMENT_DEFAULT 2532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project* Default alignment in bytes. 2542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*/ 2556cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 2566cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define ALIGNMENT_DEFAULT 8 2576cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 2586cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK/* RAM_ALIGN keyword causes memory alignment of global variables. */ 2596cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#if defined(_MSC_VER) 2606cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define RAM_ALIGN __declspec(align(ALIGNMENT_DEFAULT)) 2616cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#elif defined(__GNUC__) 2626cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define RAM_ALIGN __attribute__((aligned(ALIGNMENT_DEFAULT))) 2632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#else 2646cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define RAM_ALIGN 2652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif 2662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 2686cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * \def RESTRICT 2696cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * The restrict keyword is supported by some platforms and RESTRICT maps 2706cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * to either the corresponding keyword on each platform or to void if the 2716cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * compiler does not provide such feature. It tells the compiler that a 2726cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * pointer points to memory that does not overlap with other memories pointed to 2736cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * by other pointers. If this keyword is used and the assumption of no 2746cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * overlap is not true the resulting code might crash. 2756cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * 2766cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * \def WORD_ALIGNED(x) 2776cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Tells the compiler that pointer x is 16 bit aligned. It does not cause 2786cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * the address itself to be aligned, but serves as a hint to the optimizer. The 2796cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * alignment of the pointer must be guarranteed, if not the code might 2806cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * crash. 2816cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * 2826cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * \def DWORD_ALIGNED(x) 2836cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Tells the compiler that pointer x is 32 bit aligned. It does not cause 2846cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * the address itself to be aligned, but serves as a hint to the optimizer. The 2856cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * alignment of the pointer must be guarranteed, if not the code might 2866cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * crash. 2876cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * 2886cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK */ 2896cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define RESTRICT 2906cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define WORD_ALIGNED(x) C_ALLOC_ALIGNED_CHECK2((const void *)(x), 2); 2916cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define DWORD_ALIGNED(x) C_ALLOC_ALIGNED_CHECK2((const void *)(x), 4); 2922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*----------------------------------------------------------------------------------- 2942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * ALIGN_SIZE 2952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *-----------------------------------------------------------------------------------*/ 2962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 2972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief This macro aligns a given value depending on ::ALIGNMENT_DEFAULT. 2982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 2992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * For example if #ALIGNMENT_DEFAULT equals 8, then: 3002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * - ALIGN_SIZE(3) returns 8 3012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * - ALIGN_SIZE(8) returns 8 3022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * - ALIGN_SIZE(9) returns 16 3032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 3046cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define ALIGN_SIZE(a) \ 3056cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK ((a) + (((INT)ALIGNMENT_DEFAULT - ((size_t)(a) & (ALIGNMENT_DEFAULT - 1))) & \ 3066cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK (ALIGNMENT_DEFAULT - 1))) 3072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 3092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief This macro aligns a given address depending on ::ALIGNMENT_DEFAULT. 3102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 3116cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define ALIGN_PTR(a) \ 3126cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK ((void *)((unsigned char *)(a) + \ 3136cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK ((((INT)ALIGNMENT_DEFAULT - \ 3146cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK ((size_t)(a) & (ALIGNMENT_DEFAULT - 1))) & \ 3156cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK (ALIGNMENT_DEFAULT - 1))))) 3166cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 3176cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK/* Alignment macro for libSYS heap implementation */ 3186cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define ALIGNMENT_EXTRES (ALIGNMENT_DEFAULT) 3196cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define ALGN_SIZE_EXTRES(a) \ 3206cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK ((a) + (((INT)ALIGNMENT_EXTRES - ((INT)(a) & (ALIGNMENT_EXTRES - 1))) & \ 3216cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK (ALIGNMENT_EXTRES - 1))) 3222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 3246cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * \def FDK_FORCEINLINE 3256cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Sometimes compiler do not do what they are told to do, and in case of 3266cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * inlining some additional command might be necessary depending on the 3276cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * platform. 3282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 3292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \def FDK_INLINE 3302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * Defines how the compiler is told to inline stuff. 3312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 3326cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#ifndef FDK_FORCEINLINE 3336cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#if defined(__GNUC__) && !defined(__SDE_MIPS__) 3346cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define FDK_FORCEINLINE inline __attribute((always_inline)) 3352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#else 3366cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define FDK_FORCEINLINE inline 3372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif 3382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif 3392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3406cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define FDK_INLINE static inline 3412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 3432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \def LNK_SECTION_DATA_L1 3442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * The LNK_SECTION_* defines allow memory to be drawn from specific memory 3452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * sections. Used as prefix before variable declaration. 3462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 3472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \def LNK_SECTION_DATA_L2 3482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * See ::LNK_SECTION_DATA_L1 3492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \def LNK_SECTION_L1_DATA_A 3502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * See ::LNK_SECTION_DATA_L1 3512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \def LNK_SECTION_L1_DATA_B 3522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * See ::LNK_SECTION_DATA_L1 3532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \def LNK_SECTION_CONSTDATA_L1 3542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * See ::LNK_SECTION_DATA_L1 3552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \def LNK_SECTION_CONSTDATA 3562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * See ::LNK_SECTION_DATA_L1 3572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \def LNK_SECTION_CODE_L1 3582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * See ::LNK_SECTION_DATA_L1 3592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \def LNK_SECTION_CODE_L2 3602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * See ::LNK_SECTION_DATA_L1 3612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \def LNK_SECTION_INITCODE 3622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * See ::LNK_SECTION_DATA_L1 3632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 3642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/************************************************** 3652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * Code Section macros 3662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project **************************************************/ 3676cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define LNK_SECTION_CODE_L1 3686cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define LNK_SECTION_CODE_L2 3696cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define LNK_SECTION_INITCODE 3702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* Memory section macros. */ 3722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3736cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK/* default fall back */ 3746cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define LNK_SECTION_DATA_L1 3756cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define LNK_SECTION_DATA_L2 3766cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define LNK_SECTION_CONSTDATA 3776cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define LNK_SECTION_CONSTDATA_L1 3782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3796cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define LNK_SECTION_L1_DATA_A 3806cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define LNK_SECTION_L1_DATA_B 3812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#ifdef _MSC_VER 3836cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK/* 3846cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Sometimes certain features are excluded from compilation and therefore the 3856cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * warning 4065 may occur: "switch statement contains 'default' but no 'case' 3866cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * labels" We consider this warning irrelevant and disable it. 3876cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK */ 3886cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#pragma warning(disable : 4065) 3892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif 3902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3916cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#endif /* MACHINE_TYPE_H */ 392