Line data Source code
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 0 : static OPUS_INLINE void *opus_alloc (size_t size)
48 : {
49 0 : 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 0 : static OPUS_INLINE void opus_free (void *ptr)
65 : {
66 0 : free(ptr);
67 0 : }
68 : #endif
69 :
70 : /** Copy n elements 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 elements 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 */
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 :
|