summaryrefslogtreecommitdiffstats
path: root/apps/codecs
diff options
context:
space:
mode:
authorThom Johansen <thomj@rockbox.org>2005-10-13 11:32:52 +0000
committerThom Johansen <thomj@rockbox.org>2005-10-13 11:32:52 +0000
commitc91e0bbfc9ea289598d2202404eee3a524c7cde1 (patch)
tree31ac0e5c3e5ec8631dec9695cfc8e5aeb8702a3f /apps/codecs
parentf9cc638efd655c3ac392fdaf346ebc5c6dbd258b (diff)
downloadrockbox-c91e0bbfc9ea289598d2202404eee3a524c7cde1.tar.gz
rockbox-c91e0bbfc9ea289598d2202404eee3a524c7cde1.zip
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')
-rw-r--r--apps/codecs/a52.c3
-rw-r--r--apps/codecs/alac.c7
-rw-r--r--apps/codecs/flac.c6
-rw-r--r--apps/codecs/lib/SOURCES1
-rw-r--r--apps/codecs/lib/codeclib.c119
-rw-r--r--apps/codecs/lib/codeclib.h39
-rw-r--r--apps/codecs/mpa.c3
-rw-r--r--apps/codecs/mpc.c3
-rw-r--r--apps/codecs/vorbis.c4
-rw-r--r--apps/codecs/wav.c3
-rw-r--r--apps/codecs/wavpack.c8
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;