diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/codecs/a52.c | 3 | ||||
-rw-r--r-- | apps/codecs/alac.c | 7 | ||||
-rw-r--r-- | apps/codecs/flac.c | 6 | ||||
-rw-r--r-- | apps/codecs/lib/SOURCES | 1 | ||||
-rw-r--r-- | apps/codecs/lib/codeclib.c | 119 | ||||
-rw-r--r-- | apps/codecs/lib/codeclib.h | 39 | ||||
-rw-r--r-- | apps/codecs/mpa.c | 3 | ||||
-rw-r--r-- | apps/codecs/mpc.c | 3 | ||||
-rw-r--r-- | apps/codecs/vorbis.c | 4 | ||||
-rw-r--r-- | apps/codecs/wav.c | 3 | ||||
-rw-r--r-- | apps/codecs/wavpack.c | 8 |
11 files changed, 162 insertions, 34 deletions
diff --git a/apps/codecs/a52.c b/apps/codecs/a52.c index 8d4e94ebf7..e3144fd2f9 100644 --- a/apps/codecs/a52.c +++ b/apps/codecs/a52.c @@ -17,8 +17,7 @@ * ****************************************************************************/ -#include "codec.h" -#include "lib/codeclib.h" +#include "codeclib.h" #include <inttypes.h> /* Needed by a52.h */ #include <codecs/liba52/config-a52.h> #include <codecs/liba52/a52.h> diff --git a/apps/codecs/alac.c b/apps/codecs/alac.c index 5f39e5eacb..1a7d0f8bb0 100644 --- a/apps/codecs/alac.c +++ b/apps/codecs/alac.c @@ -17,16 +17,11 @@ * ****************************************************************************/ -#include "codec.h" - +#include "codeclib.h" #include <codecs/libalac/demux.h> #include <codecs/libalac/decomp.h> #include <codecs/libalac/stream.h> -#include "playback.h" -#include "dsp.h" -#include "lib/codeclib.h" - #ifndef SIMULATOR extern char iramcopy[]; extern char iramstart[]; diff --git a/apps/codecs/flac.c b/apps/codecs/flac.c index 725157720e..45fc21466c 100644 --- a/apps/codecs/flac.c +++ b/apps/codecs/flac.c @@ -17,14 +17,10 @@ * ****************************************************************************/ -#include "codec.h" - +#include "codeclib.h" #include <codecs/libFLAC/include/FLAC/seekable_stream_decoder.h> #include <codecs/libFLAC/include/FLAC/format.h> #include <codecs/libFLAC/include/FLAC/metadata.h> -#include "playback.h" -#include "lib/codeclib.h" -#include "dsp.h" #define FLAC_MAX_SUPPORTED_BLOCKSIZE 4608 #define FLAC_MAX_SUPPORTED_CHANNELS 2 diff --git a/apps/codecs/lib/SOURCES b/apps/codecs/lib/SOURCES index b0e50172a3..96fcb839b4 100644 --- a/apps/codecs/lib/SOURCES +++ b/apps/codecs/lib/SOURCES @@ -1,4 +1,3 @@ #if CONFIG_CODEC == SWCODEC /* software codec platforms */ codeclib.c -xxx2wav.c #endif diff --git a/apps/codecs/lib/codeclib.c b/apps/codecs/lib/codeclib.c index b2f5c23f77..b9858dd412 100644 --- a/apps/codecs/lib/codeclib.c +++ b/apps/codecs/lib/codeclib.c @@ -19,14 +19,19 @@ /* "helper functions" common to all codecs */ -#include "plugin.h" +#include "codecs.h" #include "dsp.h" #include "codeclib.h" -#include "xxx2wav.h" #include "id3.h" struct codec_api *local_rb; +int mem_ptr; +int bufsize; +unsigned char* mp3buf; // The actual MP3 buffer from Rockbox +unsigned char* mallocbuf; // 512K from the start of MP3 buffer +unsigned char* filebuf; // The rest of the MP3 buffer + int codec_init(struct codec_api* rb) { local_rb = rb; @@ -43,3 +48,113 @@ void codec_set_replaygain(struct mp3entry* id3) local_rb->configure(DSP_SET_TRACK_PEAK, (long *) id3->track_peak); local_rb->configure(DSP_SET_ALBUM_PEAK, (long *) id3->album_peak); } + +/* Various "helper functions" common to all the xxx2wav decoder plugins */ + + +void* codec_malloc(size_t size) +{ + void* x; + + if (mem_ptr + (int)size > bufsize) + return NULL; + + x=&mallocbuf[mem_ptr]; + mem_ptr+=(size+3)&~3; /* Keep memory 32-bit aligned */ + + return(x); +} + +void* codec_calloc(size_t nmemb, size_t size) +{ + void* x; + x = codec_malloc(nmemb*size); + if (x == NULL) + return NULL; + local_rb->memset(x,0,nmemb*size); + return(x); +} + +#if defined(SIMULATOR) +void* codec_alloca(size_t size) +{ + void* x; + x = codec_malloc(size); + return(x); +} +#endif + +void codec_free(void* ptr) { + (void)ptr; +} + +void* codec_realloc(void* ptr, size_t size) +{ + void* x; + (void)ptr; + x = codec_malloc(size); + return(x); +} + +size_t strlen(const char *s) +{ + return(local_rb->strlen(s)); +} + +char *strcpy(char *dest, const char *src) +{ + return(local_rb->strcpy(dest,src)); +} + +char *strcat(char *dest, const char *src) +{ + return(local_rb->strcat(dest,src)); +} + +int strcmp(const char *s1, const char *s2) +{ + return(local_rb->strcmp(s1,s2)); +} + +int strncasecmp(const char *s1, const char *s2, size_t n) +{ + return(local_rb->strncasecmp(s1,s2,n)); +} + +void *memcpy(void *dest, const void *src, size_t n) +{ + return(local_rb->memcpy(dest,src,n)); +} + +void *memset(void *s, int c, size_t n) +{ + return(local_rb->memset(s,c,n)); +} + +int memcmp(const void *s1, const void *s2, size_t n) +{ + return(local_rb->memcmp(s1,s2,n)); +} + +void* memchr(const void *s, int c, size_t n) +{ + return(local_rb->memchr(s,c,n)); +} + +void* memmove(const void *s1, const void *s2, size_t n) +{ + char* dest=(char*)s1; + char* src=(char*)s2; + size_t i; + + for (i=0;i<n;i++) + dest[i]=src[i]; + + return(dest); +} + +void qsort(void *base, size_t nmemb, size_t size, + int(*compar)(const void *, const void *)) +{ + local_rb->qsort(base,nmemb,size,compar); +} diff --git a/apps/codecs/lib/codeclib.h b/apps/codecs/lib/codeclib.h index d6bbfd3888..b46b44bbce 100644 --- a/apps/codecs/lib/codeclib.h +++ b/apps/codecs/lib/codeclib.h @@ -19,26 +19,57 @@ #include "config.h" #include "codecs.h" +#include "system.h" +#include <sys/types.h> -/* Various codec "helper functions" */ +#define MALLOC_BUFSIZE (512*1024) extern int mem_ptr; extern int bufsize; -extern unsigned char* mallocbuf; /* 512K from the start of MP3 buffer */ +extern unsigned char* mp3buf; // The actual MP3 buffer from Rockbox +extern unsigned char* mallocbuf; // 512K from the start of MP3 buffer +extern unsigned char* filebuf; // The rest of the MP3 buffer + +/* Standard library functions that are used by the codecs follow here */ + +/* Get these functions 'out of the way' of the standard functions. Not doing + * so confuses the cygwin linker, and maybe others. These functions need to + * be implemented elsewhere */ +#define malloc(x) codec_malloc(x) +#define calloc(x,y) codec_calloc(x,y) +#define realloc(x,y) codec_realloc(x,y) +#define free(x) codec_free(x) void* codec_malloc(size_t size); void* codec_calloc(size_t nmemb, size_t size); void* codec_realloc(void* ptr, size_t size); void codec_free(void* ptr); -#if defined(SIMULATOR) +#if !defined(SIMULATOR) +#define alloca __builtin_alloca +#else +#define alloca(x) codec_alloca(x) void* codec_alloca(size_t size); #endif void *memcpy(void *dest, const void *src, size_t n); void *memset(void *s, int c, size_t n); int memcmp(const void *s1, const void *s2, size_t n); -void* memmove(const void *s1, const void *s2, size_t n); +void *memmove(const void *s1, const void *s2, size_t n); + +size_t strlen(const char *s); +char *strcpy(char *dest, const char *src); +char *strcat(char *dest, const char *src); +int strcmp(const char *, const char *); +int strcasecmp(const char *, const char *); + +void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); + +#define abs(x) ((x)>0?(x):-(x)) +#define labs(x) abs(x) + +/* Various codec helper functions */ int codec_init(struct codec_api* rb); void codec_set_replaygain(struct mp3entry* id3); + diff --git a/apps/codecs/mpa.c b/apps/codecs/mpa.c index 53a976f44b..66c181e74b 100644 --- a/apps/codecs/mpa.c +++ b/apps/codecs/mpa.c @@ -17,8 +17,7 @@ * ****************************************************************************/ -#include "codec.h" -#include "lib/codeclib.h" +#include "codeclib.h" #include <codecs/libmad/mad.h> #include <inttypes.h> diff --git a/apps/codecs/mpc.c b/apps/codecs/mpc.c index eb6ead6979..2b4830d6f4 100644 --- a/apps/codecs/mpc.c +++ b/apps/codecs/mpc.c @@ -17,8 +17,7 @@ * ****************************************************************************/ -#include "codec.h" -#include "lib/codeclib.h" +#include "codeclib.h" #include <codecs/libmusepack/musepack.h> mpc_decoder decoder; diff --git a/apps/codecs/vorbis.c b/apps/codecs/vorbis.c index 6b0b55e4d6..475c64c4b5 100644 --- a/apps/codecs/vorbis.c +++ b/apps/codecs/vorbis.c @@ -16,8 +16,8 @@ * KIND, either express or implied. * ****************************************************************************/ -#include "codec.h" -#include "lib/codeclib.h" + +#include "codeclib.h" #include "Tremor/ivorbisfile.h" #include "Tremor/ogg.h" diff --git a/apps/codecs/wav.c b/apps/codecs/wav.c index cb75c89a22..b1ac8272ee 100644 --- a/apps/codecs/wav.c +++ b/apps/codecs/wav.c @@ -17,8 +17,7 @@ * ****************************************************************************/ -#include "codec.h" -#include "lib/codeclib.h" +#include "codeclib.h" #include "inttypes.h" /* This codec support WAVE files with the following formats: diff --git a/apps/codecs/wavpack.c b/apps/codecs/wavpack.c index e97724a94e..c3ea6c39d0 100644 --- a/apps/codecs/wavpack.c +++ b/apps/codecs/wavpack.c @@ -17,12 +17,8 @@ * ****************************************************************************/ -#include "codec.h" - -#include <codecs/libwavpack/wavpack.h> -#include "playback.h" -#include "lib/codeclib.h" -#include "dsp.h" +#include "codeclib.h" +#include "libwavpack/wavpack.h" static struct codec_api *ci; |