added guarded #include "config.h" throughout libspeex/ and src/
[speexdsp.git] / libspeex / misc.c
1 /* Copyright (C) 2002 Jean-Marc Valin 
2    File: mics.c
3    Various utility routines for Speex
4
5    Redistribution and use in source and binary forms, with or without
6    modification, are permitted provided that the following conditions
7    are met:
8    
9    - Redistributions of source code must retain the above copyright
10    notice, this list of conditions and the following disclaimer.
11    
12    - Redistributions in binary form must reproduce the above copyright
13    notice, this list of conditions and the following disclaimer in the
14    documentation and/or other materials provided with the distribution.
15    
16    - Neither the name of the Xiph.org Foundation nor the names of its
17    contributors may be used to endorse or promote products derived from
18    this software without specific prior written permission.
19    
20    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21    ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23    A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
24    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33 #ifdef HAVE_CONFIG_H
34 #include "config.h"
35 #endif
36
37 #include "misc.h"
38 #include <stdlib.h>
39 #include <string.h>
40 #include <stdio.h>
41
42 #ifndef RELEASE
43 void print_vec(float *vec, int len, char *name)
44 {
45    int i;
46    printf ("%s ", name);
47    for (i=0;i<len;i++)
48       printf (" %f", vec[i]);
49    printf ("\n");
50 }
51 #endif
52
53 #ifdef FIXED_DEBUG
54 long long spx_mips=0;
55 #endif
56
57
58 unsigned int be_int(unsigned int i)
59 {
60    unsigned int ret=i;
61 #ifndef WORDS_BIGENDIAN
62    ret =  i>>24;
63    ret += (i>>8)&0x0000ff00;
64    ret += (i<<8)&0x00ff0000;
65    ret += (i<<24);
66 #endif
67    return ret;
68 }
69
70 unsigned int le_int(unsigned int i)
71 {
72    unsigned int ret=i;
73 #ifdef WORDS_BIGENDIAN
74    ret =  i>>24;
75    ret += (i>>8)&0x0000ff00;
76    ret += (i<<8)&0x00ff0000;
77    ret += (i<<24);
78 #endif
79    return ret;
80 }
81
82 unsigned short be_short(unsigned short s)
83 {
84    unsigned short ret=s;
85 #ifndef WORDS_BIGENDIAN
86    ret =  s>>8;
87    ret += s<<8;
88 #endif
89    return ret;
90 }
91
92 unsigned short le_short(unsigned short s)
93 {
94    unsigned short ret=s;
95 #ifdef WORDS_BIGENDIAN
96    ret =  s>>8;
97    ret += s<<8;
98 #endif
99    return ret;
100 }
101
102 void *speex_alloc (int size)
103 {
104    return calloc(size,1);
105 }
106
107 void *speex_realloc (void *ptr, int size)
108 {
109    return realloc(ptr, size);
110 }
111
112 void speex_free (void *ptr)
113 {
114    free(ptr);
115 }
116
117 void *speex_move (void *dest, void *src, int n)
118 {
119    return memmove(dest,src,n);
120 }
121
122 void speex_error(char *str)
123 {
124    fprintf (stderr, "Fatal error: %s\n", str);
125    exit(1);
126 }
127
128 void speex_warning(char *str)
129 {
130    fprintf (stderr, "warning: %s\n", str);
131 }
132
133 void speex_warning_int(char *str, int val)
134 {
135    fprintf (stderr, "warning: %s %d\n", str, val);
136 }
137
138 void speex_rand_vec(float std, spx_sig_t *data, int len)
139 {
140    int i;
141    for (i=0;i<len;i++)
142       data[i]+=SIG_SCALING*3*std*((((float)rand())/RAND_MAX)-.5);
143 }
144
145 float speex_rand(float std)
146 {
147    return 3*std*((((float)rand())/RAND_MAX)-.5);
148 }
149
150 void _speex_putc(int ch, void *file)
151 {
152    FILE *f = (FILE *)file;
153    fputc(ch, f);
154 }