/* * Copyright (c) 2020, Actions Semi Co., Inc. * * SPDX-License-Identifier: Apache-2.0 */ #define SYS_LOG_DOMAIN "media" #include #include #include #include #include #define BTCALL_EFX_PATTERN "alcfg.bin" #define LINEIN_EFX_PATTERN "linein.efx" #define MUSIC_DRC_EFX_PATTERN "alcfg.bin" #define MUSIC_NO_DRC_EFX_PATTERN "alcfg.bin" static const void *btcall_effect_user_addr; static const void *linein_effect_user_addr; static const void *music_effect_user_addr; int medie_effect_set_user_param(uint8_t stream_type, uint8_t effect_type, const void *vaddr, int size) { const void **user_addr = NULL; int expected_size = 0; switch (stream_type) { case AUDIO_STREAM_VOICE: user_addr = &btcall_effect_user_addr; expected_size = sizeof(asqt_para_bin_t); break; case AUDIO_STREAM_LINEIN: user_addr = &linein_effect_user_addr; expected_size = sizeof(aset_para_bin_t); break; default: user_addr = &music_effect_user_addr; expected_size = sizeof(aset_para_bin_t); break; } printk("%s %d user_addr %p ,expected_size %dvaddr:%p size:%d\n",__FUNCTION__,__LINE__,user_addr,expected_size, vaddr, size); *user_addr = vaddr; return 0; } static const void *_media_effect_load(const char *efx_pattern, int *expected_size, uint8_t stream_type) { char efx_name[16]; void *vaddr = NULL; int size = 0; strncpy(efx_name, efx_pattern, sizeof(efx_name)); sd_fmap(efx_name, &vaddr, &size); if (!vaddr || !size) { SYS_LOG_ERR("not found"); return NULL; } *expected_size = size; SYS_LOG_INF("%s", efx_name); return vaddr; } const void *media_effect_get_param(uint8_t stream_type, uint8_t effect_type, int *effect_size) { const void *user_addr = NULL; const char *efx_pattern = NULL; int expected_size = 0; switch (stream_type) { case AUDIO_STREAM_TTS: /* not use effect file */ return NULL; case AUDIO_STREAM_VOICE: user_addr = btcall_effect_user_addr; efx_pattern = BTCALL_EFX_PATTERN; expected_size = sizeof(asqt_para_bin_t); break; case AUDIO_STREAM_LINEIN: user_addr = linein_effect_user_addr; efx_pattern = LINEIN_EFX_PATTERN; expected_size = sizeof(aset_para_bin_t); break; case AUDIO_STREAM_TWS: user_addr = music_effect_user_addr; efx_pattern = MUSIC_NO_DRC_EFX_PATTERN; expected_size = sizeof(aset_para_bin_t); break; default: user_addr = music_effect_user_addr; #ifdef CONFIG_MUSIC_DRC_EFFECT efx_pattern = MUSIC_DRC_EFX_PATTERN; #else efx_pattern = MUSIC_NO_DRC_EFX_PATTERN; #endif expected_size = sizeof(aset_para_bin_t); break; } if (!user_addr) user_addr = _media_effect_load(efx_pattern, &expected_size, stream_type); if (user_addr && effect_size) *effect_size = expected_size; return user_addr; }