• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  
2  /* -----------------------------------------------------------------------------------------------------------
3  Software License for The Fraunhofer FDK AAC Codec Library for Android
4  
5  � Copyright  1995 - 2013 Fraunhofer-Gesellschaft zur F�rderung der angewandten Forschung e.V.
6    All rights reserved.
7  
8   1.    INTRODUCTION
9  The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements
10  the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio.
11  This FDK AAC Codec software is intended to be used on a wide variety of Android devices.
12  
13  AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual
14  audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by
15  independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part
16  of the MPEG specifications.
17  
18  Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer)
19  may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners
20  individually for the purpose of encoding or decoding bit streams in products that are compliant with
21  the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license
22  these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec
23  software may already be covered under those patent licenses when it is used for those licensed purposes only.
24  
25  Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality,
26  are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional
27  applications information and documentation.
28  
29  2.    COPYRIGHT LICENSE
30  
31  Redistribution and use in source and binary forms, with or without modification, are permitted without
32  payment of copyright license fees provided that you satisfy the following conditions:
33  
34  You must retain the complete text of this software license in redistributions of the FDK AAC Codec or
35  your modifications thereto in source code form.
36  
37  You must retain the complete text of this software license in the documentation and/or other materials
38  provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form.
39  You must make available free of charge copies of the complete source code of the FDK AAC Codec and your
40  modifications thereto to recipients of copies in binary form.
41  
42  The name of Fraunhofer may not be used to endorse or promote products derived from this library without
43  prior written permission.
44  
45  You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec
46  software or your modifications thereto.
47  
48  Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software
49  and the date of any change. For modified versions of the FDK AAC Codec, the term
50  "Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term
51  "Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android."
52  
53  3.    NO PATENT LICENSE
54  
55  NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer,
56  ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with
57  respect to this software.
58  
59  You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized
60  by appropriate patent licenses.
61  
62  4.    DISCLAIMER
63  
64  This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors
65  "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties
66  of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
67  CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages,
68  including but not limited to procurement of substitute goods or services; loss of use, data, or profits,
69  or business interruption, however caused and on any theory of liability, whether in contract, strict
70  liability, or tort (including negligence), arising in any way out of the use of this software, even if
71  advised of the possibility of such damage.
72  
73  5.    CONTACT INFORMATION
74  
75  Fraunhofer Institute for Integrated Circuits IIS
76  Attention: Audio and Multimedia Departments - FDK AAC LL
77  Am Wolfsmantel 33
78  91058 Erlangen, Germany
79  
80  www.iis.fraunhofer.de/amm
81  amm-info@iis.fraunhofer.de
82  ----------------------------------------------------------------------------------------------------------- */
83  
84  /**************************  Fraunhofer IIS FDK SysLib  **********************
85  
86     Author(s):
87     Description: - Generic memory, stdio, string, etc. function wrappers or
88                    builtins.
89                  - OS dependant function wrappers.
90  
91  ******************************************************************************/
92  
93  #define _CRT_SECURE_NO_WARNINGS
94  
95  #include "genericStds.h"
96  
97  #include <math.h>
98  
99  /* library info */
100  #define SYS_LIB_VL0 1
101  #define SYS_LIB_VL1 3
102  #define SYS_LIB_VL2 6
103  #define SYS_LIB_TITLE "System Integration Library"
104  #define SYS_LIB_BUILD_DATE __DATE__
105  #define SYS_LIB_BUILD_TIME __TIME__
106  
107    #include <stdlib.h>
108    #include <stdio.h>
109    #include <string.h>
110      #include <stdarg.h>
111  
112  
113  /***************************************************************
114   * memory allocation monitoring variables
115   ***************************************************************/
116  
117  
118  /* Include OS/System specific implementations. */
119  #if defined(__linux__)	/* cppp replaced: elif */
120    #include "linux/genericStds_linux.cpp"
121  #endif
122  
123  
124  #if !(defined(USE_BUILTIN_STRING_FUNCTIONS) || defined(__SYMBIAN32__))
125  #include <string.h>
126  #include <stdlib.h>
127  #include <stdio.h>
128  
129  #ifndef FUNCTION_FDKprintf
FDKprintf(const char * szFmt,...)130  void  FDKprintf( const char* szFmt, ...)    {
131    va_list ap;
132    va_start(ap, szFmt);
133    vprintf(szFmt, ap);
134    va_end(ap);
135  #ifdef ARCH_WA_FLUSH_CONSOLE
136    fflush(stdout);
137  #endif
138  }
139  #endif
140  
141  #ifndef FUNCTION_FDKprintfErr
FDKprintfErr(const char * szFmt,...)142  void  FDKprintfErr( const char* szFmt, ...) {
143    va_list ap;
144    va_start(ap, szFmt);
145  #if defined(ARCH_WA_SLOWCON)
146    vprintf(szFmt, ap);
147  #else
148    vfprintf(stderr, szFmt, ap);
149  #endif
150    va_end(ap);
151  #ifdef ARCH_WA_FLUSH_CONSOLE
152    fflush(stderr);
153  #endif
154  }
155  #endif
156  
FDKgetchar(void)157  int FDKgetchar(void) { return getchar(); }
158  
FDKfprintf(FDKFILE * stream,const char * format,...)159  INT  FDKfprintf(FDKFILE  *stream,  const  char *format, ...) {
160    INT chars = 0;
161    va_list ap;
162    va_start(ap, format);
163    chars += vfprintf((FILE*)stream, format, ap);
164    va_end(ap);
165    return chars;
166  }
167  
168  #ifndef FUNCTION_FDKsprintf
FDKsprintf(char * str,const char * format,...)169  INT  FDKsprintf(char *str, const char *format, ...) {
170    INT chars = 0;
171    va_list ap;
172    va_start(ap, format);
173    chars += vsprintf(str, format, ap);
174    va_end(ap);
175    return chars;
176  }
177  #endif
178  
179  #else
180  
FDKprintf(const char * szFmt,...)181  void FDKprintf( const char* szFmt, ...) { /* stub! */; }
FDKprintfErr(const char * szFmt,...)182  void FDKprintfErr( const char* szFmt, ...) { /* stub! */; }
FDKfprintf(FILE * stream,const char * format,...)183  INT  FDKfprintf(FILE  *stream,  const  char *format, ...) { /*stub ! */; }
FDKsprintf(char * str,const char * format,...)184  INT  FDKsprintf(char *str, const char *format, ...) { /* stub! */; }
185  
186  #endif
187  
188  /************************************************************************************************/
189  
190  
FDKstrchr(const char * s,INT c)191  const char *FDKstrchr(const char *s, INT c)                       { return strchr(s, c); }
FDKstrstr(const char * haystack,const char * needle)192  const char *FDKstrstr(const char *haystack, const char *needle)   { return strstr(haystack, needle); }
193  #ifndef FUNCTION_FDKstrcpy
FDKstrcpy(char * dest,const char * src)194  char *FDKstrcpy(char *dest, const char *src)                      { return strcpy(dest, src); }
195  #endif
FDKstrncpy(char * dest,const char * src,UINT n)196  char *FDKstrncpy(char *dest, const char *src, UINT n)             { return strncpy(dest, src, n); }
197  
198  /*************************************************************************
199   * DYNAMIC MEMORY management (heap)
200   *************************************************************************/
201  
202  #ifndef FUNCTION_FDKcalloc
FDKcalloc(const UINT n,const UINT size)203  void *FDKcalloc (const UINT n, const UINT size)
204  {
205    void* ptr;
206  
207    ptr = calloc(n, size);
208  
209    return ptr;
210  }
211  #endif
212  
213  #ifndef FUNCTION_FDKmalloc
FDKmalloc(const UINT size)214  void *FDKmalloc (const UINT size)
215  {
216    void* ptr;
217  
218    ptr = malloc(size);
219  
220    return ptr;
221  }
222  #endif
223  
224  #ifndef FUNCTION_FDKfree
FDKfree(void * ptr)225  void  FDKfree (void *ptr)
226  {
227    /* FDKprintf("f, heapSize: %d\n", heapSizeCurr); */
228    free((INT*)ptr);
229  }
230  #endif
231  
232  #ifndef FUNCTION_FDKaalloc
FDKaalloc(const UINT size,const UINT alignment)233  void *FDKaalloc(const UINT size, const UINT alignment)
234  {
235    void *addr, *result=NULL;
236    addr = FDKcalloc(1, size + alignment + sizeof(void*));               /* Malloc and clear memory.         */
237  
238    if (addr!=NULL)
239    {
240      result = ALIGN_PTR((unsigned char*)addr + sizeof(void*));    /* Get aligned memory base address. */
241      *(((void**)result) - 1) = addr;                /* Save malloc'ed memory pointer.   */
242    }
243  
244    return result;                                 /* Return aligned address.          */
245  }
246  #endif
247  
248  #ifndef FUNCTION_FDKafree
FDKafree(void * ptr)249  void  FDKafree (void *ptr)
250  {
251    void *addr;
252    addr = *(((void**)ptr)-1); /* Get pointer to malloc'ed memory. */
253    FDKfree(addr);                /* Free malloc'ed memory area.      */
254  }
255  #endif
256  
257  
258  #ifndef FUNCTION_FDKcalloc_L
259  
260  /*--------------------------------------------------------------------------*
261   * DATA MEMORY L1/L2 (fallback)
262   *--------------------------------------------------------------------------*/
263  
264  
265  
266  /*--------------------------------------------------------------------------*
267   * FDKcalloc_L
268   *--------------------------------------------------------------------------*/
FDKcalloc_L(const UINT dim,const UINT size,MEMORY_SECTION s)269  void *FDKcalloc_L(const UINT dim, const UINT size, MEMORY_SECTION s)
270  {
271    int a_size;
272  
273    if (s == SECT_DATA_EXTERN)
274      goto fallback;
275  
276    a_size = ((dim*size+3)&0xfffffffc); /* force 4 byte alignment (1111 .... 1111 1100) */
277  
278  
279  
280  
281  
282    //printf("Warning, out of internal memory\n");
283  
284  fallback:
285    return FDKcalloc(dim, size);
286  }
287  #endif /* FUNCTION_FDKcalloc_L */
288  
289  #ifndef FUNCTION_FDKfree_L
FDKfree_L(void * p)290  void  FDKfree_L (void *p)
291  {
292  
293      FDKfree(p);
294  }
295  #endif /* FUNCTION_FDKfree_L */
296  
297  #ifndef FUNCTION_FDKaalloc_L
FDKaalloc_L(const UINT size,const UINT alignment,MEMORY_SECTION s)298  void *FDKaalloc_L(const UINT size, const UINT alignment, MEMORY_SECTION s)
299  {
300    void *addr, *result=NULL;
301    addr = FDKcalloc_L(1, size + alignment + sizeof(void*), s);       /* Malloc and clear memory.         */
302  
303    if (addr!=NULL)
304    {
305      result = ALIGN_PTR((unsigned char *)addr + sizeof(void*));    /* Get aligned memory base address. */
306      *(((void**)result) - 1) = addr;                /* Save malloc'ed memory pointer.   */
307    }
308  
309    return result;                                 /* Return aligned address.          */
310  }
311  #endif
312  
313  #ifndef FUNCTION_FDKafree_L
FDKafree_L(void * ptr)314  void  FDKafree_L (void *ptr)
315  {
316    void *addr;
317  
318    addr = *(((void**)ptr)-1); /* Get pointer to malloc'ed memory. */
319    FDKfree_L(addr);                /* Free malloc'ed memory area.      */
320  }
321  #endif
322  
323  
324  
325  /*---------------------------------------------------------------------------------------
326   * FUNCTION:    FDKmemcpy
327   * DESCRIPTION: - copies memory from "src" to "dst" with length "size" bytes
328   *              - compiled with FDK_DEBUG will give you warnings
329   *---------------------------------------------------------------------------------------*/
FDKmemcpy(void * dst,const void * src,const UINT size)330  void FDKmemcpy(void *dst, const void *src, const UINT size)
331  {
332  
333    /* do the copy */
334    memcpy(dst, src, size);
335  }
336  
FDKmemmove(void * dst,const void * src,const UINT size)337  void FDKmemmove(void *dst, const void *src, const UINT size)     { memmove(dst, src, size); }
FDKmemset(void * memPtr,const INT value,const UINT size)338  void FDKmemset(void *memPtr, const INT value, const UINT size)   { memset(memPtr, value, size); }
FDKmemclear(void * memPtr,const UINT size)339  void FDKmemclear(void *memPtr, const UINT size)                  { FDKmemset(memPtr,0,size); }
FDKstrlen(const char * s)340  UINT FDKstrlen(const char *s)                                    { return (UINT)strlen(s); }
341  
342  /* Compare function wrappers */
FDKmemcmp(const void * s1,const void * s2,const UINT size)343  INT FDKmemcmp(const void *s1, const void *s2, const UINT size)  { return memcmp(s1, s2, size); }
FDKstrcmp(const char * s1,const char * s2)344  INT FDKstrcmp(const char *s1, const char *s2)                   { return strcmp(s1, s2); }
FDKstrncmp(const char * s1,const char * s2,const UINT size)345  INT FDKstrncmp(const char *s1, const char *s2, const UINT size) { return strncmp(s1, s2, size); }
346  
347  
348  /* Math function wrappers. Only intended for compatibility, not to be highly optimized. */
349  
FDKabs(INT j)350  INT FDKabs(INT j) { return abs(j); }
FDKfabs(double x)351  double FDKfabs(double x) { return fabs(x); }
FDKpow(double x,double y)352  double FDKpow(double x, double y) { return pow(x,y); }
FDKsqrt(double x)353  double FDKsqrt(double x) { return sqrt(x); }
FDKatan(double x)354  double FDKatan(double x) { return atan(x); }
FDKlog(double x)355  double FDKlog(double x) { return log(x); }
FDKsin(double x)356  double FDKsin(double x) { return sin(x); }
FDKcos(double x)357  double FDKcos(double x) { return cos(x); }
FDKexp(double x)358  double FDKexp(double x) { return exp(x); }
FDKatan2(double y,double x)359  double FDKatan2(double y, double x) { return atan2(y, x); }
FDKacos(double x)360  double FDKacos(double x) { return acos(x); }
FDKtan(double x)361  double FDKtan(double x) { return tan(x); }
FDKfloor(double x)362  double FDKfloor(double x) { return floor(x); }
FDKceil(double x)363  double FDKceil(double x) { return ceil(x); }
364  
FDKatoi(const char * nptr)365  INT   FDKatoi(const char *nptr) { return atoi(nptr); }
FDKatol(const char * nptr)366  long  FDKatol(const char *nptr) { return atol(nptr); }
FDKatof(const char * nptr)367  float FDKatof(const char *nptr) { return (float)atof(nptr); }
368  
369  
370  /* ==================== FILE I/O ====================== */
371  
372  #if !defined(FUNCTION_FDKfopen)
FDKfopen(const char * filename,const char * mode)373  FDKFILE *FDKfopen(const char *filename, const char *mode) { return fopen(filename, mode); }
374  #endif
375  #if !defined(FUNCTION_FDKfclose)
FDKfclose(FDKFILE * fp)376  INT FDKfclose(FDKFILE *fp) { return fclose((FILE*)fp);}
377  #endif
378  #if !defined(FUNCTION_FDKfseek)
FDKfseek(FDKFILE * fp,LONG OFFSET,int WHENCE)379  INT FDKfseek(FDKFILE *fp, LONG OFFSET, int WHENCE) { return fseek((FILE*)fp, OFFSET, WHENCE);}
380  #endif
381  #if !defined(FUNCTION_FDKftell)
FDKftell(FDKFILE * fp)382  INT FDKftell(FDKFILE *fp) { return ftell((FILE*)fp); }
383  #endif
384  #if !defined(FUNCTION_FDKfflush)
FDKfflush(FDKFILE * fp)385  INT FDKfflush(FDKFILE *fp) { return fflush((FILE*)fp); }
386  #endif
387  const INT FDKSEEK_SET = SEEK_SET;
388  const INT FDKSEEK_CUR = SEEK_CUR;
389  const INT FDKSEEK_END = SEEK_END;
390  
391  #if !defined(FUNCTION_FDKfwrite)
FDKfwrite(void * ptrf,INT size,UINT nmemb,FDKFILE * fp)392  UINT FDKfwrite(void *ptrf, INT size, UINT nmemb, FDKFILE *fp) { return fwrite(ptrf, size, nmemb, (FILE*)fp); }
393  #endif
394  #if !defined(FUNCTION_FDKfread)
FDKfread(void * dst,INT size,UINT nmemb,FDKFILE * fp)395  UINT FDKfread(void *dst, INT size, UINT nmemb, FDKFILE *fp) { return fread(dst, size, nmemb, (FILE*)fp); }
396  #endif
397  #if !defined(FUNCTION_FDKfgets)
FDKfgets(void * dst,INT size,FDKFILE * fp)398  char* FDKfgets(void *dst, INT size, FDKFILE *fp) { return fgets((char *)dst, size, (FILE*)fp); }
399  #endif
400  #if !defined(FUNCTION_FDKrewind)
FDKrewind(FDKFILE * fp)401  void FDKrewind(FDKFILE *fp) { FDKfseek((FILE*)fp,0,FDKSEEK_SET); }
402  #endif
403  
404  
FDKfwrite_EL(void * ptrf,INT size,UINT nmemb,FDKFILE * fp)405  UINT FDKfwrite_EL(void *ptrf, INT size, UINT nmemb, FDKFILE *fp) {
406  
407      if (IS_LITTLE_ENDIAN()) {
408        FDKfwrite(ptrf, size, nmemb, fp);
409      } else {
410        UINT n;
411        INT s;
412  
413        UCHAR *ptr = (UCHAR*) ptrf;
414  
415        for (n=0; n<nmemb; n++) {
416          for (s=size-1; s>=0; s--) {
417            //FDKprintf("char = %c\n", (char)*(ptr+s));
418            FDKfwrite(ptr + s, 1, 1, fp);
419          }
420          ptr = ptr + size;
421        }
422      }
423      return nmemb;
424  }
425  
426  
FDKfread_EL(void * dst,INT size,UINT nmemb,FDKFILE * fp)427  UINT FDKfread_EL(void *dst, INT size, UINT nmemb, FDKFILE *fp) {
428    UINT n, s0, s1, err;
429    UCHAR tmp, *ptr;
430    UCHAR tmp24[3];
431  
432    /* Enforce alignment of 24 bit data. */
433    if (size == 3) {
434      ptr = (UCHAR*)dst;
435      err = 0;
436      for (n=0; n<nmemb; n++) {
437        if ((err = FDKfread(tmp24, 1, 3, fp)) != 3) {
438          return err;
439        }
440        *ptr++ = tmp24[0];
441        *ptr++ = tmp24[1];
442        *ptr++ = tmp24[2];
443        /* Sign extension */
444        if (tmp24[2] & 0x80) {
445          *ptr++ = 0xff;
446        } else {
447          *ptr++ = 0;
448        }
449      }
450      err = nmemb;
451      size = sizeof(LONG);
452    } else {
453      if ((err = FDKfread(dst, size, nmemb, fp)) != nmemb) {
454        return err;
455      }
456    }
457    if (!IS_LITTLE_ENDIAN() && size > 1) {
458      ptr = (UCHAR*)dst;
459      for (n=0; n<nmemb; n++) {
460        for (s0=0, s1=size-1; s0 < s1; s0++, s1--) {
461          tmp = ptr[s0];
462          ptr[s0] = ptr[s1];
463          ptr[s1] = tmp;
464        }
465        ptr += size;
466      }
467    }
468    return err;
469  }
470  
FDKfeof(FDKFILE * fp)471  INT FDKfeof(FDKFILE *fp) { return feof((FILE*)fp); }
472  
473  /* Global initialization/cleanup */
474  
475  #if defined(_DEBUG) && defined(_WIN32) && !defined(_WIN32_WCE)
476    #define _CRTDBG_MAP_ALLOC
477    #include <crtdbg.h>
478  #endif
479  
480  
481  
482  
FDKprintDisclaimer(void)483  void FDKprintDisclaimer(void)
484  {
485    FDKprintf(
486    "This program is protected by copyright law and international treaties.\n"  \
487    "Any reproduction or distribution of this program, or any portion\n"        \
488    "of it, may result in severe civil and criminal penalties, and will be\n"   \
489    "prosecuted to the maximum extent possible under law.\n\n");
490  }
491  
492