diff options
| author | Dan Everton <dan@iocaine.org> | 2007-02-09 10:06:53 +0000 |
|---|---|---|
| committer | Dan Everton <dan@iocaine.org> | 2007-02-09 10:06:53 +0000 |
| commit | ebc58c9f066e89088bfb6b8193b4266e5145d8e1 (patch) | |
| tree | 309ccacdc57fae01fb2231b9e2b2faf468129b3c /apps/codecs/libspeex/misc.c | |
| parent | 46424301c3c3974c9e1e682886f51a4828e4534a (diff) | |
| download | rockbox-ebc58c9f066e89088bfb6b8193b4266e5145d8e1.zip rockbox-ebc58c9f066e89088bfb6b8193b4266e5145d8e1.tar.gz rockbox-ebc58c9f066e89088bfb6b8193b4266e5145d8e1.tar.bz2 rockbox-ebc58c9f066e89088bfb6b8193b4266e5145d8e1.tar.xz | |
Add Speex playback support. Patch from FS #5607 thanks to Frederik Vestre.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12241 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/libspeex/misc.c')
| -rw-r--r-- | apps/codecs/libspeex/misc.c | 245 |
1 files changed, 245 insertions, 0 deletions
diff --git a/apps/codecs/libspeex/misc.c b/apps/codecs/libspeex/misc.c new file mode 100644 index 0000000..4d2b485 --- /dev/null +++ b/apps/codecs/libspeex/misc.c @@ -0,0 +1,245 @@ +/* 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 "../codecs.h" + +#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 + +//static struct codec_api *rb;//defined in decoder api speex.c + +#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 ROCKBOX_BIG_ENDIAN + 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 ROCKBOX_BIG_ENDIAN + 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) +{ + //printf("CLC:%d\n",size); + return codec_calloc(size,1); +} +#endif + +#ifndef OVERRIDE_SPEEX_ALLOC_SCRATCH +void *speex_alloc_scratch (int size) +{ + //printf("CLCS:%d\n",size); + return codec_calloc(size,1); +} +#endif + +#ifndef OVERRIDE_SPEEX_REALLOC +void *speex_realloc (void *ptr, int size) +{ + //printf("CLCR:%d\n",size); + return codec_realloc(ptr, size); +} +#endif + +#ifndef OVERRIDE_SPEEX_FREE +void speex_free (void *ptr) +{ + //printf("CLF:%d\n",ptr); + codec_free(ptr); +} +#endif + +#ifndef OVERRIDE_SPEEX_FREE_SCRATCH +void speex_free_scratch (void *ptr) +{ + codec_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 ("Fatal error: %s\n", str); + //exit(1); +} +#endif + +#ifndef OVERRIDE_SPEEX_WARNING +void speex_warning(const char *str) +{ + //fprintf ("warning: %s\n", str); +} +#endif + +#ifndef OVERRIDE_SPEEX_WARNING_INT +void speex_warning_int(const char *str, int val) +{ + //printf ("warning: %s %d\n", str, val); +} +#endif + +#define FIXED_POINT +#ifdef FIXED_POINT +spx_word16_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 PSHR32(SUB32(res, SHR(res, 3)),14); + return 0; +} +#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; + return 0; +} +#endif +/*#define RAND_MAX_VEC 32767*/ +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)(speex_rand(RAND_MAX_VEC,10)))/RAND_MAX_VEC)-.5);*/ +} + + #ifndef OVERRIDE_SPEEX_PUTC + void _speex_putc(int ch, void *file) + { + //FILE *f = (FILE *)file; + //printf("%c", ch); + } + #endif |