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