• 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 - 2015 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 <math.h>
96  
97  #include "genericStds.h"
98  
99  /* library info */
100  #define SYS_LIB_VL0 1
101  #define SYS_LIB_VL1 3
102  #define SYS_LIB_VL2 8
103  #define SYS_LIB_TITLE "System Integration Library"
104  #ifdef __ANDROID__
105  #define SYS_LIB_BUILD_DATE ""
106  #define SYS_LIB_BUILD_TIME ""
107  #else
108  #define SYS_LIB_BUILD_DATE __DATE__
109  #define SYS_LIB_BUILD_TIME __TIME__
110  #endif
111  
112    #include <stdlib.h>
113    #include <stdio.h>
114    #include <string.h>
115      #include <stdarg.h>
116  
117  
118  /***************************************************************
119   * memory allocation monitoring variables
120   ***************************************************************/
121  
122  
123  /* Include OS/System specific implementations. */
124  #if defined(__linux__) && !defined(__ANDROID__) /* cppp replaced: elif */
125    #include "linux/genericStds_linux.cpp"
126  #endif
127  
128  
129  #if !(defined(USE_BUILTIN_STRING_FUNCTIONS) || defined(__SYMBIAN32__))
130  #include <string.h>
131  #include <stdlib.h>
132  #include <stdio.h>
133  
134  #ifndef FUNCTION_FDKprintf
FDKprintf(const char * szFmt,...)135  void  FDKprintf( const char* szFmt, ...)    {
136    va_list ap;
137    va_start(ap, szFmt);
138    vprintf(szFmt, ap);
139    va_end(ap);
140  #ifdef ARCH_WA_FLUSH_CONSOLE
141    fflush(stdout);
142  #endif
143  }
144  #endif
145  
146  #ifndef FUNCTION_FDKprintfErr
FDKprintfErr(const char * szFmt,...)147  void  FDKprintfErr( const char* szFmt, ...) {
148    va_list ap;
149    va_start(ap, szFmt);
150  #if defined(ARCH_WA_SLOWCON)
151    vprintf(szFmt, ap);
152  #else
153    vfprintf(stderr, szFmt, ap);
154  #endif
155    va_end(ap);
156  #ifdef ARCH_WA_FLUSH_CONSOLE
157    fflush(stderr);
158  #endif
159  }
160  #endif
161  
FDKgetchar(void)162  int FDKgetchar(void) { return getchar(); }
163  
FDKfprintf(FDKFILE * stream,const char * format,...)164  INT  FDKfprintf(FDKFILE  *stream,  const  char *format, ...) {
165    INT chars = 0;
166    va_list ap;
167    va_start(ap, format);
168    chars += vfprintf((FILE*)stream, format, ap);
169    va_end(ap);
170    return chars;
171  }
172  
173  #ifndef FUNCTION_FDKsprintf
FDKsprintf(char * str,const char * format,...)174  INT  FDKsprintf(char *str, const char *format, ...) {
175    INT chars = 0;
176    va_list ap;
177    va_start(ap, format);
178    chars += vsprintf(str, format, ap);
179    va_end(ap);
180    return chars;
181  }
182  #endif
183  
184  #else
185  
FDKprintf(const char * szFmt,...)186  void FDKprintf( const char* szFmt, ...) { /* stub! */; }
FDKprintfErr(const char * szFmt,...)187  void FDKprintfErr( const char* szFmt, ...) { /* stub! */; }
FDKfprintf(FILE * stream,const char * format,...)188  INT  FDKfprintf(FILE  *stream,  const  char *format, ...) { /*stub ! */; }
FDKsprintf(char * str,const char * format,...)189  INT  FDKsprintf(char *str, const char *format, ...) { /* stub! */; }
190  
191  #endif
192  
193  /************************************************************************************************/
194  
195  
FDKstrchr(const char * s,INT c)196  const char *FDKstrchr(const char *s, INT c)                       { return strchr(s, c); }
FDKstrstr(const char * haystack,const char * needle)197  const char *FDKstrstr(const char *haystack, const char *needle)   { return strstr(haystack, needle); }
198  #ifndef FUNCTION_FDKstrcpy
FDKstrcpy(char * dest,const char * src)199  char *FDKstrcpy(char *dest, const char *src)                      { return strcpy(dest, src); }
200  #endif
FDKstrncpy(char * dest,const char * src,UINT n)201  char *FDKstrncpy(char *dest, const char *src, UINT n)             { return strncpy(dest, src, n); }
202  
203  /*************************************************************************
204   * DYNAMIC MEMORY management (heap)
205   *************************************************************************/
206  
207  #ifndef FUNCTION_FDKcalloc
FDKcalloc(const UINT n,const UINT size)208  void *FDKcalloc (const UINT n, const UINT size)
209  {
210    void* ptr;
211  
212    ptr = calloc(n, size);
213  
214    return ptr;
215  }
216  #endif
217  
218  #ifndef FUNCTION_FDKmalloc
FDKmalloc(const UINT size)219  void *FDKmalloc (const UINT size)
220  {
221    void* ptr;
222  
223    ptr = malloc(size);
224  
225    return ptr;
226  }
227  #endif
228  
229  #ifndef FUNCTION_FDKfree
FDKfree(void * ptr)230  void  FDKfree (void *ptr)
231  {
232    /* FDKprintf("f, heapSize: %d\n", heapSizeCurr); */
233    free((INT*)ptr);
234  }
235  #endif
236  
237  #ifndef FUNCTION_FDKaalloc
FDKaalloc(const UINT size,const UINT alignment)238  void *FDKaalloc(const UINT size, const UINT alignment)
239  {
240    void *addr, *result=NULL;
241    addr = FDKcalloc(1, size + alignment + sizeof(void*));               /* Malloc and clear memory.         */
242  
243    if (addr!=NULL)
244    {
245      result = ALIGN_PTR((unsigned char*)addr + sizeof(void*));    /* Get aligned memory base address. */
246      *(((void**)result) - 1) = addr;                /* Save malloc'ed memory pointer.   */
247    }
248  
249    return result;                                 /* Return aligned address.          */
250  }
251  #endif
252  
253  #ifndef FUNCTION_FDKafree
FDKafree(void * ptr)254  void  FDKafree (void *ptr)
255  {
256    void *addr;
257    addr = *(((void**)ptr)-1); /* Get pointer to malloc'ed memory. */
258    FDKfree(addr);                /* Free malloc'ed memory area.      */
259  }
260  #endif
261  
262  
263  #ifndef FUNCTION_FDKcalloc_L
264  
265  /*--------------------------------------------------------------------------*
266   * DATA MEMORY L1/L2 (fallback)
267   *--------------------------------------------------------------------------*/
268  
269  
270  
271  /*--------------------------------------------------------------------------*
272   * FDKcalloc_L
273   *--------------------------------------------------------------------------*/
FDKcalloc_L(const UINT dim,const UINT size,MEMORY_SECTION s)274  void *FDKcalloc_L(const UINT dim, const UINT size, MEMORY_SECTION s)
275  {
276    int a_size;
277  
278    if (s == SECT_DATA_EXTERN)
279      goto fallback;
280  
281    a_size = ((dim*size+3)&0xfffffffc); /* force 4 byte alignment (1111 .... 1111 1100) */
282  
283  
284  
285  
286  
287    //printf("Warning, out of internal memory\n");
288  
289  fallback:
290    return FDKcalloc(dim, size);
291  }
292  #endif /* FUNCTION_FDKcalloc_L */
293  
294  #ifndef FUNCTION_FDKfree_L
FDKfree_L(void * p)295  void  FDKfree_L (void *p)
296  {
297  
298      FDKfree(p);
299  }
300  #endif /* FUNCTION_FDKfree_L */
301  
302  #ifndef FUNCTION_FDKaalloc_L
FDKaalloc_L(const UINT size,const UINT alignment,MEMORY_SECTION s)303  void *FDKaalloc_L(const UINT size, const UINT alignment, MEMORY_SECTION s)
304  {
305    void *addr, *result=NULL;
306    addr = FDKcalloc_L(1, size + alignment + sizeof(void*), s);       /* Malloc and clear memory.         */
307  
308    if (addr!=NULL)
309    {
310      result = ALIGN_PTR((unsigned char *)addr + sizeof(void*));    /* Get aligned memory base address. */
311      *(((void**)result) - 1) = addr;                /* Save malloc'ed memory pointer.   */
312    }
313  
314    return result;                                 /* Return aligned address.          */
315  }
316  #endif
317  
318  #ifndef FUNCTION_FDKafree_L
FDKafree_L(void * ptr)319  void  FDKafree_L (void *ptr)
320  {
321    void *addr;
322  
323    addr = *(((void**)ptr)-1); /* Get pointer to malloc'ed memory. */
324    FDKfree_L(addr);                /* Free malloc'ed memory area.      */
325  }
326  #endif
327  
328  
329  
330  /*---------------------------------------------------------------------------------------
331   * FUNCTION:    FDKmemcpy
332   * DESCRIPTION: - copies memory from "src" to "dst" with length "size" bytes
333   *              - compiled with FDK_DEBUG will give you warnings
334   *---------------------------------------------------------------------------------------*/
FDKmemcpy(void * dst,const void * src,const UINT size)335  void FDKmemcpy(void *dst, const void *src, const UINT size)
336  {
337  
338    /* do the copy */
339    memcpy(dst, src, size);
340  }
341  
FDKmemmove(void * dst,const void * src,const UINT size)342  void FDKmemmove(void *dst, const void *src, const UINT size)     { memmove(dst, src, size); }
FDKmemset(void * memPtr,const INT value,const UINT size)343  void FDKmemset(void *memPtr, const INT value, const UINT size)   { memset(memPtr, value, size); }
FDKmemclear(void * memPtr,const UINT size)344  void FDKmemclear(void *memPtr, const UINT size)                  { FDKmemset(memPtr,0,size); }
FDKstrlen(const char * s)345  UINT FDKstrlen(const char *s)                                    { return (UINT)strlen(s); }
346  
347  /* Compare function wrappers */
FDKmemcmp(const void * s1,const void * s2,const UINT size)348  INT FDKmemcmp(const void *s1, const void *s2, const UINT size)  { return memcmp(s1, s2, size); }
FDKstrcmp(const char * s1,const char * s2)349  INT FDKstrcmp(const char *s1, const char *s2)                   { return strcmp(s1, s2); }
FDKstrncmp(const char * s1,const char * s2,const UINT size)350  INT FDKstrncmp(const char *s1, const char *s2, const UINT size) { return strncmp(s1, s2, size); }
351  
352  
353  /* Math function wrappers. Only intended for compatibility, not to be highly optimized. */
354  
FDKabs(INT j)355  INT FDKabs(INT j) { return abs(j); }
FDKfabs(double x)356  double FDKfabs(double x) { return fabs(x); }
FDKpow(double x,double y)357  double FDKpow(double x, double y) { return pow(x,y); }
FDKsqrt(double x)358  double FDKsqrt(double x) { return sqrt(x); }
FDKatan(double x)359  double FDKatan(double x) { return atan(x); }
FDKlog(double x)360  double FDKlog(double x) { return log(x); }
FDKsin(double x)361  double FDKsin(double x) { return sin(x); }
FDKcos(double x)362  double FDKcos(double x) { return cos(x); }
FDKexp(double x)363  double FDKexp(double x) { return exp(x); }
FDKatan2(double y,double x)364  double FDKatan2(double y, double x) { return atan2(y, x); }
FDKacos(double x)365  double FDKacos(double x) { return acos(x); }
FDKtan(double x)366  double FDKtan(double x) { return tan(x); }
FDKfloor(double x)367  double FDKfloor(double x) { return floor(x); }
FDKceil(double x)368  double FDKceil(double x) { return ceil(x); }
369  
FDKatoi(const char * nptr)370  INT   FDKatoi(const char *nptr) { return atoi(nptr); }
FDKatol(const char * nptr)371  long  FDKatol(const char *nptr) { return atol(nptr); }
FDKatof(const char * nptr)372  float FDKatof(const char *nptr) { return (float)atof(nptr); }
373  
374  
375  /* ==================== FILE I/O ====================== */
376  
377  #if !defined(FUNCTION_FDKfopen)
FDKfopen(const char * filename,const char * mode)378  FDKFILE *FDKfopen(const char *filename, const char *mode) { return fopen(filename, mode); }
379  #endif
380  #if !defined(FUNCTION_FDKfclose)
FDKfclose(FDKFILE * fp)381  INT FDKfclose(FDKFILE *fp) { return fclose((FILE*)fp);}
382  #endif
383  #if !defined(FUNCTION_FDKfseek)
FDKfseek(FDKFILE * fp,LONG OFFSET,int WHENCE)384  INT FDKfseek(FDKFILE *fp, LONG OFFSET, int WHENCE) { return fseek((FILE*)fp, OFFSET, WHENCE);}
385  #endif
386  #if !defined(FUNCTION_FDKftell)
FDKftell(FDKFILE * fp)387  INT FDKftell(FDKFILE *fp) { return ftell((FILE*)fp); }
388  #endif
389  #if !defined(FUNCTION_FDKfflush)
FDKfflush(FDKFILE * fp)390  INT FDKfflush(FDKFILE *fp) { return fflush((FILE*)fp); }
391  #endif
392  const INT FDKSEEK_SET = SEEK_SET;
393  const INT FDKSEEK_CUR = SEEK_CUR;
394  const INT FDKSEEK_END = SEEK_END;
395  
396  #if !defined(FUNCTION_FDKfwrite)
FDKfwrite(void * ptrf,INT size,UINT nmemb,FDKFILE * fp)397  UINT FDKfwrite(void *ptrf, INT size, UINT nmemb, FDKFILE *fp) { return fwrite(ptrf, size, nmemb, (FILE*)fp); }
398  #endif
399  #if !defined(FUNCTION_FDKfread)
FDKfread(void * dst,INT size,UINT nmemb,FDKFILE * fp)400  UINT FDKfread(void *dst, INT size, UINT nmemb, FDKFILE *fp) { return fread(dst, size, nmemb, (FILE*)fp); }
401  #endif
402  #if !defined(FUNCTION_FDKfgets)
FDKfgets(void * dst,INT size,FDKFILE * fp)403  char* FDKfgets(void *dst, INT size, FDKFILE *fp) { return fgets((char *)dst, size, (FILE*)fp); }
404  #endif
405  #if !defined(FUNCTION_FDKrewind)
FDKrewind(FDKFILE * fp)406  void FDKrewind(FDKFILE *fp) { FDKfseek((FILE*)fp,0,FDKSEEK_SET); }
407  #endif
408  
409  
FDKfwrite_EL(void * ptrf,INT size,UINT nmemb,FDKFILE * fp)410  UINT FDKfwrite_EL(void *ptrf, INT size, UINT nmemb, FDKFILE *fp) {
411  
412      if (IS_LITTLE_ENDIAN()) {
413        FDKfwrite(ptrf, size, nmemb, fp);
414      } else {
415        UINT n;
416        INT s;
417  
418        UCHAR *ptr = (UCHAR*) ptrf;
419  
420        for (n=0; n<nmemb; n++) {
421          for (s=size-1; s>=0; s--) {
422            //FDKprintf("char = %c\n", (char)*(ptr+s));
423            FDKfwrite(ptr + s, 1, 1, fp);
424          }
425          ptr = ptr + size;
426        }
427      }
428      return nmemb;
429  }
430  
431  
FDKfread_EL(void * dst,INT size,UINT nmemb,FDKFILE * fp)432  UINT FDKfread_EL(void *dst, INT size, UINT nmemb, FDKFILE *fp) {
433    UINT n, s0, s1, err;
434    UCHAR tmp, *ptr;
435    UCHAR tmp24[3];
436  
437    /* Enforce alignment of 24 bit data. */
438    if (size == 3) {
439      ptr = (UCHAR*)dst;
440      err = 0;
441      for (n=0; n<nmemb; n++) {
442        if ((err = FDKfread(tmp24, 1, 3, fp)) != 3) {
443          return err;
444        }
445        *ptr++ = tmp24[0];
446        *ptr++ = tmp24[1];
447        *ptr++ = tmp24[2];
448        /* Sign extension */
449        if (tmp24[2] & 0x80) {
450          *ptr++ = 0xff;
451        } else {
452          *ptr++ = 0;
453        }
454      }
455      err = nmemb;
456      size = sizeof(LONG);
457    } else {
458      if ((err = FDKfread(dst, size, nmemb, fp)) != nmemb) {
459        return err;
460      }
461    }
462    if (!IS_LITTLE_ENDIAN() && size > 1) {
463      ptr = (UCHAR*)dst;
464      for (n=0; n<nmemb; n++) {
465        for (s0=0, s1=size-1; s0 < s1; s0++, s1--) {
466          tmp = ptr[s0];
467          ptr[s0] = ptr[s1];
468          ptr[s1] = tmp;
469        }
470        ptr += size;
471      }
472    }
473    return err;
474  }
475  
FDKfeof(FDKFILE * fp)476  INT FDKfeof(FDKFILE *fp) { return feof((FILE*)fp); }
477  
478  /* Global initialization/cleanup */
479  
480  #if defined(_DEBUG) && defined(_WIN32) && !defined(_WIN32_WCE)
481    #define _CRTDBG_MAP_ALLOC
482    #include <crtdbg.h>
483  #endif
484  
485  
486  
487  
FDKprintDisclaimer(void)488  void FDKprintDisclaimer(void)
489  {
490    FDKprintf(
491    "This program is protected by copyright law and international treaties.\n"  \
492    "Any reproduction or distribution of this program, or any portion\n"        \
493    "of it, may result in severe civil and criminal penalties, and will be\n"   \
494    "prosecuted to the maximum extent possible under law.\n\n");
495  }
496  
497