diff options
Diffstat (limited to 'pjmedia/src/pjmedia-codec/speex/misc.c')
-rw-r--r-- | pjmedia/src/pjmedia-codec/speex/misc.c | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/pjmedia/src/pjmedia-codec/speex/misc.c b/pjmedia/src/pjmedia-codec/speex/misc.c new file mode 100644 index 00000000..fc2cb7cf --- /dev/null +++ b/pjmedia/src/pjmedia-codec/speex/misc.c @@ -0,0 +1,238 @@ +/* Copyright (C) 2002-2005 Jean-Marc Valin + File: misc.c + Various utility routines for Speex + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + - Neither the name of the Xiph.org Foundation nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdlib.h> +#include <string.h> +#include <stdio.h> +#include "misc.h" + +#ifdef USER_MISC +#include "user_misc.h" +#endif + +#ifdef BFIN_ASM +#include "misc_bfin.h" +#endif + +#ifndef RELEASE +void print_vec(float *vec, int len, char *name) +{ + int i; + printf ("%s ", name); + for (i=0;i<len;i++) + printf (" %f", vec[i]); + printf ("\n"); +} +#endif + +#ifdef FIXED_DEBUG +long long spx_mips=0; +#endif + + +spx_uint32_t be_int(spx_uint32_t i) +{ + spx_uint32_t ret=i; +#ifndef WORDS_BIGENDIAN + ret = i>>24; + ret += (i>>8)&0x0000ff00; + ret += (i<<8)&0x00ff0000; + ret += (i<<24); +#endif + return ret; +} + +spx_uint32_t le_int(spx_uint32_t i) +{ + spx_uint32_t ret=i; +#ifdef WORDS_BIGENDIAN + ret = i>>24; + ret += (i>>8)&0x0000ff00; + ret += (i<<8)&0x00ff0000; + ret += (i<<24); +#endif + return ret; +} + +#if BYTES_PER_CHAR == 2 +void speex_memcpy_bytes(char *dst, char *src, int nbytes) +{ + int i; + int nchars = nbytes/BYTES_PER_CHAR; + for (i=0;i<nchars;i++) + dst[i]=src[i]; + if (nbytes & 1) { + /* copy in the last byte */ + int last_i = nchars; + char last_dst_char = dst[last_i]; + char last_src_char = src[last_i]; + last_dst_char &= 0xff00; + last_dst_char |= (last_src_char & 0x00ff); + dst[last_i] = last_dst_char; + } +} +void speex_memset_bytes(char *dst, char c, int nbytes) +{ + int i; + spx_int16_t cc = ((c << 8) | c); + int nchars = nbytes/BYTES_PER_CHAR; + for (i=0;i<nchars;i++) + dst[i]=cc; + if (nbytes & 1) { + /* copy in the last byte */ + int last_i = nchars; + char last_dst_char = dst[last_i]; + last_dst_char &= 0xff00; + last_dst_char |= (c & 0x00ff); + dst[last_i] = last_dst_char; + } +} +#else +void speex_memcpy_bytes(char *dst, char *src, int nbytes) +{ + memcpy(dst, src, nbytes); +} +void speex_memset_bytes(char *dst, char src, int nbytes) +{ + memset(dst, src, nbytes); +} +#endif + +#ifndef OVERRIDE_SPEEX_ALLOC +void *speex_alloc (int size) +{ + return calloc(size,1); +} +#endif + +#ifndef OVERRIDE_SPEEX_ALLOC_SCRATCH +void *speex_alloc_scratch (int size) +{ + return calloc(size,1); +} +#endif + +#ifndef OVERRIDE_SPEEX_REALLOC +void *speex_realloc (void *ptr, int size) +{ + return realloc(ptr, size); +} +#endif + +#ifndef OVERRIDE_SPEEX_FREE +void speex_free (void *ptr) +{ + free(ptr); +} +#endif + +#ifndef OVERRIDE_SPEEX_FREE_SCRATCH +void speex_free_scratch (void *ptr) +{ + free(ptr); +} +#endif + +#ifndef OVERRIDE_SPEEX_MOVE +void *speex_move (void *dest, void *src, int n) +{ + return memmove(dest,src,n); +} +#endif + +#ifndef OVERRIDE_SPEEX_ERROR +void speex_error(const char *str) +{ + fprintf (stderr, "Fatal error: %s\n", str); + exit(1); +} +#endif + +#ifndef OVERRIDE_SPEEX_WARNING +void speex_warning(const char *str) +{ + fprintf (stderr, "warning: %s\n", str); +} +#endif + +#ifndef OVERRIDE_SPEEX_WARNING_INT +void speex_warning_int(const char *str, int val) +{ + fprintf (stderr, "warning: %s %d\n", str, val); +} +#endif + +#ifdef FIXED_POINT +spx_word32_t speex_rand(spx_word16_t std, spx_int32_t *seed) +{ + spx_word32_t res; + *seed = 1664525 * *seed + 1013904223; + res = MULT16_16(EXTRACT16(SHR32(*seed,16)),std); + return SUB32(res, SHR(res, 3)); +} +#else +spx_word16_t speex_rand(spx_word16_t std, spx_int32_t *seed) +{ + const unsigned int jflone = 0x3f800000; + const unsigned int jflmsk = 0x007fffff; + union {int i; float f;} ran; + *seed = 1664525 * *seed + 1013904223; + ran.i = jflone | (jflmsk & *seed); + ran.f -= 1.5; + return 3.4642*std*ran.f; +} +#endif + +void speex_rand_vec(float std, spx_sig_t *data, int len) +{ + int i; + for (i=0;i<len;i++) + data[i]+=SIG_SCALING*3*std*((((float)rand())/RAND_MAX)-.5); +} + + +/*float speex_rand(float std) +{ + return 3*std*((((float)rand())/RAND_MAX)-.5); +}*/ + +#ifndef OVERRIDE_SPEEX_PUTC +void _speex_putc(int ch, void *file) +{ + FILE *f = (FILE *)file; + fprintf(f, "%c", ch); +} +#endif |