|
1 /* Copyright (C) 2007 Jean-Marc Valin |
|
2 |
|
3 File: os_support.h |
|
4 This is the (tiny) OS abstraction layer. Aside from math.h, this is the |
|
5 only place where system headers are allowed. |
|
6 |
|
7 Redistribution and use in source and binary forms, with or without |
|
8 modification, are permitted provided that the following conditions are |
|
9 met: |
|
10 |
|
11 1. Redistributions of source code must retain the above copyright notice, |
|
12 this list of conditions and the following disclaimer. |
|
13 |
|
14 2. Redistributions in binary form must reproduce the above copyright |
|
15 notice, this list of conditions and the following disclaimer in the |
|
16 documentation and/or other materials provided with the distribution. |
|
17 |
|
18 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
|
19 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
|
20 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
|
21 DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, |
|
22 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
|
23 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
|
24 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
|
25 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
|
26 STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
|
27 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
28 POSSIBILITY OF SUCH DAMAGE. |
|
29 */ |
|
30 |
|
31 #ifndef OS_SUPPORT_H |
|
32 #define OS_SUPPORT_H |
|
33 |
|
34 #ifdef CUSTOM_SUPPORT |
|
35 # include "custom_support.h" |
|
36 #endif |
|
37 |
|
38 #include "opus_types.h" |
|
39 #include "opus_defines.h" |
|
40 |
|
41 #include <string.h> |
|
42 #include <stdio.h> |
|
43 #include <stdlib.h> |
|
44 |
|
45 /** Opus wrapper for malloc(). To do your own dynamic allocation, all you need to do is replace this function and opus_free */ |
|
46 #ifndef OVERRIDE_OPUS_ALLOC |
|
47 static OPUS_INLINE void *opus_alloc (size_t size) |
|
48 { |
|
49 return malloc(size); |
|
50 } |
|
51 #endif |
|
52 |
|
53 /** Same as celt_alloc(), except that the area is only needed inside a CELT call (might cause problem with wideband though) */ |
|
54 #ifndef OVERRIDE_OPUS_ALLOC_SCRATCH |
|
55 static OPUS_INLINE void *opus_alloc_scratch (size_t size) |
|
56 { |
|
57 /* Scratch space doesn't need to be cleared */ |
|
58 return opus_alloc(size); |
|
59 } |
|
60 #endif |
|
61 |
|
62 /** Opus wrapper for free(). To do your own dynamic allocation, all you need to do is replace this function and opus_alloc */ |
|
63 #ifndef OVERRIDE_OPUS_FREE |
|
64 static OPUS_INLINE void opus_free (void *ptr) |
|
65 { |
|
66 free(ptr); |
|
67 } |
|
68 #endif |
|
69 |
|
70 /** Copy n bytes of memory from src to dst. The 0* term provides compile-time type checking */ |
|
71 #ifndef OVERRIDE_OPUS_COPY |
|
72 #define OPUS_COPY(dst, src, n) (memcpy((dst), (src), (n)*sizeof(*(dst)) + 0*((dst)-(src)) )) |
|
73 #endif |
|
74 |
|
75 /** Copy n bytes of memory from src to dst, allowing overlapping regions. The 0* term |
|
76 provides compile-time type checking */ |
|
77 #ifndef OVERRIDE_OPUS_MOVE |
|
78 #define OPUS_MOVE(dst, src, n) (memmove((dst), (src), (n)*sizeof(*(dst)) + 0*((dst)-(src)) )) |
|
79 #endif |
|
80 |
|
81 /** Set n elements of dst to zero, starting at address s */ |
|
82 #ifndef OVERRIDE_OPUS_CLEAR |
|
83 #define OPUS_CLEAR(dst, n) (memset((dst), 0, (n)*sizeof(*(dst)))) |
|
84 #endif |
|
85 |
|
86 /*#ifdef __GNUC__ |
|
87 #pragma GCC poison printf sprintf |
|
88 #pragma GCC poison malloc free realloc calloc |
|
89 #endif*/ |
|
90 |
|
91 #endif /* OS_SUPPORT_H */ |
|
92 |