#ifndef __XMEDIA_SVP_STD_H__ #define __XMEDIA_SVP_STD_H__ #include #include "mkp_npu.h" #include "xmedia_sys.h" #include "xmedia_svp.h" #include "xmedia_mmz.h" #define UNSIGNED_8_BIT_NUM 256 // U8类型最大限制 #define SVP_MIN_ATTR_STILLNESS_THRES 0.6 // 静止状态阈值最小限制 #ifdef __cplusplus extern "C" { #endif #define CHECK_SVP_COND_GOTO_ERROR(cond, label, ...) \ do { \ if (cond) { \ SVP_TRACE(MODULE_DBG_ERR, __VA_ARGS__); \ goto label; \ } \ } while(0); \ #define CHECK_SVP_COND_RETURN_ERROR(cond, ...) \ do { \ if (cond) { \ SVP_TRACE(MODULE_DBG_ERR, __VA_ARGS__); \ return XMEDIA_FAILURE; \ } \ } while(0); \ #define CHECK_CALLOC_RETURN_ERROR(a) \ if (NULL == a) { \ SVP_TRACE(MODULE_DBG_ERR, "out of memory\n"); \ return XMEDIA_FAILURE; \ } #define CHECK_CALLOC_RETURN_NULL(a) \ if (NULL == a) { \ SVP_TRACE(MODULE_DBG_ERR, "out of memory\n"); \ return NULL; \ } #define CHECK_CALLOC_RETURN_VOID(a) \ if (NULL == a) { \ SVP_TRACE(MODULE_DBG_ERR, "out of memory\n"); \ return; \ } #define CHECK_CALLOC_GOTO_ERROR(a, label) \ do { \ if (a == NULL) { \ SVP_TRACE(MODULE_DBG_ERR, "out of memory\n"); \ goto label; \ } \ } while(0) #define CFREE(a) \ if (a) { \ free(a); \ a = NULL; \ } #define STD_MAX(a, b) ((a) > (b) ? (a) : (b)) #define STD_MIN(a, b) ((a) > (b) ? (b) : (a)) #define SVP_CHECK_U8(src_data, ...) \ do { \ if ((src_data) < 0 || (src_data) > UNSIGNED_8_BIT_NUM) { \ SVP_TRACE(MODULE_DBG_ERR, __VA_ARGS__); \ return (XMEDIA_FAILURE); \ } \ } while (0); #define SVP_CHECK_ATTR_STILLNESS_THRES(src_data, ...) \ do { \ if ((src_data) <= SVP_MIN_ATTR_STILLNESS_THRES || (src_data) >= 1) { \ SVP_TRACE(MODULE_DBG_ERR, __VA_ARGS__); \ return (XMEDIA_FAILURE); \ } \ } while (0); #define SVP_CHECK_ATTR_THRESHOLD(src_data, ...) \ do { \ if ((src_data) <= 0 || (src_data) >= 1) { \ SVP_TRACE(MODULE_DBG_ERR, __VA_ARGS__); \ return (XMEDIA_FAILURE); \ } \ } while (0); #define SVP_CHECK_ATTR_NUM(src_data, ...) \ do { \ if ((src_data) <= 0 || (src_data) > XMEDIA_SVP_MAX_TARGET_NUM) { \ SVP_TRACE(MODULE_DBG_ERR, __VA_ARGS__); \ return (XMEDIA_FAILURE); \ } \ } while (0); #define SVP_CHECK_ATTR_ENABLE(src_data, ...) \ do { \ if ((src_data) != XMEDIA_FALSE && (src_data) != XMEDIA_TRUE) { \ SVP_TRACE(MODULE_DBG_ERR, __VA_ARGS__); \ return (XMEDIA_FAILURE); \ } \ } while (0); static __inline__ xmedia_s32 check_file_exist(xmedia_char *filepath) { struct stat file_stat; if (stat(filepath, &file_stat) != 0) { SVP_TRACE(MODULE_DBG_ERR, "error, model file path err or not exist\n"); return XMEDIA_FAILURE; } return XMEDIA_SUCCESS; } static __inline__ xmedia_s32 svp_mmz_alloc(xmedia_char *buf_name, xmedia_u64 *phy_addr, xmedia_u32 size) { xmedia_chn_info chn_info = { 0 }; xmedia_s32 ret = XMEDIA_SUCCESS; xmedia_char mmz_name[MAX_MMZ_NAME_LEN] = { 0 }; chn_info.mod_id = MOD_ID_NPU_SVP; chn_info.chn_id = 0; chn_info.dev_id = 0; ret = xmedia_sys_get_mem_config(&chn_info, mmz_name); if (ret != XMEDIA_SUCCESS) { SVP_TRACE(MODULE_DBG_ERR, "xmedia_sys_get_mem_config failed %d \n", ret); return ret; } *phy_addr = xmedia_mmz_alloc(mmz_name, buf_name, size); if (*phy_addr == XMEDIA_NULL) { SVP_TRACE(MODULE_DBG_ERR, "xmedia_mmz_alloc filed, size %d \n", size); return XMEDIA_FAILURE; } return XMEDIA_SUCCESS; } static __inline__ xmedia_s32 svp_mmz_alloc_and_map(xmedia_char *buf_name, xmedia_u64 *phy_addr, xmedia_void **virt_addr, xmedia_u32 size) { xmedia_chn_info chn_info = { 0 }; xmedia_s32 ret = XMEDIA_SUCCESS; xmedia_char mmz_name[MAX_MMZ_NAME_LEN] = { 0 }; chn_info.mod_id = MOD_ID_NPU_SVP; chn_info.chn_id = 0; chn_info.dev_id =0; ret = xmedia_sys_get_mem_config(&chn_info, mmz_name); if (ret != XMEDIA_SUCCESS) { SVP_TRACE(MODULE_DBG_ERR, "xmedia_sys_get_mem_config failed %d \n", ret); return ret; } *phy_addr = xmedia_mmz_alloc(mmz_name, buf_name, size); if (*phy_addr != XMEDIA_NULL) { *virt_addr = xmedia_mmz_map(*phy_addr, size, XMEDIA_FALSE); if (*virt_addr == XMEDIA_NULL) { SVP_TRACE(MODULE_DBG_ERR, "xmedia_mmz_map filed, size %d \n", size); xmedia_mmz_free(*phy_addr); return XMEDIA_FAILURE; } } else { SVP_TRACE(MODULE_DBG_ERR, "xmedia_mmz_alloc filed, size %d \n", size); return XMEDIA_FAILURE; } return XMEDIA_SUCCESS; } static __inline__ xmedia_s32 svp_mmz_alloc_and_map_cache(xmedia_char *buf_name, xmedia_u64 *phy_addr, xmedia_void **virt_addr, xmedia_u32 size) { xmedia_chn_info chn_info = { 0 }; xmedia_s32 ret = XMEDIA_SUCCESS; xmedia_char mmz_name[MAX_MMZ_NAME_LEN] = { 0 }; chn_info.mod_id = MOD_ID_NPU_SVP; chn_info.chn_id = 0; chn_info.dev_id = 0; ret = xmedia_sys_get_mem_config(&chn_info, mmz_name); if (ret != XMEDIA_SUCCESS) { SVP_TRACE(MODULE_DBG_ERR, "xmedia_sys_get_mem_config failed %d \n", ret); return ret; } *phy_addr = xmedia_mmz_alloc(mmz_name, buf_name, size); if (*phy_addr != XMEDIA_NULL) { *virt_addr = xmedia_mmz_map(*phy_addr, size, XMEDIA_TRUE); if (*virt_addr == XMEDIA_NULL) { SVP_TRACE(MODULE_DBG_ERR, "xmedia_mmz_map filed, size %d \n", size); xmedia_mmz_free(*phy_addr); return XMEDIA_FAILURE; } } else { SVP_TRACE(MODULE_DBG_ERR, "xmedia_mmz_alloc filed, size %d \n", size); return XMEDIA_FAILURE; } return XMEDIA_SUCCESS; } static __inline__ xmedia_void svp_mmz_unmap_and_free(xmedia_u64 phy_addr, xmedia_void *virt_addr) { if (virt_addr != XMEDIA_NULL) { xmedia_mmz_unmap(virt_addr); } xmedia_mmz_free(phy_addr); } #ifdef __cplusplus } #endif #endif