diff options
| author | Andrew Mahone <andrew.mahone@gmail.com> | 2009-01-23 09:51:26 +0000 |
|---|---|---|
| committer | Andrew Mahone <andrew.mahone@gmail.com> | 2009-01-23 09:51:26 +0000 |
| commit | 44554e60756288e99bf664ea87f86dc482006eff (patch) | |
| tree | d51b47610bf3c5b58b4a548af8fed1b2728cbb27 /apps | |
| parent | 44f88585cb79a6decae347954e4a5d80e33a001e (diff) | |
| download | rockbox-44554e60756288e99bf664ea87f86dc482006eff.zip rockbox-44554e60756288e99bf664ea87f86dc482006eff.tar.gz rockbox-44554e60756288e99bf664ea87f86dc482006eff.tar.bz2 rockbox-44554e60756288e99bf664ea87f86dc482006eff.tar.xz | |
initialize the codecs API in the codec loader, using the same method as used in the plugin loader
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19824 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
| -rw-r--r-- | apps/codecs.c | 3 | ||||
| -rw-r--r-- | apps/codecs.h | 17 | ||||
| -rw-r--r-- | apps/codecs/codec_crt0.c | 11 |
3 files changed, 16 insertions, 15 deletions
diff --git a/apps/codecs.c b/apps/codecs.c index 2c547ff..cddebb6 100644 --- a/apps/codecs.c +++ b/apps/codecs.c @@ -229,8 +229,9 @@ static int codec_load_ram(int size, struct codec_api *api) return CODEC_ERROR; } + *(hdr->api) = api; invalidate_icache(); - status = hdr->entry_point(api); + status = hdr->entry_point(); sim_codec_close(pd); diff --git a/apps/codecs.h b/apps/codecs.h index 64db750..e603c8b 100644 --- a/apps/codecs.h +++ b/apps/codecs.h @@ -75,12 +75,12 @@ #define CODEC_ENC_MAGIC 0x52454E43 /* RENC */ /* increase this every time the api struct changes */ -#define CODEC_API_VERSION 29 +#define CODEC_API_VERSION 30 /* 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 29 +#define CODEC_MIN_API_VERSION 30 /* codec return codes */ enum codec_status { @@ -243,7 +243,8 @@ struct codec_header { unsigned short api_version; unsigned char *load_addr; unsigned char *end_addr; - enum codec_status(*entry_point)(struct codec_api*); + enum codec_status(*entry_point)(void); + struct codec_api **api; }; extern unsigned char codecbuf[]; @@ -259,13 +260,13 @@ extern unsigned char plugin_end_addr[]; const struct codec_header __header \ __attribute__ ((section (".header")))= { \ CODEC_MAGIC, TARGET_ID, CODEC_API_VERSION, \ - plugin_start_addr, plugin_end_addr, codec_start }; + plugin_start_addr, plugin_end_addr, codec_start, &ci }; /* encoders */ #define CODEC_ENC_HEADER \ const struct codec_header __header \ __attribute__ ((section (".header")))= { \ CODEC_ENC_MAGIC, TARGET_ID, CODEC_API_VERSION, \ - plugin_start_addr, plugin_end_addr, codec_start }; + plugin_start_addr, plugin_end_addr, codec_start, &ci }; #else /* def SIMULATOR */ /* decoders */ @@ -273,12 +274,12 @@ extern unsigned char plugin_end_addr[]; const struct codec_header __header \ __attribute__((visibility("default"))) = { \ CODEC_MAGIC, TARGET_ID, CODEC_API_VERSION, \ - NULL, NULL, codec_start }; + NULL, NULL, codec_start, &ci }; /* encoders */ #define CODEC_ENC_HEADER \ const struct codec_header __header = { \ CODEC_ENC_MAGIC, TARGET_ID, CODEC_API_VERSION, \ - NULL, NULL, codec_start }; + NULL, NULL, codec_start, &ci }; #endif /* SIMULATOR */ #endif /* CODEC */ @@ -291,7 +292,7 @@ int codec_load_buf(unsigned int hid, struct codec_api *api); int codec_load_file(const char* codec, struct codec_api *api); /* defined by the codec */ -enum codec_status codec_start(struct codec_api* rockbox); +enum codec_status codec_start(void); enum codec_status codec_main(void); #ifndef CACHE_FUNCTION_WRAPPERS diff --git a/apps/codecs/codec_crt0.c b/apps/codecs/codec_crt0.c index 84e4762..167a91e 100644 --- a/apps/codecs/codec_crt0.c +++ b/apps/codecs/codec_crt0.c @@ -22,7 +22,7 @@ #include "config.h" #include "codeclib.h" -struct codec_api *ci; +struct codec_api *ci __attribute__ ((section (".data"))); extern unsigned char iramcopy[]; extern unsigned char iramstart[]; @@ -36,16 +36,15 @@ extern enum codec_status codec_main(void); CACHE_FUNCTION_WRAPPERS(ci); -enum codec_status codec_start(struct codec_api *api) +enum codec_status codec_start(void) { #ifndef SIMULATOR #ifdef USE_IRAM - api->memcpy(iramstart, iramcopy, iramend - iramstart); - api->memset(iedata, 0, iend - iedata); + ci->memcpy(iramstart, iramcopy, iramend - iramstart); + ci->memset(iedata, 0, iend - iedata); #endif - api->memset(plugin_bss_start, 0, plugin_end_addr - plugin_bss_start); + ci->memset(plugin_bss_start, 0, plugin_end_addr - plugin_bss_start); #endif - ci = api; #if NUM_CORES > 1 /* writeback cleared iedata and bss areas */ flush_icache(); |