diff options
Diffstat (limited to 'fdk-aac/libSYS/src/genericStds.cpp')
-rw-r--r-- | fdk-aac/libSYS/src/genericStds.cpp | 419 |
1 files changed, 419 insertions, 0 deletions
diff --git a/fdk-aac/libSYS/src/genericStds.cpp b/fdk-aac/libSYS/src/genericStds.cpp new file mode 100644 index 0000000..f98d0a9 --- /dev/null +++ b/fdk-aac/libSYS/src/genericStds.cpp @@ -0,0 +1,419 @@ +/* ----------------------------------------------------------------------------- +Software License for The Fraunhofer FDK AAC Codec Library for Android + +© Copyright 1995 - 2018 Fraunhofer-Gesellschaft zur Förderung der angewandten +Forschung e.V. All rights reserved. + + 1. INTRODUCTION +The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software +that implements the MPEG Advanced Audio Coding ("AAC") encoding and decoding +scheme for digital audio. This FDK AAC Codec software is intended to be used on +a wide variety of Android devices. + +AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient +general perceptual audio codecs. AAC-ELD is considered the best-performing +full-bandwidth communications codec by independent studies and is widely +deployed. AAC has been standardized by ISO and IEC as part of the MPEG +specifications. + +Patent licenses for necessary patent claims for the FDK AAC Codec (including +those of Fraunhofer) may be obtained through Via Licensing +(www.vialicensing.com) or through the respective patent owners individually for +the purpose of encoding or decoding bit streams in products that are compliant +with the ISO/IEC MPEG audio standards. Please note that most manufacturers of +Android devices already license these patent claims through Via Licensing or +directly from the patent owners, and therefore FDK AAC Codec software may +already be covered under those patent licenses when it is used for those +licensed purposes only. + +Commercially-licensed AAC software libraries, including floating-point versions +with enhanced sound quality, are also available from Fraunhofer. Users are +encouraged to check the Fraunhofer website for additional applications +information and documentation. + +2. COPYRIGHT LICENSE + +Redistribution and use in source and binary forms, with or without modification, +are permitted without payment of copyright license fees provided that you +satisfy the following conditions: + +You must retain the complete text of this software license in redistributions of +the FDK AAC Codec or your modifications thereto in source code form. + +You must retain the complete text of this software license in the documentation +and/or other materials provided with redistributions of the FDK AAC Codec or +your modifications thereto in binary form. You must make available free of +charge copies of the complete source code of the FDK AAC Codec and your +modifications thereto to recipients of copies in binary form. + +The name of Fraunhofer may not be used to endorse or promote products derived +from this library without prior written permission. + +You may not charge copyright license fees for anyone to use, copy or distribute +the FDK AAC Codec software or your modifications thereto. + +Your modified versions of the FDK AAC Codec must carry prominent notices stating +that you changed the software and the date of any change. For modified versions +of the FDK AAC Codec, the term "Fraunhofer FDK AAC Codec Library for Android" +must be replaced by the term "Third-Party Modified Version of the Fraunhofer FDK +AAC Codec Library for Android." + +3. NO PATENT LICENSE + +NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without +limitation the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE. +Fraunhofer provides no warranty of patent non-infringement with respect to this +software. + +You may use this FDK AAC Codec software or modifications thereto only for +purposes that are authorized by appropriate patent licenses. + +4. DISCLAIMER + +This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright +holders and contributors "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, +including but not limited to the implied warranties of merchantability and +fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, +or consequential damages, including but not limited to procurement of substitute +goods or services; loss of use, data, or profits, or business interruption, +however caused and on any theory of liability, whether in contract, strict +liability, or tort (including negligence), arising in any way out of the use of +this software, even if advised of the possibility of such damage. + +5. CONTACT INFORMATION + +Fraunhofer Institute for Integrated Circuits IIS +Attention: Audio and Multimedia Departments - FDK AAC LL +Am Wolfsmantel 33 +91058 Erlangen, Germany + +www.iis.fraunhofer.de/amm +amm-info@iis.fraunhofer.de +----------------------------------------------------------------------------- */ + +/************************* System integration library ************************** + + Author(s): + + Description: - Generic memory, stdio, string, etc. function wrappers or + builtins. + - OS dependant function wrappers. + +*******************************************************************************/ + +#ifndef _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_WARNINGS +#endif + +#define __GENERICSTDS_CPP__ + +#include "genericStds.h" + +/* library info */ +#define SYS_LIB_VL0 2 +#define SYS_LIB_VL1 0 +#define SYS_LIB_VL2 0 +#define SYS_LIB_TITLE "System Integration Library" +#ifdef __ANDROID__ +#define SYS_LIB_BUILD_DATE "" +#define SYS_LIB_BUILD_TIME "" +#else +#define SYS_LIB_BUILD_DATE __DATE__ +#define SYS_LIB_BUILD_TIME __TIME__ +#endif + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <stdarg.h> + +/*************************************************************** + * memory allocation monitoring variables + ***************************************************************/ + +/* Include OS/System specific implementations. */ + +#include <string.h> +#include <stdlib.h> +#include <stdio.h> + +void FDKprintf(const char *szFmt, ...) { + va_list ap; + va_start(ap, szFmt); + vprintf(szFmt, ap); + va_end(ap); +} + +void FDKprintfErr(const char *szFmt, ...) { + va_list ap; + va_start(ap, szFmt); + vfprintf(stderr, szFmt, ap); + va_end(ap); +} + +int FDKgetchar(void) { return getchar(); } + +INT FDKfprintf(FDKFILE *stream, const char *format, ...) { + INT chars = 0; + va_list ap; + va_start(ap, format); + chars += vfprintf((FILE *)stream, format, ap); + va_end(ap); + return chars; +} + +INT FDKsprintf(char *str, const char *format, ...) { + INT chars = 0; + va_list ap; + va_start(ap, format); + chars += vsprintf(str, format, ap); + va_end(ap); + return chars; +} + +/************************************************************************************************/ + +/************************************************************************************************/ + +char *FDKstrchr(char *s, INT c) { return strchr(s, c); } +const char *FDKstrstr(const char *haystack, const char *needle) { + return strstr(haystack, needle); +} +char *FDKstrcpy(char *dest, const char *src) { return strcpy(dest, src); } +char *FDKstrncpy(char *dest, const char *src, UINT n) { + return strncpy(dest, src, n); +} + +/************************************************************************* + * DYNAMIC MEMORY management (heap) + *************************************************************************/ + +void *FDKcalloc(const UINT n, const UINT size) { + void *ptr; + + ptr = calloc(n, size); + + return ptr; +} + +void *FDKmalloc(const UINT size) { + void *ptr; + + ptr = malloc(size); + + return ptr; +} + +void FDKfree(void *ptr) { free((INT *)ptr); } + +void *FDKaalloc(const UINT size, const UINT alignment) { + void *addr, *result = NULL; + addr = FDKcalloc(1, size + alignment + + (UINT)sizeof(void *)); /* Malloc and clear memory. */ + + if (addr != NULL) { + result = ALIGN_PTR((unsigned char *)addr + + sizeof(void *)); /* Get aligned memory base address. */ + *(((void **)result) - 1) = addr; /* Save malloc'ed memory pointer. */ + C_ALLOC_ALIGNED_REGISTER(result, size); + } + + return result; /* Return aligned address. */ +} + +void FDKafree(void *ptr) { + void *addr; + addr = *(((void **)ptr) - 1); /* Get pointer to malloc'ed memory. */ + + C_ALLOC_ALIGNED_UNREGISTER(ptr); + + FDKfree(addr); /* Free malloc'ed memory area. */ +} + +/*--------------------------------------------------------------------------* + * DATA MEMORY L1/L2 (fallback) + *--------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------* + * FDKcalloc_L + *--------------------------------------------------------------------------*/ +void *FDKcalloc_L(const UINT dim, const UINT size, MEMORY_SECTION s) { + return FDKcalloc(dim, size); +} + +void FDKfree_L(void *p) { FDKfree(p); } + +void *FDKaalloc_L(const UINT size, const UINT alignment, MEMORY_SECTION s) { + void *addr, *result = NULL; + addr = FDKcalloc_L(1, size + alignment + (UINT)sizeof(void *), + s); /* Malloc and clear memory. */ + + if (addr != NULL) { + result = ALIGN_PTR((unsigned char *)addr + + sizeof(void *)); /* Get aligned memory base address. */ + *(((void **)result) - 1) = addr; /* Save malloc'ed memory pointer. */ + C_ALLOC_ALIGNED_REGISTER(result, size); + } + + return result; /* Return aligned address. */ +} + +void FDKafree_L(void *ptr) { + void *addr; + + addr = *(((void **)ptr) - 1); /* Get pointer to malloc'ed memory. */ + + C_ALLOC_ALIGNED_UNREGISTER(ptr); + + FDKfree_L(addr); /* Free malloc'ed memory area. */ +} + +/*--------------------------------------------------------------------------------------- + * FUNCTION: FDKmemcpy + * DESCRIPTION: - copies memory from "src" to "dst" with length "size" bytes + * - compiled with FDK_DEBUG will give you warnings + *---------------------------------------------------------------------------------------*/ +void FDKmemcpy(void *dst, const void *src, const UINT size) { + /* -- check for overlapping memory areas -- */ + FDK_ASSERT(((const unsigned char *)dst - (const unsigned char *)src) >= + (ptrdiff_t)size || + ((const unsigned char *)src - (const unsigned char *)dst) >= + (ptrdiff_t)size); + + /* do the copy */ + memcpy(dst, src, size); +} + +void FDKmemmove(void *dst, const void *src, const UINT size) { + memmove(dst, src, size); +} + +void FDKmemset(void *memPtr, const INT value, const UINT size) { + memset(memPtr, value, size); +} + +void FDKmemclear(void *memPtr, const UINT size) { FDKmemset(memPtr, 0, size); } + +UINT FDKstrlen(const char *s) { return (UINT)strlen(s); } + +/* Compare function wrappers */ +INT FDKmemcmp(const void *s1, const void *s2, const UINT size) { + return memcmp(s1, s2, size); +} +INT FDKstrcmp(const char *s1, const char *s2) { return strcmp(s1, s2); } +INT FDKstrncmp(const char *s1, const char *s2, const UINT size) { + return strncmp(s1, s2, size); +} + +int IS_LITTLE_ENDIAN(void) { + int __dummy = 1; + return (*((UCHAR *)(&(__dummy)))); +} + +UINT TO_LITTLE_ENDIAN(UINT val) { + return IS_LITTLE_ENDIAN() + ? val + : (((val & 0xff) << 24) | ((val & 0xff00) << 8) | + ((val & 0xff0000) >> 8) | ((val & 0xff000000) >> 24)); +} + +/* ==================== FILE I/O ====================== */ + +FDKFILE *FDKfopen(const char *filename, const char *mode) { + return fopen(filename, mode); +} +INT FDKfclose(FDKFILE *fp) { return fclose((FILE *)fp); } +INT FDKfseek(FDKFILE *fp, LONG OFFSET, int WHENCE) { + return fseek((FILE *)fp, OFFSET, WHENCE); +} +INT FDKftell(FDKFILE *fp) { return ftell((FILE *)fp); } +INT FDKfflush(FDKFILE *fp) { return fflush((FILE *)fp); } +const INT FDKSEEK_SET = SEEK_SET; +const INT FDKSEEK_CUR = SEEK_CUR; +const INT FDKSEEK_END = SEEK_END; + +UINT FDKfwrite(const void *ptrf, INT size, UINT nmemb, FDKFILE *fp) { + return (UINT)fwrite(ptrf, size, nmemb, (FILE *)fp); +} +UINT FDKfread(void *dst, INT size, UINT nmemb, FDKFILE *fp) { + return (UINT)fread(dst, size, nmemb, (FILE *)fp); +} +char *FDKfgets(void *dst, INT size, FDKFILE *fp) { + return fgets((char *)dst, size, (FILE *)fp); +} +void FDKrewind(FDKFILE *fp) { FDKfseek((FILE *)fp, 0, FDKSEEK_SET); } + +UINT FDKfwrite_EL(const void *ptrf, INT size, UINT nmemb, FDKFILE *fp) { + if (IS_LITTLE_ENDIAN()) { + FDKfwrite(ptrf, size, nmemb, fp); + } else { + UINT n; + INT s; + + const UCHAR *ptr = (const UCHAR *)ptrf; + + for (n = 0; n < nmemb; n++) { + for (s = size - 1; s >= 0; s--) { + FDKfwrite(ptr + s, 1, 1, fp); + } + ptr = ptr + size; + } + } + return nmemb; +} + +UINT FDKfread_EL(void *dst, INT size, UINT nmemb, FDKFILE *fp) { + UINT n, s0, s1, err; + UCHAR tmp, *ptr; + UCHAR tmp24[3]; + + /* Enforce alignment of 24 bit data. */ + if (size == 3) { + ptr = (UCHAR *)dst; + for (n = 0; n < nmemb; n++) { + if ((err = FDKfread(tmp24, 1, 3, fp)) != 3) { + return err; + } + *ptr++ = tmp24[0]; + *ptr++ = tmp24[1]; + *ptr++ = tmp24[2]; + /* Sign extension */ + if (tmp24[2] & 0x80) { + *ptr++ = 0xff; + } else { + *ptr++ = 0; + } + } + err = nmemb; + size = sizeof(LONG); + } else { + if ((err = FDKfread(dst, size, nmemb, fp)) != nmemb) { + return err; + } + } + if (!IS_LITTLE_ENDIAN() && size > 1) { + ptr = (UCHAR *)dst; + for (n = 0; n < nmemb; n++) { + for (s0 = 0, s1 = size - 1; s0 < s1; s0++, s1--) { + tmp = ptr[s0]; + ptr[s0] = ptr[s1]; + ptr[s1] = tmp; + } + ptr += size; + } + } + return err; +} + +INT FDKfeof(FDKFILE *fp) { return feof((FILE *)fp); } + +/* Global initialization/cleanup */ + +void FDKprintDisclaimer(void) { + FDKprintf( + "This program is protected by copyright law and international treaties.\n" + "Any reproduction or distribution of this program, or any portion\n" + "of it, may result in severe civil and criminal penalties, and will be\n" + "prosecuted to the maximum extent possible under law.\n\n"); +} |