1
0
Fork 0
forked from len0rd/rockbox

Codec memory reorganization

Based on a patch by Tomasz Malesinski
* Merge Codec buffer and Malloc buffer into one large buffer.
* The new merged buffer is now 1MB on targets with lots of memory.
* Renamed codec_get_memory to codec_get_buffer and made it behave more. 
like plugin_get_buffer.
* Bumped Codec api and min api versions.


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18834 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Nils Wallménius 2008-10-19 12:35:53 +00:00
parent 0117705542
commit 2f50cd58b9
45 changed files with 66 additions and 57 deletions

View file

@ -66,6 +66,8 @@ void sim_codec_close(void *pd);
extern unsigned char codecbuf[];
#endif
size_t codec_size;
extern void* plugin_get_audio_buffer(size_t *buffer_size);
struct codec_api ci = {
@ -78,7 +80,7 @@ struct codec_api ci = {
0, /* new_track */
0, /* seek_time */
NULL, /* struct dsp_config *dsp */
NULL, /* get_codec_memory */
NULL, /* codec_get_buffer */
NULL, /* pcmbuf_insert */
NULL, /* set_elapsed */
NULL, /* read_filebuf */
@ -193,6 +195,9 @@ static int codec_load_ram(int size, struct codec_api *api)
logf("codec header error");
return CODEC_ERROR;
}
codec_size = hdr->end_addr - codecbuf;
#else /* SIMULATOR */
void *pd;
@ -211,6 +216,9 @@ static int codec_load_ram(int size, struct codec_api *api)
sim_codec_close(pd);
return CODEC_ERROR;
}
codec_size = codecbuf - codecbuf;
#endif /* SIMULATOR */
if (hdr->api_version > CODEC_API_VERSION
|| hdr->api_version < CODEC_MIN_API_VERSION) {
@ -226,7 +234,8 @@ static int codec_load_ram(int size, struct codec_api *api)
return status;
}
int codec_load_buf(unsigned int hid, struct codec_api *api) {
int codec_load_buf(unsigned int hid, struct codec_api *api)
{
int rc;
rc = bufread(hid, CODEC_SIZE, codecbuf);
if (rc < 0) {

View file

@ -82,12 +82,12 @@
#define CODEC_ENC_MAGIC 0x52454E43 /* RENC */
/* increase this every time the api struct changes */
#define CODEC_API_VERSION 25
#define CODEC_API_VERSION 26
/* update this to latest version if a change to the api struct breaks
backwards compatibility (and please take the opportunity to sort in any
new function which are "waiting" at the end of the function table) */
#define CODEC_MIN_API_VERSION 25
#define CODEC_MIN_API_VERSION 26
/* codec return codes */
enum codec_status {
@ -125,7 +125,7 @@ struct codec_api {
struct dsp_config *dsp;
/* Returns buffer to malloc array. Only codeclib should need this. */
void* (*get_codec_memory)(size_t *size);
void* (*codec_get_buffer)(size_t *size);
/* Insert PCM data into audio buffer for playback. Playback will start
automatically. */
bool (*pcmbuf_insert)(const void *ch1, const void *ch2, int count);
@ -256,6 +256,9 @@ struct codec_header {
enum codec_status(*entry_point)(struct codec_api*);
};
extern unsigned char codecbuf[];
extern size_t codec_size;
#ifdef CODEC
#ifndef SIMULATOR
/* plugin_* is correct, codecs use the plugin linker script */

View file

@ -5,7 +5,7 @@ static size_t bufsize, tmp_ptr, mem_ptr;
void ogg_malloc_init(void)
{
mallocbuf = ci->get_codec_memory(&bufsize);
mallocbuf = ci->codec_get_buffer(&bufsize);
tmp_ptr = bufsize & ~3;
mem_ptr = 0;
}

View file

@ -36,7 +36,7 @@ unsigned char* filebuf; // The rest of the MP3 buffer
int codec_init(void)
{
mem_ptr = 0;
mallocbuf = (unsigned char *)ci->get_codec_memory((size_t *)&bufsize);
mallocbuf = (unsigned char *)ci->codec_get_buffer((size_t *)&bufsize);
return 0;
}

View file

@ -24,8 +24,6 @@
#include "system.h"
#include <sys/types.h>
#define MALLOC_BUFSIZE (512*1024)
extern struct codec_api *ci;
extern long mem_ptr;
extern long bufsize;

View file

@ -166,10 +166,8 @@ enum filling_state {
/* As defined in plugins/lib/xxx2wav.h */
#if MEM > 1
#define MALLOC_BUFSIZE (512*1024)
#define GUARD_BUFSIZE (32*1024)
#else
#define MALLOC_BUFSIZE (100*1024)
#define GUARD_BUFSIZE (8*1024)
#endif
@ -924,10 +922,12 @@ static bool codec_pcmbuf_insert_callback(
return true;
} /* codec_pcmbuf_insert_callback */
static void* codec_get_memory_callback(size_t *size)
static void* codec_get_buffer(size_t *size)
{
*size = MALLOC_BUFSIZE;
return malloc_buf;
if (codec_size >= CODEC_SIZE)
return NULL;
*size = CODEC_SIZE - codec_size;
return &codecbuf[codec_size];
}
/* Between the codec and PCM track change, we need to keep updating the
@ -2297,7 +2297,7 @@ static void audio_finalise_track_change(void)
/*
* Layout audio buffer as follows - iram buffer depends on target:
* [|SWAP:iram][|TALK]|MALLOC|FILE|GUARD|PCM|[SWAP:dram[|iram]|]
* [|SWAP:iram][|TALK]|FILE|GUARD|PCM|[SWAP:dram[|iram]|]
*/
static void audio_reset_buffer(void)
{
@ -2313,7 +2313,7 @@ static void audio_reset_buffer(void)
/* Align the malloc buf to line size. Especially important to cf
targets that do line reads/writes. */
malloc_buf = (unsigned char *)(((uintptr_t)malloc_buf + 15) & ~15);
filebuf = malloc_buf + MALLOC_BUFSIZE; /* filebuf line align implied */
filebuf = malloc_buf; /* filebuf line align implied */
filebuflen = audiobufend - filebuf;
filebuflen &= ~15;
@ -2338,7 +2338,6 @@ static void audio_reset_buffer(void)
size_t pcmbufsize;
const unsigned char *pcmbuf = pcmbuf_get_meminfo(&pcmbufsize);
logf("mabuf: %08X", (unsigned)malloc_buf);
logf("mabufe: %08X", (unsigned)(malloc_buf + MALLOC_BUFSIZE));
logf("fbuf: %08X", (unsigned)filebuf);
logf("fbufe: %08X", (unsigned)(filebuf + filebuflen));
logf("gbuf: %08X", (unsigned)(filebuf + filebuflen));
@ -2513,7 +2512,7 @@ void audio_init(void)
/* Initialize codec api. */
ci.read_filebuf = codec_filebuf_callback;
ci.pcmbuf_insert = codec_pcmbuf_insert_callback;
ci.get_codec_memory = codec_get_memory_callback;
ci.codec_get_buffer = codec_get_buffer;
ci.request_buffer = codec_request_buffer_callback;
ci.advance_buffer = codec_advance_buffer_callback;
ci.advance_buffer_loc = codec_advance_buffer_loc_callback;

View file

@ -96,7 +96,7 @@
#define HAVE_FAT16SUPPORT
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -83,7 +83,7 @@
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0
//#define CODEC_SIZE 0x80000
//#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
//#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -78,7 +78,7 @@
#define ICODE_ATTR_TREMOR_NOT_MDCT
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -104,7 +104,7 @@
//TODO: enable this back
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x100000

View file

@ -104,7 +104,7 @@
//TODO: enable this back
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x100000

View file

@ -104,7 +104,7 @@
//TODO: enable this back
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x100000

View file

@ -86,7 +86,7 @@
#define HAVE_FAT16SUPPORT
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -64,7 +64,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -84,7 +84,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -87,7 +87,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -80,7 +80,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -66,7 +66,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -75,7 +75,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -73,7 +73,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -84,7 +84,7 @@
/* #define HAVE_SW_POWEROFF */
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -89,7 +89,7 @@
#define ICODE_ATTR_TREMOR_NOT_MDCT
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -79,7 +79,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -86,7 +86,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -99,7 +99,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -42,7 +42,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x20000
#define CODEC_SIZE 0x38000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x10000

View file

@ -70,7 +70,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -80,7 +80,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -80,7 +80,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -67,7 +67,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -79,7 +79,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -79,7 +79,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -67,7 +67,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -67,7 +67,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -57,7 +57,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x20000
#define CODEC_SIZE 0x38000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x10000

View file

@ -58,7 +58,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x20000
#define CODEC_SIZE 0x38000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x10000

View file

@ -86,7 +86,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -86,7 +86,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -86,7 +86,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -51,7 +51,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -115,7 +115,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x100000

View file

@ -91,7 +91,7 @@
//#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x100000

View file

@ -89,7 +89,7 @@
//#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x100000

View file

@ -74,7 +74,7 @@
#define HAVE_FAT16SUPPORT
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000

View file

@ -57,7 +57,7 @@
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000