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:
parent
44f88585cb
commit
44554e6075
3 changed files with 16 additions and 15 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue