1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Andrew Mahone 2009-01-23 09:51:26 +00:00
parent 44f88585cb
commit 44554e6075
3 changed files with 16 additions and 15 deletions

View file

@ -229,8 +229,9 @@ static int codec_load_ram(int size, struct codec_api *api)
return CODEC_ERROR; return CODEC_ERROR;
} }
*(hdr->api) = api;
invalidate_icache(); invalidate_icache();
status = hdr->entry_point(api); status = hdr->entry_point();
sim_codec_close(pd); sim_codec_close(pd);

View file

@ -75,12 +75,12 @@
#define CODEC_ENC_MAGIC 0x52454E43 /* RENC */ #define CODEC_ENC_MAGIC 0x52454E43 /* RENC */
/* increase this every time the api struct changes */ /* 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 /* update this to latest version if a change to the api struct breaks
backwards compatibility (and please take the opportunity to sort in any backwards compatibility (and please take the opportunity to sort in any
new function which are "waiting" at the end of the function table) */ 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 */ /* codec return codes */
enum codec_status { enum codec_status {
@ -243,7 +243,8 @@ struct codec_header {
unsigned short api_version; unsigned short api_version;
unsigned char *load_addr; unsigned char *load_addr;
unsigned char *end_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[]; extern unsigned char codecbuf[];
@ -259,13 +260,13 @@ extern unsigned char plugin_end_addr[];
const struct codec_header __header \ const struct codec_header __header \
__attribute__ ((section (".header")))= { \ __attribute__ ((section (".header")))= { \
CODEC_MAGIC, TARGET_ID, CODEC_API_VERSION, \ 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 */ /* encoders */
#define CODEC_ENC_HEADER \ #define CODEC_ENC_HEADER \
const struct codec_header __header \ const struct codec_header __header \
__attribute__ ((section (".header")))= { \ __attribute__ ((section (".header")))= { \
CODEC_ENC_MAGIC, TARGET_ID, CODEC_API_VERSION, \ 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 */ #else /* def SIMULATOR */
/* decoders */ /* decoders */
@ -273,12 +274,12 @@ extern unsigned char plugin_end_addr[];
const struct codec_header __header \ const struct codec_header __header \
__attribute__((visibility("default"))) = { \ __attribute__((visibility("default"))) = { \
CODEC_MAGIC, TARGET_ID, CODEC_API_VERSION, \ CODEC_MAGIC, TARGET_ID, CODEC_API_VERSION, \
NULL, NULL, codec_start }; NULL, NULL, codec_start, &ci };
/* encoders */ /* encoders */
#define CODEC_ENC_HEADER \ #define CODEC_ENC_HEADER \
const struct codec_header __header = { \ const struct codec_header __header = { \
CODEC_ENC_MAGIC, TARGET_ID, CODEC_API_VERSION, \ CODEC_ENC_MAGIC, TARGET_ID, CODEC_API_VERSION, \
NULL, NULL, codec_start }; NULL, NULL, codec_start, &ci };
#endif /* SIMULATOR */ #endif /* SIMULATOR */
#endif /* CODEC */ #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); int codec_load_file(const char* codec, struct codec_api *api);
/* defined by the codec */ /* 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); enum codec_status codec_main(void);
#ifndef CACHE_FUNCTION_WRAPPERS #ifndef CACHE_FUNCTION_WRAPPERS

View file

@ -22,7 +22,7 @@
#include "config.h" #include "config.h"
#include "codeclib.h" #include "codeclib.h"
struct codec_api *ci; struct codec_api *ci __attribute__ ((section (".data")));
extern unsigned char iramcopy[]; extern unsigned char iramcopy[];
extern unsigned char iramstart[]; extern unsigned char iramstart[];
@ -36,16 +36,15 @@ extern enum codec_status codec_main(void);
CACHE_FUNCTION_WRAPPERS(ci); CACHE_FUNCTION_WRAPPERS(ci);
enum codec_status codec_start(struct codec_api *api) enum codec_status codec_start(void)
{ {
#ifndef SIMULATOR #ifndef SIMULATOR
#ifdef USE_IRAM #ifdef USE_IRAM
api->memcpy(iramstart, iramcopy, iramend - iramstart); ci->memcpy(iramstart, iramcopy, iramend - iramstart);
api->memset(iedata, 0, iend - iedata); ci->memset(iedata, 0, iend - iedata);
#endif #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 #endif
ci = api;
#if NUM_CORES > 1 #if NUM_CORES > 1
/* writeback cleared iedata and bss areas */ /* writeback cleared iedata and bss areas */
flush_icache(); flush_icache();