106 lines
3.3 KiB
C
106 lines
3.3 KiB
C
#include "asm/includes.h"
|
||
#include "media/includes.h"
|
||
#include "overlay_code.h"
|
||
|
||
|
||
struct code_type {
|
||
u32 type;
|
||
u32 dst;
|
||
u32 src;
|
||
u32 size;
|
||
};
|
||
|
||
////用于区分 overlay code 和 bss
|
||
/*此处不使用这种用法,直接在overlay段中使用LONG(0xFFFFFFFF),避免印代码被优化掉,导致的坑*/
|
||
/* u32 aec_bss_id sec(.aec_bss_id) = 0xffffffff; */
|
||
/* u32 fm_bss_id sec(.fm_bss_id) = 0xffffffff; */
|
||
/* #ifdef CONFIG_MP3_WMA_LIB_SPECIAL */
|
||
/* u32 mp3_bss_id sec(.mp3_bss_id) = 0xffffffff; */
|
||
/* u32 wma_bss_id sec(.wma_bss_id) = 0xffffffff; */
|
||
/* #endif */
|
||
|
||
/* u32 wav_bss_id sec(.wav_bss_id) = 0xffffffff; */
|
||
/* u32 ape_bss_id sec(.ape_bss_id) = 0xffffffff; */
|
||
/* u32 flac_bss_id sec(.flac_bss_id) = 0xffffffff; */
|
||
/* u32 m4a_bss_id sec(.m4a_bss_id) = 0xffffffff; */
|
||
/* u32 amr_bss_id sec(.amr_bss_id) = 0xffffffff; */
|
||
/* u32 dts_bss_id sec(.dts_bss_id) = 0xffffffff; */
|
||
|
||
extern int aec_addr, aec_begin, aec_size;
|
||
extern int wav_addr, wav_begin, wav_size;
|
||
extern int ape_addr, ape_begin, ape_size;
|
||
extern int flac_addr, flac_begin, flac_size;
|
||
extern int m4a_addr, m4a_begin, m4a_size;
|
||
extern int amr_addr, amr_begin, amr_size;
|
||
extern int dts_addr, dts_begin, dts_size;
|
||
extern int fm_addr, fm_begin, fm_size;
|
||
|
||
#ifdef CONFIG_MP3_WMA_LIB_SPECIAL
|
||
extern int mp3_addr, mp3_begin, mp3_size;
|
||
extern int wma_addr, wma_begin, wma_size;
|
||
#endif
|
||
|
||
|
||
const struct code_type ctype[] = {
|
||
{OVERLAY_AEC, (u32) &aec_addr, (u32) &aec_begin, (u32) &aec_size},
|
||
/* {OVERLAY_WAV, (u32) &wav_addr, (u32) &wav_begin, (u32) &wav_size }, */
|
||
/* {OVERLAY_APE, (u32) &ape_addr, (u32) &ape_begin, (u32) &ape_size }, */
|
||
/* {OVERLAY_FLAC, (u32) &flac_addr, (u32) &flac_begin, (u32) &flac_size}, */
|
||
/* {OVERLAY_M4A, (u32) &m4a_addr, (u32) &m4a_begin, (u32) &m4a_size }, */
|
||
/* {OVERLAY_AMR, (u32) &amr_addr, (u32) &amr_begin, (u32) &amr_size }, */
|
||
/* {OVERLAY_DTS, (u32) &dts_addr, (u32) &dts_begin, (u32) &dts_size }, */
|
||
{OVERLAY_FM, (u32) &fm_addr, (u32) &fm_begin, (u32) &fm_size },
|
||
#ifdef CONFIG_MP3_WMA_LIB_SPECIAL
|
||
{OVERLAY_MP3, (u32) &mp3_addr, (u32) &mp3_begin, (u32) &mp3_size },
|
||
{OVERLAY_WMA, (u32) &wma_addr, (u32) &wma_begin, (u32) &wma_size },
|
||
#endif
|
||
|
||
};
|
||
|
||
struct audio_overlay_type {
|
||
u32 atype;
|
||
u32 otype;
|
||
};
|
||
|
||
const struct audio_overlay_type aotype[] = {
|
||
|
||
{AUDIO_CODING_MSBC, OVERLAY_AEC },
|
||
{AUDIO_CODING_CVSD, OVERLAY_AEC },
|
||
/* {AUDIO_CODING_WAV, OVERLAY_WAV}, */
|
||
/* {AUDIO_CODING_APE, OVERLAY_APE }, */
|
||
/* {AUDIO_CODING_FLAC, OVERLAY_FLAC}, */
|
||
/* {AUDIO_CODING_M4A, OVERLAY_M4A }, */
|
||
/* {AUDIO_CODING_ALAC, OVERLAY_M4A }, */
|
||
/* {AUDIO_CODING_AMR, OVERLAY_AMR }, */
|
||
/* {AUDIO_CODING_DTS, OVERLAY_DTS }, */
|
||
#ifdef CONFIG_MP3_WMA_LIB_SPECIAL
|
||
{AUDIO_CODING_MP3, OVERLAY_MP3 },
|
||
{AUDIO_CODING_WMA, OVERLAY_WMA },
|
||
#endif
|
||
|
||
};
|
||
|
||
|
||
void overlay_load_code(u32 type)
|
||
{
|
||
int i = 0;
|
||
for (i = 0; i < ARRAY_SIZE(ctype); i++) {
|
||
if (type == ctype[i].type) {
|
||
if (ctype[i].dst != 0) {
|
||
memcpy((void *)ctype[i].dst, (void *)ctype[i].src, (int)ctype[i].size);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
void audio_overlay_load_code(u32 type)
|
||
{
|
||
int i = 0;
|
||
for (i = 0; i < ARRAY_SIZE(aotype); i++) {
|
||
if (type == aotype[i].atype) {
|
||
overlay_load_code(aotype[i].otype);
|
||
}
|
||
}
|
||
}
|