KT24-1110_65E-HA-651B/cpu/br25/audio_effect/audio_vbass_demo.c
2024-11-10 18:44:17 +08:00

91 lines
2.6 KiB
C

#include "audio_vbass_demo.h"
#include "app_config.h"
#include "audio_eff_default_parm.h"
#if AUDIO_VBASS_CONFIG
VirtualBass_TOOL_SET vbass_parm[mode_add];
extern u32 __app_movable_slot2_start[];
extern u32 __app_movable_slot3_start[];
extern u8 __movable_region2_start[];
extern u8 __movable_region3_start[];
static u8 *audio_vbass_code_run_addr = NULL;
static u32 *start_of_region = NULL; // 记录当前代码所在区域的起始地址
void audio_vbass_code_movable_load()
{
#if AUDIO_EFFECTS_VBASS_AT_RAM
int code_size = __movable_region3_start - __movable_region2_start;
printf("code_size:%d\n", code_size);
mem_stats();
if (code_size && audio_vbass_code_run_addr == NULL) {
audio_vbass_code_run_addr = phy_malloc(code_size);
}
if (audio_vbass_code_run_addr) {
printf("audio_vbass_code_run_addr:0x%x", audio_vbass_code_run_addr);
code_movable_load(__movable_region2_start, code_size, audio_vbass_code_run_addr, __app_movable_slot2_start, __app_movable_slot3_start, &start_of_region);
mem_stats();
}
#endif
}
void audio_vbass_code_movable_unload()
{
#if AUDIO_EFFECTS_VBASS_AT_RAM
if (audio_vbass_code_run_addr) {
mem_stats();
code_movable_unload(__movable_region2_start, __app_movable_slot2_start, __app_movable_slot3_start, &start_of_region);
phy_free(audio_vbass_code_run_addr);
audio_vbass_code_run_addr = NULL;
mem_stats();
}
#endif
}
vbass_hdl *audio_vbass_open_demo(u32 vbass_name, u32 sample_rate, u8 ch_num)
{
audio_vbass_code_movable_load();
VirtualBassParam parm = {0};
u8 tar = 0;
#if defined(LINEIN_MODE_SOLE_EQ_EN) && LINEIN_MODE_SOLE_EQ_EN
if (vbass_name == AEID_AUX_VBASS) {
tar = 1;
}
#endif
u8 bypass = vbass_parm[tar].is_bypass;
parm.ratio = vbass_parm[tar].parm.ratio;
parm.boost = vbass_parm[tar].parm.boost;
parm.fc = vbass_parm[tar].parm.fc;
parm.channel = ch_num;
parm.SampleRate = sample_rate;
//printf("vbass ratio %d, boost %d, fc %d, channel %d, SampleRate %d\n", parm.ratio, parm.boost, parm.fc,parm.channel, parm.SampleRate);
vbass_hdl *vbass = audio_vbass_open(vbass_name, &parm);
audio_vbass_bypass(vbass_name, bypass);
clock_add(DEC_VBASS_CLK);
return vbass;
}
void audio_vbass_close_demo(vbass_hdl *vbass)
{
if (vbass) {
audio_vbass_close(vbass);
vbass = NULL;
}
clock_remove(DEC_VBASS_CLK);
audio_vbass_code_movable_unload();
}
void audio_vbass_update_demo(u32 vbass_name, VirtualBassUdateParam *parm, u32 bypass)
{
audio_vbass_parm_update(vbass_name, parm);
audio_vbass_bypass(vbass_name, bypass);
}
#endif