1*e5436536SAndroid Build Coastguard Worker /* ----------------------------------------------------------------------------- 2*e5436536SAndroid Build Coastguard Worker Software License for The Fraunhofer FDK AAC Codec Library for Android 3*e5436536SAndroid Build Coastguard Worker 4*e5436536SAndroid Build Coastguard Worker © Copyright 1995 - 2018 Fraunhofer-Gesellschaft zur Förderung der angewandten 5*e5436536SAndroid Build Coastguard Worker Forschung e.V. All rights reserved. 6*e5436536SAndroid Build Coastguard Worker 7*e5436536SAndroid Build Coastguard Worker 1. INTRODUCTION 8*e5436536SAndroid Build Coastguard Worker The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software 9*e5436536SAndroid Build Coastguard Worker that implements the MPEG Advanced Audio Coding ("AAC") encoding and decoding 10*e5436536SAndroid Build Coastguard Worker scheme for digital audio. This FDK AAC Codec software is intended to be used on 11*e5436536SAndroid Build Coastguard Worker a wide variety of Android devices. 12*e5436536SAndroid Build Coastguard Worker 13*e5436536SAndroid Build Coastguard Worker AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient 14*e5436536SAndroid Build Coastguard Worker general perceptual audio codecs. AAC-ELD is considered the best-performing 15*e5436536SAndroid Build Coastguard Worker full-bandwidth communications codec by independent studies and is widely 16*e5436536SAndroid Build Coastguard Worker deployed. AAC has been standardized by ISO and IEC as part of the MPEG 17*e5436536SAndroid Build Coastguard Worker specifications. 18*e5436536SAndroid Build Coastguard Worker 19*e5436536SAndroid Build Coastguard Worker Patent licenses for necessary patent claims for the FDK AAC Codec (including 20*e5436536SAndroid Build Coastguard Worker those of Fraunhofer) may be obtained through Via Licensing 21*e5436536SAndroid Build Coastguard Worker (www.vialicensing.com) or through the respective patent owners individually for 22*e5436536SAndroid Build Coastguard Worker the purpose of encoding or decoding bit streams in products that are compliant 23*e5436536SAndroid Build Coastguard Worker with the ISO/IEC MPEG audio standards. Please note that most manufacturers of 24*e5436536SAndroid Build Coastguard Worker Android devices already license these patent claims through Via Licensing or 25*e5436536SAndroid Build Coastguard Worker directly from the patent owners, and therefore FDK AAC Codec software may 26*e5436536SAndroid Build Coastguard Worker already be covered under those patent licenses when it is used for those 27*e5436536SAndroid Build Coastguard Worker licensed purposes only. 28*e5436536SAndroid Build Coastguard Worker 29*e5436536SAndroid Build Coastguard Worker Commercially-licensed AAC software libraries, including floating-point versions 30*e5436536SAndroid Build Coastguard Worker with enhanced sound quality, are also available from Fraunhofer. Users are 31*e5436536SAndroid Build Coastguard Worker encouraged to check the Fraunhofer website for additional applications 32*e5436536SAndroid Build Coastguard Worker information and documentation. 33*e5436536SAndroid Build Coastguard Worker 34*e5436536SAndroid Build Coastguard Worker 2. COPYRIGHT LICENSE 35*e5436536SAndroid Build Coastguard Worker 36*e5436536SAndroid Build Coastguard Worker Redistribution and use in source and binary forms, with or without modification, 37*e5436536SAndroid Build Coastguard Worker are permitted without payment of copyright license fees provided that you 38*e5436536SAndroid Build Coastguard Worker satisfy the following conditions: 39*e5436536SAndroid Build Coastguard Worker 40*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in redistributions of 41*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec or your modifications thereto in source code form. 42*e5436536SAndroid Build Coastguard Worker 43*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in the documentation 44*e5436536SAndroid Build Coastguard Worker and/or other materials provided with redistributions of the FDK AAC Codec or 45*e5436536SAndroid Build Coastguard Worker your modifications thereto in binary form. You must make available free of 46*e5436536SAndroid Build Coastguard Worker charge copies of the complete source code of the FDK AAC Codec and your 47*e5436536SAndroid Build Coastguard Worker modifications thereto to recipients of copies in binary form. 48*e5436536SAndroid Build Coastguard Worker 49*e5436536SAndroid Build Coastguard Worker The name of Fraunhofer may not be used to endorse or promote products derived 50*e5436536SAndroid Build Coastguard Worker from this library without prior written permission. 51*e5436536SAndroid Build Coastguard Worker 52*e5436536SAndroid Build Coastguard Worker You may not charge copyright license fees for anyone to use, copy or distribute 53*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec software or your modifications thereto. 54*e5436536SAndroid Build Coastguard Worker 55*e5436536SAndroid Build Coastguard Worker Your modified versions of the FDK AAC Codec must carry prominent notices stating 56*e5436536SAndroid Build Coastguard Worker that you changed the software and the date of any change. For modified versions 57*e5436536SAndroid Build Coastguard Worker of the FDK AAC Codec, the term "Fraunhofer FDK AAC Codec Library for Android" 58*e5436536SAndroid Build Coastguard Worker must be replaced by the term "Third-Party Modified Version of the Fraunhofer FDK 59*e5436536SAndroid Build Coastguard Worker AAC Codec Library for Android." 60*e5436536SAndroid Build Coastguard Worker 61*e5436536SAndroid Build Coastguard Worker 3. NO PATENT LICENSE 62*e5436536SAndroid Build Coastguard Worker 63*e5436536SAndroid Build Coastguard Worker NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without 64*e5436536SAndroid Build Coastguard Worker limitation the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE. 65*e5436536SAndroid Build Coastguard Worker Fraunhofer provides no warranty of patent non-infringement with respect to this 66*e5436536SAndroid Build Coastguard Worker software. 67*e5436536SAndroid Build Coastguard Worker 68*e5436536SAndroid Build Coastguard Worker You may use this FDK AAC Codec software or modifications thereto only for 69*e5436536SAndroid Build Coastguard Worker purposes that are authorized by appropriate patent licenses. 70*e5436536SAndroid Build Coastguard Worker 71*e5436536SAndroid Build Coastguard Worker 4. DISCLAIMER 72*e5436536SAndroid Build Coastguard Worker 73*e5436536SAndroid Build Coastguard Worker This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright 74*e5436536SAndroid Build Coastguard Worker holders and contributors "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, 75*e5436536SAndroid Build Coastguard Worker including but not limited to the implied warranties of merchantability and 76*e5436536SAndroid Build Coastguard Worker fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 77*e5436536SAndroid Build Coastguard Worker CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, 78*e5436536SAndroid Build Coastguard Worker or consequential damages, including but not limited to procurement of substitute 79*e5436536SAndroid Build Coastguard Worker goods or services; loss of use, data, or profits, or business interruption, 80*e5436536SAndroid Build Coastguard Worker however caused and on any theory of liability, whether in contract, strict 81*e5436536SAndroid Build Coastguard Worker liability, or tort (including negligence), arising in any way out of the use of 82*e5436536SAndroid Build Coastguard Worker this software, even if advised of the possibility of such damage. 83*e5436536SAndroid Build Coastguard Worker 84*e5436536SAndroid Build Coastguard Worker 5. CONTACT INFORMATION 85*e5436536SAndroid Build Coastguard Worker 86*e5436536SAndroid Build Coastguard Worker Fraunhofer Institute for Integrated Circuits IIS 87*e5436536SAndroid Build Coastguard Worker Attention: Audio and Multimedia Departments - FDK AAC LL 88*e5436536SAndroid Build Coastguard Worker Am Wolfsmantel 33 89*e5436536SAndroid Build Coastguard Worker 91058 Erlangen, Germany 90*e5436536SAndroid Build Coastguard Worker 91*e5436536SAndroid Build Coastguard Worker www.iis.fraunhofer.de/amm 92*e5436536SAndroid Build Coastguard Worker [email protected] 93*e5436536SAndroid Build Coastguard Worker ----------------------------------------------------------------------------- */ 94*e5436536SAndroid Build Coastguard Worker 95*e5436536SAndroid Build Coastguard Worker /************************* System integration library ************************** 96*e5436536SAndroid Build Coastguard Worker 97*e5436536SAndroid Build Coastguard Worker Author(s): 98*e5436536SAndroid Build Coastguard Worker 99*e5436536SAndroid Build Coastguard Worker Description: 100*e5436536SAndroid Build Coastguard Worker 101*e5436536SAndroid Build Coastguard Worker *******************************************************************************/ 102*e5436536SAndroid Build Coastguard Worker 103*e5436536SAndroid Build Coastguard Worker /** \file genericStds.h 104*e5436536SAndroid Build Coastguard Worker \brief Generic Run-Time Support function wrappers and heap allocation 105*e5436536SAndroid Build Coastguard Worker monitoring. 106*e5436536SAndroid Build Coastguard Worker */ 107*e5436536SAndroid Build Coastguard Worker 108*e5436536SAndroid Build Coastguard Worker #if !defined(GENERICSTDS_H) 109*e5436536SAndroid Build Coastguard Worker #define GENERICSTDS_H 110*e5436536SAndroid Build Coastguard Worker 111*e5436536SAndroid Build Coastguard Worker #include "machine_type.h" 112*e5436536SAndroid Build Coastguard Worker 113*e5436536SAndroid Build Coastguard Worker #ifndef M_PI 114*e5436536SAndroid Build Coastguard Worker #define M_PI 3.14159265358979323846 /*!< Pi. Only used in example projects. */ 115*e5436536SAndroid Build Coastguard Worker #endif 116*e5436536SAndroid Build Coastguard Worker 117*e5436536SAndroid Build Coastguard Worker /** 118*e5436536SAndroid Build Coastguard Worker * Identifiers for various memory locations. They are used along with memory 119*e5436536SAndroid Build Coastguard Worker * allocation functions like FDKcalloc_L() to specify the requested memory's 120*e5436536SAndroid Build Coastguard Worker * location. 121*e5436536SAndroid Build Coastguard Worker */ 122*e5436536SAndroid Build Coastguard Worker typedef enum { 123*e5436536SAndroid Build Coastguard Worker /* Internal */ 124*e5436536SAndroid Build Coastguard Worker SECT_DATA_L1 = 0x2000, 125*e5436536SAndroid Build Coastguard Worker SECT_DATA_L2, 126*e5436536SAndroid Build Coastguard Worker SECT_DATA_L1_A, 127*e5436536SAndroid Build Coastguard Worker SECT_DATA_L1_B, 128*e5436536SAndroid Build Coastguard Worker SECT_CONSTDATA_L1, 129*e5436536SAndroid Build Coastguard Worker 130*e5436536SAndroid Build Coastguard Worker /* External */ 131*e5436536SAndroid Build Coastguard Worker SECT_DATA_EXTERN = 0x4000, 132*e5436536SAndroid Build Coastguard Worker SECT_CONSTDATA_EXTERN 133*e5436536SAndroid Build Coastguard Worker 134*e5436536SAndroid Build Coastguard Worker } MEMORY_SECTION; 135*e5436536SAndroid Build Coastguard Worker 136*e5436536SAndroid Build Coastguard Worker /*! \addtogroup SYSLIB_MEMORY_MACROS FDK memory macros 137*e5436536SAndroid Build Coastguard Worker * 138*e5436536SAndroid Build Coastguard Worker * The \c H_ prefix indicates that the macro is to be used in a header file, the 139*e5436536SAndroid Build Coastguard Worker * \c C_ prefix indicates that the macro is to be used in a source file. 140*e5436536SAndroid Build Coastguard Worker * 141*e5436536SAndroid Build Coastguard Worker * Declaring memory areas requires to specify a unique name and a data type. 142*e5436536SAndroid Build Coastguard Worker * 143*e5436536SAndroid Build Coastguard Worker * For defining a memory area you require additionally one or two sizes, 144*e5436536SAndroid Build Coastguard Worker * depending if the memory should be organized into one or two dimensions. 145*e5436536SAndroid Build Coastguard Worker * 146*e5436536SAndroid Build Coastguard Worker * The macros containing the keyword \c AALLOC instead of \c ALLOC additionally 147*e5436536SAndroid Build Coastguard Worker * take care of returning aligned memory addresses (beyond the natural alignment 148*e5436536SAndroid Build Coastguard Worker * of its type). The preprocesor macro 149*e5436536SAndroid Build Coastguard Worker * ::ALIGNMENT_DEFAULT indicates the aligment to be used (this is hardware 150*e5436536SAndroid Build Coastguard Worker * specific). 151*e5436536SAndroid Build Coastguard Worker * 152*e5436536SAndroid Build Coastguard Worker * The \c _L suffix indicates that the memory will be located in a specific 153*e5436536SAndroid Build Coastguard Worker * section. This is useful to allocate critical memory section into fast 154*e5436536SAndroid Build Coastguard Worker * internal SRAM for example. 155*e5436536SAndroid Build Coastguard Worker * 156*e5436536SAndroid Build Coastguard Worker * @{ 157*e5436536SAndroid Build Coastguard Worker */ 158*e5436536SAndroid Build Coastguard Worker 159*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 160*e5436536SAndroid Build Coastguard Worker #define H_ALLOC_MEM(name, type) \ 161*e5436536SAndroid Build Coastguard Worker type *Get##name(int n = 0); \ 162*e5436536SAndroid Build Coastguard Worker void Free##name(type **p); \ 163*e5436536SAndroid Build Coastguard Worker UINT GetRequiredMem##name(void); 164*e5436536SAndroid Build Coastguard Worker 165*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 166*e5436536SAndroid Build Coastguard Worker #define H_ALLOC_MEM_OVERLAY(name, type) \ 167*e5436536SAndroid Build Coastguard Worker type *Get##name(int n = 0); \ 168*e5436536SAndroid Build Coastguard Worker void Free##name(type **p); \ 169*e5436536SAndroid Build Coastguard Worker UINT GetRequiredMem##name(void); 170*e5436536SAndroid Build Coastguard Worker 171*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 172*e5436536SAndroid Build Coastguard Worker #define C_ALLOC_MEM(name, type, num) \ 173*e5436536SAndroid Build Coastguard Worker type *Get##name(int n) { \ 174*e5436536SAndroid Build Coastguard Worker FDK_ASSERT((n) == 0); \ 175*e5436536SAndroid Build Coastguard Worker return ((type *)FDKcalloc(num, sizeof(type))); \ 176*e5436536SAndroid Build Coastguard Worker } \ 177*e5436536SAndroid Build Coastguard Worker void Free##name(type **p) { \ 178*e5436536SAndroid Build Coastguard Worker if (p != NULL) { \ 179*e5436536SAndroid Build Coastguard Worker FDKfree(*p); \ 180*e5436536SAndroid Build Coastguard Worker *p = NULL; \ 181*e5436536SAndroid Build Coastguard Worker } \ 182*e5436536SAndroid Build Coastguard Worker } \ 183*e5436536SAndroid Build Coastguard Worker UINT GetRequiredMem##name(void) { \ 184*e5436536SAndroid Build Coastguard Worker return ALGN_SIZE_EXTRES((num) * sizeof(type)); \ 185*e5436536SAndroid Build Coastguard Worker } 186*e5436536SAndroid Build Coastguard Worker 187*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 188*e5436536SAndroid Build Coastguard Worker #define C_ALLOC_MEM2(name, type, n1, n2) \ 189*e5436536SAndroid Build Coastguard Worker type *Get##name(int n) { \ 190*e5436536SAndroid Build Coastguard Worker FDK_ASSERT((n) < (n2)); \ 191*e5436536SAndroid Build Coastguard Worker return ((type *)FDKcalloc(n1, sizeof(type))); \ 192*e5436536SAndroid Build Coastguard Worker } \ 193*e5436536SAndroid Build Coastguard Worker void Free##name(type **p) { \ 194*e5436536SAndroid Build Coastguard Worker if (p != NULL) { \ 195*e5436536SAndroid Build Coastguard Worker FDKfree(*p); \ 196*e5436536SAndroid Build Coastguard Worker *p = NULL; \ 197*e5436536SAndroid Build Coastguard Worker } \ 198*e5436536SAndroid Build Coastguard Worker } \ 199*e5436536SAndroid Build Coastguard Worker UINT GetRequiredMem##name(void) { \ 200*e5436536SAndroid Build Coastguard Worker return ALGN_SIZE_EXTRES((n1) * sizeof(type)) * (n2); \ 201*e5436536SAndroid Build Coastguard Worker } 202*e5436536SAndroid Build Coastguard Worker 203*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 204*e5436536SAndroid Build Coastguard Worker #define C_AALLOC_MEM(name, type, num) \ 205*e5436536SAndroid Build Coastguard Worker type *Get##name(int n) { \ 206*e5436536SAndroid Build Coastguard Worker type *ap; \ 207*e5436536SAndroid Build Coastguard Worker FDK_ASSERT((n) == 0); \ 208*e5436536SAndroid Build Coastguard Worker ap = ((type *)FDKaalloc((num) * sizeof(type), ALIGNMENT_DEFAULT)); \ 209*e5436536SAndroid Build Coastguard Worker return ap; \ 210*e5436536SAndroid Build Coastguard Worker } \ 211*e5436536SAndroid Build Coastguard Worker void Free##name(type **p) { \ 212*e5436536SAndroid Build Coastguard Worker if (p != NULL) { \ 213*e5436536SAndroid Build Coastguard Worker FDKafree(*p); \ 214*e5436536SAndroid Build Coastguard Worker *p = NULL; \ 215*e5436536SAndroid Build Coastguard Worker } \ 216*e5436536SAndroid Build Coastguard Worker } \ 217*e5436536SAndroid Build Coastguard Worker UINT GetRequiredMem##name(void) { \ 218*e5436536SAndroid Build Coastguard Worker return ALGN_SIZE_EXTRES((num) * sizeof(type) + ALIGNMENT_DEFAULT + \ 219*e5436536SAndroid Build Coastguard Worker sizeof(void *)); \ 220*e5436536SAndroid Build Coastguard Worker } 221*e5436536SAndroid Build Coastguard Worker 222*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 223*e5436536SAndroid Build Coastguard Worker #define C_AALLOC_MEM2(name, type, n1, n2) \ 224*e5436536SAndroid Build Coastguard Worker type *Get##name(int n) { \ 225*e5436536SAndroid Build Coastguard Worker type *ap; \ 226*e5436536SAndroid Build Coastguard Worker FDK_ASSERT((n) < (n2)); \ 227*e5436536SAndroid Build Coastguard Worker ap = ((type *)FDKaalloc((n1) * sizeof(type), ALIGNMENT_DEFAULT)); \ 228*e5436536SAndroid Build Coastguard Worker return ap; \ 229*e5436536SAndroid Build Coastguard Worker } \ 230*e5436536SAndroid Build Coastguard Worker void Free##name(type **p) { \ 231*e5436536SAndroid Build Coastguard Worker if (p != NULL) { \ 232*e5436536SAndroid Build Coastguard Worker FDKafree(*p); \ 233*e5436536SAndroid Build Coastguard Worker *p = NULL; \ 234*e5436536SAndroid Build Coastguard Worker } \ 235*e5436536SAndroid Build Coastguard Worker } \ 236*e5436536SAndroid Build Coastguard Worker UINT GetRequiredMem##name(void) { \ 237*e5436536SAndroid Build Coastguard Worker return ALGN_SIZE_EXTRES((n1) * sizeof(type) + ALIGNMENT_DEFAULT + \ 238*e5436536SAndroid Build Coastguard Worker sizeof(void *)) * \ 239*e5436536SAndroid Build Coastguard Worker (n2); \ 240*e5436536SAndroid Build Coastguard Worker } 241*e5436536SAndroid Build Coastguard Worker 242*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 243*e5436536SAndroid Build Coastguard Worker #define C_ALLOC_MEM_L(name, type, num, s) \ 244*e5436536SAndroid Build Coastguard Worker type *Get##name(int n) { \ 245*e5436536SAndroid Build Coastguard Worker FDK_ASSERT((n) == 0); \ 246*e5436536SAndroid Build Coastguard Worker return ((type *)FDKcalloc_L(num, sizeof(type), s)); \ 247*e5436536SAndroid Build Coastguard Worker } \ 248*e5436536SAndroid Build Coastguard Worker void Free##name(type **p) { \ 249*e5436536SAndroid Build Coastguard Worker if (p != NULL) { \ 250*e5436536SAndroid Build Coastguard Worker FDKfree_L(*p); \ 251*e5436536SAndroid Build Coastguard Worker *p = NULL; \ 252*e5436536SAndroid Build Coastguard Worker } \ 253*e5436536SAndroid Build Coastguard Worker } \ 254*e5436536SAndroid Build Coastguard Worker UINT GetRequiredMem##name(void) { \ 255*e5436536SAndroid Build Coastguard Worker return ALGN_SIZE_EXTRES((num) * sizeof(type)); \ 256*e5436536SAndroid Build Coastguard Worker } 257*e5436536SAndroid Build Coastguard Worker 258*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 259*e5436536SAndroid Build Coastguard Worker #define C_ALLOC_MEM2_L(name, type, n1, n2, s) \ 260*e5436536SAndroid Build Coastguard Worker type *Get##name(int n) { \ 261*e5436536SAndroid Build Coastguard Worker FDK_ASSERT((n) < (n2)); \ 262*e5436536SAndroid Build Coastguard Worker return (type *)FDKcalloc_L(n1, sizeof(type), s); \ 263*e5436536SAndroid Build Coastguard Worker } \ 264*e5436536SAndroid Build Coastguard Worker void Free##name(type **p) { \ 265*e5436536SAndroid Build Coastguard Worker if (p != NULL) { \ 266*e5436536SAndroid Build Coastguard Worker FDKfree_L(*p); \ 267*e5436536SAndroid Build Coastguard Worker *p = NULL; \ 268*e5436536SAndroid Build Coastguard Worker } \ 269*e5436536SAndroid Build Coastguard Worker } \ 270*e5436536SAndroid Build Coastguard Worker UINT GetRequiredMem##name(void) { \ 271*e5436536SAndroid Build Coastguard Worker return ALGN_SIZE_EXTRES((n1) * sizeof(type)) * (n2); \ 272*e5436536SAndroid Build Coastguard Worker } 273*e5436536SAndroid Build Coastguard Worker 274*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 275*e5436536SAndroid Build Coastguard Worker #define C_AALLOC_MEM_L(name, type, num, s) \ 276*e5436536SAndroid Build Coastguard Worker type *Get##name(int n) { \ 277*e5436536SAndroid Build Coastguard Worker type *ap; \ 278*e5436536SAndroid Build Coastguard Worker FDK_ASSERT((n) == 0); \ 279*e5436536SAndroid Build Coastguard Worker ap = ((type *)FDKaalloc_L((num) * sizeof(type), ALIGNMENT_DEFAULT, s)); \ 280*e5436536SAndroid Build Coastguard Worker return ap; \ 281*e5436536SAndroid Build Coastguard Worker } \ 282*e5436536SAndroid Build Coastguard Worker void Free##name(type **p) { \ 283*e5436536SAndroid Build Coastguard Worker if (p != NULL) { \ 284*e5436536SAndroid Build Coastguard Worker FDKafree_L(*p); \ 285*e5436536SAndroid Build Coastguard Worker *p = NULL; \ 286*e5436536SAndroid Build Coastguard Worker } \ 287*e5436536SAndroid Build Coastguard Worker } \ 288*e5436536SAndroid Build Coastguard Worker UINT GetRequiredMem##name(void) { \ 289*e5436536SAndroid Build Coastguard Worker return ALGN_SIZE_EXTRES((num) * sizeof(type) + ALIGNMENT_DEFAULT + \ 290*e5436536SAndroid Build Coastguard Worker sizeof(void *)); \ 291*e5436536SAndroid Build Coastguard Worker } 292*e5436536SAndroid Build Coastguard Worker 293*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 294*e5436536SAndroid Build Coastguard Worker #define C_AALLOC_MEM2_L(name, type, n1, n2, s) \ 295*e5436536SAndroid Build Coastguard Worker type *Get##name(int n) { \ 296*e5436536SAndroid Build Coastguard Worker type *ap; \ 297*e5436536SAndroid Build Coastguard Worker FDK_ASSERT((n) < (n2)); \ 298*e5436536SAndroid Build Coastguard Worker ap = ((type *)FDKaalloc_L((n1) * sizeof(type), ALIGNMENT_DEFAULT, s)); \ 299*e5436536SAndroid Build Coastguard Worker return ap; \ 300*e5436536SAndroid Build Coastguard Worker } \ 301*e5436536SAndroid Build Coastguard Worker void Free##name(type **p) { \ 302*e5436536SAndroid Build Coastguard Worker if (p != NULL) { \ 303*e5436536SAndroid Build Coastguard Worker FDKafree_L(*p); \ 304*e5436536SAndroid Build Coastguard Worker *p = NULL; \ 305*e5436536SAndroid Build Coastguard Worker } \ 306*e5436536SAndroid Build Coastguard Worker } \ 307*e5436536SAndroid Build Coastguard Worker UINT GetRequiredMem##name(void) { \ 308*e5436536SAndroid Build Coastguard Worker return ALGN_SIZE_EXTRES((n1) * sizeof(type) + ALIGNMENT_DEFAULT + \ 309*e5436536SAndroid Build Coastguard Worker sizeof(void *)) * \ 310*e5436536SAndroid Build Coastguard Worker (n2); \ 311*e5436536SAndroid Build Coastguard Worker } 312*e5436536SAndroid Build Coastguard Worker 313*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 314*e5436536SAndroid Build Coastguard Worker #define C_ALLOC_MEM_OVERLAY(name, type, num, sect, tag) \ 315*e5436536SAndroid Build Coastguard Worker C_AALLOC_MEM_L(name, type, num, sect) 316*e5436536SAndroid Build Coastguard Worker 317*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 318*e5436536SAndroid Build Coastguard Worker #define C_AALLOC_SCRATCH_START(name, type, n) \ 319*e5436536SAndroid Build Coastguard Worker type _##name[(n) + (ALIGNMENT_DEFAULT + sizeof(type) - 1)]; \ 320*e5436536SAndroid Build Coastguard Worker type *name = (type *)ALIGN_PTR(_##name); \ 321*e5436536SAndroid Build Coastguard Worker C_ALLOC_ALIGNED_REGISTER(name, (n) * sizeof(type)); 322*e5436536SAndroid Build Coastguard Worker 323*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 324*e5436536SAndroid Build Coastguard Worker #define C_ALLOC_SCRATCH_START(name, type, n) type name[n]; 325*e5436536SAndroid Build Coastguard Worker 326*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 327*e5436536SAndroid Build Coastguard Worker #define C_AALLOC_SCRATCH_END(name, type, n) C_ALLOC_ALIGNED_UNREGISTER(name); 328*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 329*e5436536SAndroid Build Coastguard Worker #define C_ALLOC_SCRATCH_END(name, type, n) 330*e5436536SAndroid Build Coastguard Worker 331*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 332*e5436536SAndroid Build Coastguard Worker #define C_AALLOC_STACK_START(name, type, n) \ 333*e5436536SAndroid Build Coastguard Worker type _##name[(n) + (ALIGNMENT_DEFAULT + sizeof(type) - 1)]; \ 334*e5436536SAndroid Build Coastguard Worker type *name = (type *)ALIGN_PTR(_##name); \ 335*e5436536SAndroid Build Coastguard Worker C_ALLOC_ALIGNED_REGISTER(name, (n) * sizeof(type)); 336*e5436536SAndroid Build Coastguard Worker 337*e5436536SAndroid Build Coastguard Worker /** See \ref SYSLIB_MEMORY_MACROS for description. */ 338*e5436536SAndroid Build Coastguard Worker #define C_AALLOC_STACK_END(name, type, n) C_ALLOC_ALIGNED_UNREGISTER(name); 339*e5436536SAndroid Build Coastguard Worker 340*e5436536SAndroid Build Coastguard Worker /*! @} */ 341*e5436536SAndroid Build Coastguard Worker 342*e5436536SAndroid Build Coastguard Worker #define C_ALLOC_ALIGNED_REGISTER(x, size) 343*e5436536SAndroid Build Coastguard Worker #define C_ALLOC_ALIGNED_UNREGISTER(x) 344*e5436536SAndroid Build Coastguard Worker #define C_ALLOC_ALIGNED_CHECK(x) 345*e5436536SAndroid Build Coastguard Worker #define C_ALLOC_ALIGNED_CHECK2(x, y) 346*e5436536SAndroid Build Coastguard Worker #define FDK_showBacktrace(a, b) 347*e5436536SAndroid Build Coastguard Worker 348*e5436536SAndroid Build Coastguard Worker /*! \addtogroup SYSLIB_EXITCODES Unified exit codes 349*e5436536SAndroid Build Coastguard Worker * Exit codes to be used as return values of FDK software test and 350*e5436536SAndroid Build Coastguard Worker * demonstration applications. Not as return values of product modules and/or 351*e5436536SAndroid Build Coastguard Worker * libraries. 352*e5436536SAndroid Build Coastguard Worker * @{ 353*e5436536SAndroid Build Coastguard Worker */ 354*e5436536SAndroid Build Coastguard Worker #define FDK_EXITCODE_OK 0 /*!< Successful termination. No errors. */ 355*e5436536SAndroid Build Coastguard Worker #define FDK_EXITCODE_USAGE \ 356*e5436536SAndroid Build Coastguard Worker 64 /*!< The command/application was used incorrectly, e.g. with the wrong \ 357*e5436536SAndroid Build Coastguard Worker number of arguments, a bad flag, a bad syntax in a parameter, or \ 358*e5436536SAndroid Build Coastguard Worker whatever. */ 359*e5436536SAndroid Build Coastguard Worker #define FDK_EXITCODE_DATAERROR \ 360*e5436536SAndroid Build Coastguard Worker 65 /*!< The input data was incorrect in some way. This should only be used \ 361*e5436536SAndroid Build Coastguard Worker for user data and not system files. */ 362*e5436536SAndroid Build Coastguard Worker #define FDK_EXITCODE_NOINPUT \ 363*e5436536SAndroid Build Coastguard Worker 66 /*!< An input file (not a system file) did not exist or was not readable. \ 364*e5436536SAndroid Build Coastguard Worker */ 365*e5436536SAndroid Build Coastguard Worker #define FDK_EXITCODE_UNAVAILABLE \ 366*e5436536SAndroid Build Coastguard Worker 69 /*!< A service is unavailable. This can occur if a support program or \ 367*e5436536SAndroid Build Coastguard Worker file does not exist. This can also be used as a catchall message when \ 368*e5436536SAndroid Build Coastguard Worker something you wanted to do doesn't work, but you don't know why. */ 369*e5436536SAndroid Build Coastguard Worker #define FDK_EXITCODE_SOFTWARE \ 370*e5436536SAndroid Build Coastguard Worker 70 /*!< An internal software error has been detected. This should be limited \ 371*e5436536SAndroid Build Coastguard Worker to non- operating system related errors as possible. */ 372*e5436536SAndroid Build Coastguard Worker #define FDK_EXITCODE_CANTCREATE \ 373*e5436536SAndroid Build Coastguard Worker 73 /*!< A (user specified) output file cannot be created. */ 374*e5436536SAndroid Build Coastguard Worker #define FDK_EXITCODE_IOERROR \ 375*e5436536SAndroid Build Coastguard Worker 74 /*!< An error occurred while doing I/O on some file. */ 376*e5436536SAndroid Build Coastguard Worker /*! @} */ 377*e5436536SAndroid Build Coastguard Worker 378*e5436536SAndroid Build Coastguard Worker /*-------------------------------------------- 379*e5436536SAndroid Build Coastguard Worker * Runtime support declarations 380*e5436536SAndroid Build Coastguard Worker *---------------------------------------------*/ 381*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus 382*e5436536SAndroid Build Coastguard Worker extern "C" { 383*e5436536SAndroid Build Coastguard Worker #endif 384*e5436536SAndroid Build Coastguard Worker 385*e5436536SAndroid Build Coastguard Worker void FDKprintf(const char *szFmt, ...); 386*e5436536SAndroid Build Coastguard Worker 387*e5436536SAndroid Build Coastguard Worker void FDKprintfErr(const char *szFmt, ...); 388*e5436536SAndroid Build Coastguard Worker 389*e5436536SAndroid Build Coastguard Worker /** Wrapper for <stdio.h>'s getchar(). */ 390*e5436536SAndroid Build Coastguard Worker int FDKgetchar(void); 391*e5436536SAndroid Build Coastguard Worker 392*e5436536SAndroid Build Coastguard Worker INT FDKfprintf(void *stream, const char *format, ...); 393*e5436536SAndroid Build Coastguard Worker INT FDKsprintf(char *str, const char *format, ...); 394*e5436536SAndroid Build Coastguard Worker 395*e5436536SAndroid Build Coastguard Worker char *FDKstrchr(char *s, INT c); 396*e5436536SAndroid Build Coastguard Worker const char *FDKstrstr(const char *haystack, const char *needle); 397*e5436536SAndroid Build Coastguard Worker char *FDKstrcpy(char *dest, const char *src); 398*e5436536SAndroid Build Coastguard Worker char *FDKstrncpy(char *dest, const char *src, const UINT n); 399*e5436536SAndroid Build Coastguard Worker 400*e5436536SAndroid Build Coastguard Worker #define FDK_MAX_OVERLAYS 8 /**< Maximum number of memory overlays. */ 401*e5436536SAndroid Build Coastguard Worker 402*e5436536SAndroid Build Coastguard Worker void *FDKcalloc(const UINT n, const UINT size); 403*e5436536SAndroid Build Coastguard Worker void *FDKmalloc(const UINT size); 404*e5436536SAndroid Build Coastguard Worker void FDKfree(void *ptr); 405*e5436536SAndroid Build Coastguard Worker 406*e5436536SAndroid Build Coastguard Worker /** 407*e5436536SAndroid Build Coastguard Worker * Allocate and clear an aligned memory area. Use FDKafree() instead of 408*e5436536SAndroid Build Coastguard Worker * FDKfree() for these memory areas. 409*e5436536SAndroid Build Coastguard Worker * 410*e5436536SAndroid Build Coastguard Worker * \param size Size of requested memory in bytes. 411*e5436536SAndroid Build Coastguard Worker * \param alignment Alignment of requested memory in bytes. 412*e5436536SAndroid Build Coastguard Worker * \return Pointer to allocated memory. 413*e5436536SAndroid Build Coastguard Worker */ 414*e5436536SAndroid Build Coastguard Worker void *FDKaalloc(const UINT size, const UINT alignment); 415*e5436536SAndroid Build Coastguard Worker 416*e5436536SAndroid Build Coastguard Worker /** 417*e5436536SAndroid Build Coastguard Worker * Free an aligned memory area. 418*e5436536SAndroid Build Coastguard Worker * 419*e5436536SAndroid Build Coastguard Worker * \param ptr Pointer to be freed. 420*e5436536SAndroid Build Coastguard Worker */ 421*e5436536SAndroid Build Coastguard Worker void FDKafree(void *ptr); 422*e5436536SAndroid Build Coastguard Worker 423*e5436536SAndroid Build Coastguard Worker /** 424*e5436536SAndroid Build Coastguard Worker * Allocate memory in a specific memory section. 425*e5436536SAndroid Build Coastguard Worker * Requests can be made for internal or external memory. If internal memory is 426*e5436536SAndroid Build Coastguard Worker * requested, FDKcalloc_L() first tries to use L1 memory, which sizes are 427*e5436536SAndroid Build Coastguard Worker * defined by ::DATA_L1_A_SIZE and ::DATA_L1_B_SIZE. If no L1 memory is 428*e5436536SAndroid Build Coastguard Worker * available, then FDKcalloc_L() tries to use L2 memory. If that fails as well, 429*e5436536SAndroid Build Coastguard Worker * the requested memory is allocated at an extern location using the fallback 430*e5436536SAndroid Build Coastguard Worker * FDKcalloc(). 431*e5436536SAndroid Build Coastguard Worker * 432*e5436536SAndroid Build Coastguard Worker * \param n See MSDN documentation on calloc(). 433*e5436536SAndroid Build Coastguard Worker * \param size See MSDN documentation on calloc(). 434*e5436536SAndroid Build Coastguard Worker * \param s Memory section. 435*e5436536SAndroid Build Coastguard Worker * \return See MSDN documentation on calloc(). 436*e5436536SAndroid Build Coastguard Worker */ 437*e5436536SAndroid Build Coastguard Worker void *FDKcalloc_L(const UINT n, const UINT size, MEMORY_SECTION s); 438*e5436536SAndroid Build Coastguard Worker 439*e5436536SAndroid Build Coastguard Worker /** 440*e5436536SAndroid Build Coastguard Worker * Allocate aligned memory in a specific memory section. 441*e5436536SAndroid Build Coastguard Worker * See FDKcalloc_L() description for details - same applies here. 442*e5436536SAndroid Build Coastguard Worker */ 443*e5436536SAndroid Build Coastguard Worker void *FDKaalloc_L(const UINT size, const UINT alignment, MEMORY_SECTION s); 444*e5436536SAndroid Build Coastguard Worker 445*e5436536SAndroid Build Coastguard Worker /** 446*e5436536SAndroid Build Coastguard Worker * Free memory that was allocated in a specific memory section. 447*e5436536SAndroid Build Coastguard Worker */ 448*e5436536SAndroid Build Coastguard Worker void FDKfree_L(void *ptr); 449*e5436536SAndroid Build Coastguard Worker 450*e5436536SAndroid Build Coastguard Worker /** 451*e5436536SAndroid Build Coastguard Worker * Free aligned memory that was allocated in a specific memory section. 452*e5436536SAndroid Build Coastguard Worker */ 453*e5436536SAndroid Build Coastguard Worker void FDKafree_L(void *ptr); 454*e5436536SAndroid Build Coastguard Worker 455*e5436536SAndroid Build Coastguard Worker /** 456*e5436536SAndroid Build Coastguard Worker * Copy memory. Source and destination memory must not overlap. 457*e5436536SAndroid Build Coastguard Worker * Either use implementation from a Standard Library, or, if no Standard Library 458*e5436536SAndroid Build Coastguard Worker * is available, a generic implementation. 459*e5436536SAndroid Build Coastguard Worker * The define ::USE_BUILTIN_MEM_FUNCTIONS in genericStds.cpp controls what to 460*e5436536SAndroid Build Coastguard Worker * use. The function arguments correspond to the standard memcpy(). Please see 461*e5436536SAndroid Build Coastguard Worker * MSDN documentation for details on how to use it. 462*e5436536SAndroid Build Coastguard Worker */ 463*e5436536SAndroid Build Coastguard Worker void FDKmemcpy(void *dst, const void *src, const UINT size); 464*e5436536SAndroid Build Coastguard Worker 465*e5436536SAndroid Build Coastguard Worker /** 466*e5436536SAndroid Build Coastguard Worker * Copy memory. Source and destination memory are allowed to overlap. 467*e5436536SAndroid Build Coastguard Worker * Either use implementation from a Standard Library, or, if no Standard Library 468*e5436536SAndroid Build Coastguard Worker * is available, a generic implementation. 469*e5436536SAndroid Build Coastguard Worker * The define ::USE_BUILTIN_MEM_FUNCTIONS in genericStds.cpp controls what to 470*e5436536SAndroid Build Coastguard Worker * use. The function arguments correspond to the standard memmove(). Please see 471*e5436536SAndroid Build Coastguard Worker * MSDN documentation for details on how to use it. 472*e5436536SAndroid Build Coastguard Worker */ 473*e5436536SAndroid Build Coastguard Worker void FDKmemmove(void *dst, const void *src, const UINT size); 474*e5436536SAndroid Build Coastguard Worker 475*e5436536SAndroid Build Coastguard Worker /** 476*e5436536SAndroid Build Coastguard Worker * Clear memory. 477*e5436536SAndroid Build Coastguard Worker * Either use implementation from a Standard Library, or, if no Standard Library 478*e5436536SAndroid Build Coastguard Worker * is available, a generic implementation. 479*e5436536SAndroid Build Coastguard Worker * The define ::USE_BUILTIN_MEM_FUNCTIONS in genericStds.cpp controls what to 480*e5436536SAndroid Build Coastguard Worker * use. The function arguments correspond to the standard memclear(). Please see 481*e5436536SAndroid Build Coastguard Worker * MSDN documentation for details on how to use it. 482*e5436536SAndroid Build Coastguard Worker */ 483*e5436536SAndroid Build Coastguard Worker void FDKmemclear(void *memPtr, const UINT size); 484*e5436536SAndroid Build Coastguard Worker 485*e5436536SAndroid Build Coastguard Worker /** 486*e5436536SAndroid Build Coastguard Worker * Fill memory with values. 487*e5436536SAndroid Build Coastguard Worker * The function arguments correspond to the standard memset(). Please see MSDN 488*e5436536SAndroid Build Coastguard Worker * documentation for details on how to use it. 489*e5436536SAndroid Build Coastguard Worker */ 490*e5436536SAndroid Build Coastguard Worker void FDKmemset(void *memPtr, const INT value, const UINT size); 491*e5436536SAndroid Build Coastguard Worker 492*e5436536SAndroid Build Coastguard Worker /* Compare function wrappers */ 493*e5436536SAndroid Build Coastguard Worker INT FDKmemcmp(const void *s1, const void *s2, const UINT size); 494*e5436536SAndroid Build Coastguard Worker INT FDKstrcmp(const char *s1, const char *s2); 495*e5436536SAndroid Build Coastguard Worker INT FDKstrncmp(const char *s1, const char *s2, const UINT size); 496*e5436536SAndroid Build Coastguard Worker 497*e5436536SAndroid Build Coastguard Worker UINT FDKstrlen(const char *s); 498*e5436536SAndroid Build Coastguard Worker 499*e5436536SAndroid Build Coastguard Worker #define FDKmax(a, b) ((a) > (b) ? (a) : (b)) 500*e5436536SAndroid Build Coastguard Worker #define FDKmin(a, b) ((a) < (b) ? (a) : (b)) 501*e5436536SAndroid Build Coastguard Worker 502*e5436536SAndroid Build Coastguard Worker #define FDK_INT_MAX ((INT)0x7FFFFFFF) 503*e5436536SAndroid Build Coastguard Worker #define FDK_INT_MIN ((INT)0x80000000) 504*e5436536SAndroid Build Coastguard Worker 505*e5436536SAndroid Build Coastguard Worker /* FILE I/O */ 506*e5436536SAndroid Build Coastguard Worker 507*e5436536SAndroid Build Coastguard Worker /*! 508*e5436536SAndroid Build Coastguard Worker * Check platform for endianess. 509*e5436536SAndroid Build Coastguard Worker * 510*e5436536SAndroid Build Coastguard Worker * \return 1 if platform is little endian, non-1 if platform is big endian. 511*e5436536SAndroid Build Coastguard Worker */ 512*e5436536SAndroid Build Coastguard Worker int IS_LITTLE_ENDIAN(void); 513*e5436536SAndroid Build Coastguard Worker 514*e5436536SAndroid Build Coastguard Worker /*! 515*e5436536SAndroid Build Coastguard Worker * Convert input value to little endian format. 516*e5436536SAndroid Build Coastguard Worker * 517*e5436536SAndroid Build Coastguard Worker * \param val Value to be converted. It may be in both big or little endian. 518*e5436536SAndroid Build Coastguard Worker * \return Value in little endian format. 519*e5436536SAndroid Build Coastguard Worker */ 520*e5436536SAndroid Build Coastguard Worker UINT TO_LITTLE_ENDIAN(UINT val); 521*e5436536SAndroid Build Coastguard Worker 522*e5436536SAndroid Build Coastguard Worker /*! 523*e5436536SAndroid Build Coastguard Worker * \fn FDKFILE *FDKfopen(const char *filename, const char *mode); 524*e5436536SAndroid Build Coastguard Worker * Standard fopen() wrapper. 525*e5436536SAndroid Build Coastguard Worker * \fn INT FDKfclose(FDKFILE *FP); 526*e5436536SAndroid Build Coastguard Worker * Standard fclose() wrapper. 527*e5436536SAndroid Build Coastguard Worker * \fn INT FDKfseek(FDKFILE *FP, LONG OFFSET, int WHENCE); 528*e5436536SAndroid Build Coastguard Worker * Standard fseek() wrapper. 529*e5436536SAndroid Build Coastguard Worker * \fn INT FDKftell(FDKFILE *FP); 530*e5436536SAndroid Build Coastguard Worker * Standard ftell() wrapper. 531*e5436536SAndroid Build Coastguard Worker * \fn INT FDKfflush(FDKFILE *fp); 532*e5436536SAndroid Build Coastguard Worker * Standard fflush() wrapper. 533*e5436536SAndroid Build Coastguard Worker * \fn UINT FDKfwrite(const void *ptrf, INT size, UINT nmemb, FDKFILE *fp); 534*e5436536SAndroid Build Coastguard Worker * Standard fwrite() wrapper. 535*e5436536SAndroid Build Coastguard Worker * \fn UINT FDKfread(void *dst, INT size, UINT nmemb, FDKFILE *fp); 536*e5436536SAndroid Build Coastguard Worker * Standard fread() wrapper. 537*e5436536SAndroid Build Coastguard Worker */ 538*e5436536SAndroid Build Coastguard Worker typedef void FDKFILE; 539*e5436536SAndroid Build Coastguard Worker extern const INT FDKSEEK_SET, FDKSEEK_CUR, FDKSEEK_END; 540*e5436536SAndroid Build Coastguard Worker 541*e5436536SAndroid Build Coastguard Worker FDKFILE *FDKfopen(const char *filename, const char *mode); 542*e5436536SAndroid Build Coastguard Worker INT FDKfclose(FDKFILE *FP); 543*e5436536SAndroid Build Coastguard Worker INT FDKfseek(FDKFILE *FP, LONG OFFSET, int WHENCE); 544*e5436536SAndroid Build Coastguard Worker INT FDKftell(FDKFILE *FP); 545*e5436536SAndroid Build Coastguard Worker INT FDKfflush(FDKFILE *fp); 546*e5436536SAndroid Build Coastguard Worker UINT FDKfwrite(const void *ptrf, INT size, UINT nmemb, FDKFILE *fp); 547*e5436536SAndroid Build Coastguard Worker UINT FDKfread(void *dst, INT size, UINT nmemb, FDKFILE *fp); 548*e5436536SAndroid Build Coastguard Worker char *FDKfgets(void *dst, INT size, FDKFILE *fp); 549*e5436536SAndroid Build Coastguard Worker void FDKrewind(FDKFILE *fp); 550*e5436536SAndroid Build Coastguard Worker INT FDKfeof(FDKFILE *fp); 551*e5436536SAndroid Build Coastguard Worker 552*e5436536SAndroid Build Coastguard Worker /** 553*e5436536SAndroid Build Coastguard Worker * \brief Write each member in little endian order. Convert automatically 554*e5436536SAndroid Build Coastguard Worker * to host endianess. 555*e5436536SAndroid Build Coastguard Worker * \param ptrf Pointer to memory where to read data from. 556*e5436536SAndroid Build Coastguard Worker * \param size Size of each item to be written. 557*e5436536SAndroid Build Coastguard Worker * \param nmemb Number of items to be written. 558*e5436536SAndroid Build Coastguard Worker * \param fp File pointer of type FDKFILE. 559*e5436536SAndroid Build Coastguard Worker * \return Number of items read on success and fread() error on failure. 560*e5436536SAndroid Build Coastguard Worker */ 561*e5436536SAndroid Build Coastguard Worker UINT FDKfwrite_EL(const void *ptrf, INT size, UINT nmemb, FDKFILE *fp); 562*e5436536SAndroid Build Coastguard Worker 563*e5436536SAndroid Build Coastguard Worker /** 564*e5436536SAndroid Build Coastguard Worker * \brief Read variable of size "size" as little endian. Convert 565*e5436536SAndroid Build Coastguard Worker * automatically to host endianess. 4-byte alignment is enforced for 24 bit 566*e5436536SAndroid Build Coastguard Worker * data, at 32 bit full scale. 567*e5436536SAndroid Build Coastguard Worker * \param dst Pointer to memory where to store data into. 568*e5436536SAndroid Build Coastguard Worker * \param size Size of each item to be read. 569*e5436536SAndroid Build Coastguard Worker * \param nmemb Number of items to be read. 570*e5436536SAndroid Build Coastguard Worker * \param fp File pointer of type FDKFILE. 571*e5436536SAndroid Build Coastguard Worker * \return Number of items read on success and fread() error on failure. 572*e5436536SAndroid Build Coastguard Worker */ 573*e5436536SAndroid Build Coastguard Worker UINT FDKfread_EL(void *dst, INT size, UINT nmemb, FDKFILE *fp); 574*e5436536SAndroid Build Coastguard Worker 575*e5436536SAndroid Build Coastguard Worker /** 576*e5436536SAndroid Build Coastguard Worker * \brief Print FDK software disclaimer. 577*e5436536SAndroid Build Coastguard Worker */ 578*e5436536SAndroid Build Coastguard Worker void FDKprintDisclaimer(void); 579*e5436536SAndroid Build Coastguard Worker 580*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus 581*e5436536SAndroid Build Coastguard Worker } 582*e5436536SAndroid Build Coastguard Worker #endif 583*e5436536SAndroid Build Coastguard Worker 584*e5436536SAndroid Build Coastguard Worker #endif /* GENERICSTDS_H */ 585