/***************************************************************************** * FUNCTION * med_ext_smalloc_ext * DESCRIPTION * * PARAMETERS * size [IN] * RETURNS * *****************************************************************************/ address_t med_ext_smalloc_ext(size_type size, unsigned short location, const char *file, int line) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ void *ptr; /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ if (size == 0) { return NULL; } switch(location) { case MED_EXT_MEMORY_TYPE_AUDIO_NONCACHEABLE: case MED_EXT_MEMORY_TYPE_AUDIO_CACHEABLE: if (g_med_ext_mem_cntx.aud_mem_pool_id == 0) return NULL; break; default: return NULL; } if (location == MED_EXT_MEMORY_TYPE_AUDIO_NONCACHEABLE) { ptr = MED_MEM_ALLOC(g_med_ext_mem_cntx.aud_mem_pool_id, size,basename((char *)file), line); } else if (location == MED_EXT_MEMORY_TYPE_AUDIO_CACHEABLE) { ptr = MED_MEM_ALLOC_CACHEABLE(g_med_ext_mem_cntx.aud_mem_pool_id, size, MED_MEM_CACHEABLE_ALIGN_SIZE, basename((char *)file), line); } if (ptr!=NULL) { g_med_ext_mem_cntx.aud_mem_alloc_count++; g_med_ext_mem_cntx.aud_mem_left_size = kal_adm_get_total_left_size(g_med_ext_mem_cntx.aud_mem_pool_id); MED_MEM_INFO_AUD(MED_AUD_MEM_SIZE, size, g_med_ext_mem_cntx.aud_mem_left_size, ptr, g_med_ext_mem_cntx.aud_mem_alloc_count); } else { if (size < kal_adm_get_total_left_size(g_med_ext_mem_cntx.aud_mem_pool_id)) { /* fragmentation */ MED_MEM_FRAGMENTATION_AUD(MED_AUD_MEM_SIZE, size, g_med_ext_mem_cntx.aud_mem_left_size,g_med_ext_mem_cntx.aud_mem_alloc_count); } else { /* concurrent */ MED_MEM_CONCURRENT_AUD(MED_AUD_MEM_SIZE, size, g_med_ext_mem_cntx.aud_mem_left_size,g_med_ext_mem_cntx.aud_mem_alloc_count); } } return (address_t) ptr; } /* malloc */
/***************************************************************************** * FUNCTION * med_aud_sfree * DESCRIPTION * * PARAMETERS * ptr [IN] * RETURNS * void *****************************************************************************/ void med_aud_sfree(address_t ptr) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ if (ptr!=NULL) { kal_adm_free(g_med_ext_mem_cntx.aud_mem_pool_id, ptr); g_med_ext_mem_cntx.aud_mem_alloc_count--; g_med_ext_mem_cntx.aud_mem_left_size = kal_adm_get_total_left_size(g_med_ext_mem_cntx.aud_mem_pool_id); MED_FREE_MEM_INFO_AUD(g_med_ext_mem_cntx.aud_mem_left_size, ptr, g_med_ext_mem_cntx.aud_mem_alloc_count ); } }
/*------------------------------------------------------------------------------ Function name: H264SwDecMalloc Purpose: Example implementation of H264SwDecMalloc function. Prototype of this function is given in H264SwDecApi.h. This implementation uses library function malloc for allocation of memory. ------------------------------------------------------------------------------*/ static void *VideoH264DecMalloc(unsigned int size) { void *ptr = NULL; kal_uint32 u4Size; if (rH264SwCtrl.pAdmId == NULL) { ASSERT(0); } u4Size = H264_ROUND_UP_TO_POWER_OF_TWO(size, 4); ptr = kal_adm_alloc(rH264SwCtrl.pAdmId, u4Size); if (ptr == NULL) { kal_uint32 u4LeftSize = kal_adm_get_total_left_size(rH264SwCtrl.pAdmId); EXT_ASSERT(0, u4LeftSize, (kal_uint32)size, 0); } drv_trace2(TRACE_GROUP_10,OPEN_API_SW_GETMEMORY,size,(kal_uint32)ptr); return ptr; }