diff options
| author | Thom Johansen <thomj@rockbox.org> | 2005-10-13 11:32:52 +0000 |
|---|---|---|
| committer | Thom Johansen <thomj@rockbox.org> | 2005-10-13 11:32:52 +0000 |
| commit | c91e0bbfc9ea289598d2202404eee3a524c7cde1 (patch) | |
| tree | 31ac0e5c3e5ec8631dec9695cfc8e5aeb8702a3f /apps/codecs/lib | |
| parent | f9cc638efd655c3ac392fdaf346ebc5c6dbd258b (diff) | |
| download | rockbox-c91e0bbfc9ea289598d2202404eee3a524c7cde1.zip rockbox-c91e0bbfc9ea289598d2202404eee3a524c7cde1.tar.gz rockbox-c91e0bbfc9ea289598d2202404eee3a524c7cde1.tar.bz2 rockbox-c91e0bbfc9ea289598d2202404eee3a524c7cde1.tar.xz | |
Cleaned up the messy codec header and library system by merging codec.h, lib/codeclib.[ch] and lib/xxx2wav.[ch] into just codeclib.[ch]. Deleted much of the unused code in the xxx2wav portion. All codecs should now only include codeclib.h, and whatever codec specific headers are needed.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7626 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/lib')
| -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 |
3 files changed, 152 insertions, 7 deletions
diff --git a/apps/codecs/lib/SOURCES b/apps/codecs/lib/SOURCES index b0e5017..96fcb83 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 b2f5c23..b9858dd 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 d6bbfd3..b46b44b 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); + |