xref: /aosp_15_r20/external/aac/libSYS/include/genericStds.h (revision e54365361535b070c2db7374cec45c159c7d0e7a)
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