MTK adm 使用
两个比较大的数组内存:
1.med_ext_mem
代码中:med_main.c
MED_EXT_MEM_SIZE
kal_uint8 med_ext_mem[MED_EXT_MEM_SIZE];
lis 中查看实际大小
med_ext_mem 0x00007160 Data 921600 med_main.obj(LARGEPOOL_ZI)
2.g_applib_mem_ap_pool
#define APPLIB_MEM_AP_POOL_SIZE sizeof(app_asm_pool_union)
static kal_uint32 g_applib_mem_ap_pool[(APPLIB_MEM_AP_POOL_SIZE + 3) / 4];
ADM(alloc dynamic memory)
MEDIA RAM就是一个固化了的块,不是动态的了.
kal_adm_alloc这个是创建的 第一个参数是选择哪个块,第二个参数是大小
第一个参数,是在创建的时候分配kal_adm_create用这个函数创建
添加ID只是方便模块见内存的管理.
一个是内部的,也就是初始化好的各个模块的内存,一个是外部的,属于动态的,一般不复用内存的应用都使用外部的.
创建:
mem_pool 是全局大数组
/*1 create adm */
if (app_adm_id == NULL)
{
app_adm_id = kal_adm_create(mem_pool, buff_size, NULL, KAL_TRUE);
}
/*2 alloc buffer */
buffer = kal_adm_alloc(app_adm_id, MMI_IVEX_TOTAL_SMALL_CACHE_SIZE);
释放:
/*2 free buffer */
kal_adm_free(app_adm_id, buffer );
/*1 delete adm */
if (g_ivex_cntx.app_adm_id != NULL)
{
kal_adm_delete(g_ivex_cntx.app_adm_id);
g_ivex_cntx.app_adm_id = NULL;
}
media RAM 对上述使用进行了封装:
用了g_med_ext_mem_cntx.ext_mem_pool_id
fsal_buf = (kal_uint8*)med_alloc_ext_mem(AUD_PROC_BUF_SIZE);
if(fsal_buf != NULL)
{
med_free_ext_mem((void**)&fsal_buf);
}