// 在 BINOCULOR_AVS 和 AIISP_ENABLED 共存时,修正内存池叠加逻辑
// 修改点1:AIISP_ENABLED的blk_cnt叠加应使用增量方式
// 修改前:mem_cfg.pool_info[index].blk_cnt = 6;(覆盖式赋值)
// 修改后:
#ifdef AIISP_ENABLED
mem_cfg.pool_info[index].blk_cnt = 6; /*基础值*/
// 追加双目模式的叠加
#ifdef BINOCULOR_AVS
mem_cfg.pool_info[index].blk_cnt += (3 * vsp_src_cnt);
#endif
#else
// 保留原有非AIISP逻辑
#ifdef BINOCULOR_AVS
mem_cfg.pool_info[index].blk_cnt = 3 * vsp_src_cnt;
#else
mem_cfg.pool_info[index].blk_cnt = 2;
#endif
#endif
// 修改点2:index变量管理优化
// 在 BINOCULOR_AVS 代码块末尾增加防御性判断
#ifdef BINOCULOR_AVS
// 原有代码...
index++; // 最后一个DRE工作缓冲区分配后的index递增
// 增加防御性判断:确保index不越界
#define MAX_POOL_INFO_CNT 32
if(index >= MAX_POOL_INFO_CNT) {
ret = HD_FAILURE;
return ret;
}
#endif
// 修改点3:MD缓冲区分配前的index检查
// 原代码直接使用index,增加条件判断
UINT32 md_buf_size = 0;
#if 1
// MD相关定义不变...
#endif
// 修改前:直接使用当前index
// 修改后:增加AIISP/BINOCULOR_AVS特判
if (g_motion_detection_enabled) {
#ifdef AIISP_ENABLED
// AIISP专用MD缓冲区
mem_cfg.pool_info[index].blk_size = CALC_AIISP_MD_SIZE();
#else
mem_cfg.pool_info[index].blk_size = MD_HEAD_BUFSIZE() + MD_INFO_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H);
#endif
#ifdef BINOCULOR_AVS
mem_cfg.pool_info[index].blk_cnt = 6; // 双目模式需要更多缓冲
#else
mem_cfg.pool_info[index].blk_cnt = 3;
#endif
index++;
}
// 修改点4:BNR缓冲区分配时的双目模式适配
#ifdef BINOCULOR_AVS
// 修改前:直接乘2
// 修改后:增加条件编译保护
mem_cfg.pool_info[index].blk_cnt = 4;
#ifdef BINOCULOR_AVS
#ifdef AIISP_ENABLED
mem_cfg.pool_info[index].blk_cnt *= 3; // AIISP+双目需要更多缓冲
#else
mem_cfg.pool_info[index].blk_cnt *= 2;
#endif
#endif
#endif
具体怎么修改下面的代码啊
HD_RESULT mem_init(void)
{
HD_RESULT ret;
HD_COMMON_MEM_INIT_CONFIG mem_cfg = {0};
#ifdef DLA_SUPPORT
int model_size = 0;
#endif
#if defined(DLA_SUPPORT) || defined(DUAL_SENSOR) || defined(SENSOR_RESOLUTION_8MP) || defined(SENSOR_RESOLUTION_5MP) \
|| defined(AIISP_ENABLED) || defined(SENSOR_RESOLUTION_4MP) || defined(SENSOR_RESOLUTION_12MP) || defined(MEDIA_PIPELINE_BASE_PTZ5425)
int index = 0;
#endif
#ifdef BINOCULOR_AVS
int i = 0;
int vsp_dev_cnt = MAX_STICHING_CHN_CNT;
int vsp_src_cnt = MIN_AVS_SRC_CHAN_NUM;
int max_ovlp_width = 0;
#endif
// config common pool (main)
mem_cfg.pool_info[0].type = HD_COMMON_MEM_COMMON_POOL;
// 双目拼接机型需要使用左右目YUV420原图做色差校正检验(产测模式)和自动拼接,不压缩
#ifdef BINOCULOR_AVS
mem_cfg.pool_info[0].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(ALIGN_CEIL_16(VDO_SIZE_W), ALIGN_CEIL_16(VDO_SIZE_H), HD_VIDEO_PXLFMT_YUV420); // align to 16 for rotate buffer
#else
if (YUV_COMPRESS_ENABLE == 1)
{
mem_cfg.pool_info[0].blk_size = DBGINFO_BUFSIZE()+VDO_NVX_BUFSIZE(ALIGN_CEIL_16(VDO_SIZE_W), ALIGN_CEIL_16(VDO_SIZE_H), HD_VIDEO_PXLFMT_YUV420); // align to 16 for rotate buffer
}
else
{
mem_cfg.pool_info[0].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(ALIGN_CEIL_16(VDO_SIZE_W), ALIGN_CEIL_16(VDO_SIZE_H), HD_VIDEO_PXLFMT_YUV420); // align to 16 for rotate buffer
}
#endif
#ifdef DUAL_SENSOR
mem_cfg.pool_info[0].blk_cnt = 5;
#else
mem_cfg.pool_info[0].blk_cnt = 1;
#endif
#ifdef HDR_MODE_SUPPORT
if (g_hdr_enabled)
{
mem_cfg.pool_info[0].blk_cnt += 1;
}
#endif
#ifdef AIISP_ENABLED
mem_cfg.pool_info[0].blk_cnt += 2;
#endif
#ifdef SENSOR_RESOLUTION_8MP
mem_cfg.pool_info[0].blk_cnt = 3;
#elif defined SENSOR_RESOLUTION_12MP
mem_cfg.pool_info[0].blk_cnt = 3;
#elif defined SENSOR_RESOLUTION_5MP
mem_cfg.pool_info[0].blk_cnt = 2;
#elif defined MEDIA_PIPELINE_BASE_PTZ5425
mem_cfg.pool_info[0].blk_cnt = 3;
#endif
#ifdef BINOCULOR_AVS
mem_cfg.pool_info[0].blk_cnt += (3 * vsp_src_cnt);
#endif
mem_cfg.pool_info[0].ddr_id = DDR_ID0;
// config common pool (sub)
mem_cfg.pool_info[1].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[1].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(ALIGN_CEIL_16(SUB_VDO_SIZE_W), ALIGN_CEIL_16(SUB_VDO_SIZE_H), HD_VIDEO_PXLFMT_YUV420); // align to 16 for rotate buffer
#ifdef DUAL_SENSOR
mem_cfg.pool_info[1].blk_cnt = 6;
#elif MEDIA_PIPELINE_BASE_PTZ5425
mem_cfg.pool_info[1].blk_cnt = 4;
#else
mem_cfg.pool_info[1].blk_cnt = 4;
#endif
mem_cfg.pool_info[1].ddr_id = DDR_ID0;
// TODO:if needed
// config common pool (jpeg)
mem_cfg.pool_info[2].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[2].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(ALIGN_CEIL_16(JPEG_VDO_SIZE_W), ALIGN_CEIL_16(JPEG_VDO_SIZE_H), HD_VIDEO_PXLFMT_YUV420);
#if (defined SENSOR_RESOLUTION_4MP || defined SENSOR_RESOLUTION_8MP || defined SENSOR_RESOLUTION_12MP) && (defined HDR_MODE_SUPPORT)
if (g_hdr_enabled)
{
mem_cfg.pool_info[2].blk_cnt = 2;
}
else
{
mem_cfg.pool_info[2].blk_cnt = 1;
}
#else
mem_cfg.pool_info[2].blk_cnt = 1;
#endif
mem_cfg.pool_info[2].ddr_id = DDR_ID0;
/* 由于人脸抓拍的处理耗时较久,因此识别流通道及其扩展通道JPEG需要加大一块缓存,防止get blk failed */
if(g_face_enabled)
{
mem_cfg.pool_info[2].blk_cnt += 1;
}
// config common pool (divp)
mem_cfg.pool_info[3].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[3].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(ISP_FRAME_WIDTH, ISP_FRAME_HEIGHT, HD_VIDEO_PXLFMT_YUV420);
#ifdef DUAL_SENSOR
mem_cfg.pool_info[3].blk_cnt = 2;
#else
mem_cfg.pool_info[3].blk_cnt = 1;
#endif
mem_cfg.pool_info[3].ddr_id = DDR_ID0;
// user pool for ao
mem_cfg.pool_info[4].type = HD_COMMON_MEM_USER_POOL_BEGIN;
mem_cfg.pool_info[4].blk_size = 0x1000;
mem_cfg.pool_info[4].blk_cnt = 1;
mem_cfg.pool_info[4].ddr_id = DDR_ID0;
#ifdef DUAL_SENSOR
// config common pool (osg--main-time)
mem_cfg.pool_info[5].type = HD_COMMON_MEM_OSG_POOL;
mem_cfg.pool_info[5].blk_size = get_stampsize(STRM_ID_MAIN,1);
mem_cfg.pool_info[5].blk_cnt = 2;
mem_cfg.pool_info[5].ddr_id = DDR_ID0;
// config common pool (osg--main)
mem_cfg.pool_info[6].type = HD_COMMON_MEM_OSG_POOL;
mem_cfg.pool_info[6].blk_size = get_stampsize(STRM_ID_MAIN,0);
mem_cfg.pool_info[6].blk_cnt = 6;
mem_cfg.pool_info[6].ddr_id = DDR_ID0;
// config common pool (osg--minor-time)
mem_cfg.pool_info[7].type = HD_COMMON_MEM_OSG_POOL;
mem_cfg.pool_info[7].blk_size = get_stampsize(STRM_ID_MINOR,1);
mem_cfg.pool_info[7].blk_cnt = 2;
mem_cfg.pool_info[7].ddr_id = DDR_ID0;
// config common pool (osg--minor)
mem_cfg.pool_info[8].type = HD_COMMON_MEM_OSG_POOL;
mem_cfg.pool_info[8].blk_size = get_stampsize(STRM_ID_MINOR,0);
mem_cfg.pool_info[8].blk_cnt = 6;
mem_cfg.pool_info[8].ddr_id = DDR_ID0;
#else
mem_cfg.pool_info[5].type = HD_COMMON_MEM_OSG_POOL;
mem_cfg.pool_info[5].blk_size = get_stampsize(STRM_ID_MAIN,1);
mem_cfg.pool_info[5].blk_cnt = 1;
mem_cfg.pool_info[5].ddr_id = DDR_ID0;
// config common pool (osg--main)
mem_cfg.pool_info[6].type = HD_COMMON_MEM_OSG_POOL;
mem_cfg.pool_info[6].blk_size = get_stampsize(STRM_ID_MAIN,0);
/*OSD PTZ显示需额外占用一个内存块*/
#ifdef SUPPORT_PTZ_OSD
mem_cfg.pool_info[6].blk_cnt = 4;
#else
mem_cfg.pool_info[6].blk_cnt = 3;
#endif
mem_cfg.pool_info[6].ddr_id = DDR_ID0;
// config common pool (osg--minor-time)
mem_cfg.pool_info[7].type = HD_COMMON_MEM_OSG_POOL;
mem_cfg.pool_info[7].blk_size = get_stampsize(STRM_ID_MINOR,1);
mem_cfg.pool_info[7].blk_cnt = 1;
mem_cfg.pool_info[7].ddr_id = DDR_ID0;
// config common pool (osg--minor)
mem_cfg.pool_info[8].type = HD_COMMON_MEM_OSG_POOL;
mem_cfg.pool_info[8].blk_size = get_stampsize(STRM_ID_MINOR,0);
/*OSD PTZ显示需额外占用一个内存块*/
#ifdef SUPPORT_PTZ_OSD
mem_cfg.pool_info[8].blk_cnt = 4;
#else
mem_cfg.pool_info[8].blk_cnt = 3;
#endif
mem_cfg.pool_info[8].ddr_id = DDR_ID0;
#endif
// config common pool
mem_cfg.pool_info[9].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[9].blk_size = 0x38C0;
mem_cfg.pool_info[9].blk_cnt = 4;
mem_cfg.pool_info[9].ddr_id = DDR_ID0;
#if defined(DUAL_SENSOR) || defined(SENSOR_RESOLUTION_8MP) || defined(SENSOR_RESOLUTION_5MP) \
|| defined(AIISP_ENABLED) || defined(SENSOR_RESOLUTION_4MP) || defined(SENSOR_RESOLUTION_12MP) || defined(MEDIA_PIPELINE_BASE_PTZ5425)
index = 10;
#endif
#ifdef DLA_SUPPORT
// config common pool (dla)
mem_cfg.pool_info[10].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[10].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(DLA_FRAME_WIDTH, DLA_FRAME_HEIGHT, HD_VIDEO_PXLFMT_YUV420);
#ifdef DUAL_SENSOR
mem_cfg.pool_info[10].blk_cnt = 2;
#elif defined SENSOR_RESOLUTION_8MP
mem_cfg.pool_info[10].blk_cnt = 2;
#elif defined SENSOR_RESOLUTION_12MP
mem_cfg.pool_info[10].blk_cnt = 2;
#elif defined MEDIA_PIPELINE_BASE_PTZ5425
mem_cfg.pool_info[10].blk_cnt = 1;
#else
mem_cfg.pool_info[10].blk_cnt = 1;
#endif
mem_cfg.pool_info[10].ddr_id = DDR_ID0;
index = 11;
//模型加载
#define UTILS_MAX(a, b) (((a) > (b)) * (a) + ((a) <= (b)) * (b))
int size_0 = _getsize_model(OBJ_DET_MODEL_FILE_NAME);
int size_90 = _getsize_model(OBJ_DET_MODEL_FILE_NAME_90);
int size_270 = _getsize_model(OBJ_DET_MODEL_FILE_NAME_270);
int size_fd_0 = _getsize_model(OBJ_DET_MODEL_FILE_NAME_FD);
int size_fd_90 = _getsize_model(OBJ_DET_MODEL_FILE_NAME_FD_90);
int size_fd_270 = _getsize_model(OBJ_DET_MODEL_FILE_NAME_FD_270);
int max_blk_size = UTILS_MAX(size_0, size_90);
max_blk_size = UTILS_MAX(max_blk_size, size_270);
max_blk_size = UTILS_MAX(max_blk_size, size_fd_0);
max_blk_size = UTILS_MAX(max_blk_size, size_fd_90);
max_blk_size = UTILS_MAX(max_blk_size, size_fd_270);
printf("**************** max_blk_size:%d *****************", max_blk_size);
model_size = max_blk_size;
if (model_size > 0)
{
mem_cfg.pool_info[index].type = HD_COMMON_MEM_USER_DEFINIED_POOL;
mem_cfg.pool_info[index].blk_size = model_size;
mem_cfg.pool_info[index].blk_cnt = 1;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
}
/* 通过宏确定能加载的人头最大模型大小, 按照最大申请 */
int size_head0 = _getsize_model(HEAD_DET_MODEL_FILE_NAME);
int size_head90 = _getsize_model(HEAD_DET_MODEL_FILE_NAME_90);
int max_head_blk_size = size_head0 > size_head90 ? size_head0 : size_head90;
model_size = max_head_blk_size;
if (model_size > 0)
{
mem_cfg.pool_info[index].type = HD_COMMON_MEM_USER_DEFINIED_POOL;
mem_cfg.pool_info[index].blk_size = model_size;
mem_cfg.pool_info[index].blk_cnt = 1;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
}
model_size = _getsize_model(PCLS_MODEL_FILE_NAME);
if (model_size > 0)
{
mem_cfg.pool_info[index].type = HD_COMMON_MEM_USER_DEFINIED_POOL;
mem_cfg.pool_info[index].blk_size = model_size;
mem_cfg.pool_info[index].blk_cnt = 1;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
}
#ifdef DLA_REC_STREAM_SUPPORT
if (g_people_enabled)
{
//PR
model_size = _getsize_model(PR_MODEL_FILE_NAME);
if (model_size > 0)
{
mem_cfg.pool_info[index].type = HD_COMMON_MEM_USER_DEFINIED_POOL;
mem_cfg.pool_info[index].blk_size = model_size;
mem_cfg.pool_info[index].blk_cnt = 1;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
}
//PKP
model_size = _getsize_model(PKP_MODEL_FILE_NAME);
if (model_size > 0)
{
mem_cfg.pool_info[index].type = HD_COMMON_MEM_USER_DEFINIED_POOL;
mem_cfg.pool_info[index].blk_size = model_size;
mem_cfg.pool_info[index].blk_cnt = 1;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
}
}
if (g_vehicle_enabled)
{ //VTC
model_size = _getsize_model(VTC_MODEL_FILE_NAME);
if (model_size > 0)
{
mem_cfg.pool_info[index].type = HD_COMMON_MEM_USER_DEFINIED_POOL;
mem_cfg.pool_info[index].blk_size = model_size;
mem_cfg.pool_info[index].blk_cnt = 1;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
}
}
#endif
#ifdef DLA_FSS_SUPPORT
if (g_face_enabled)
{
model_size = _getsize_model(FACE_REC_MODEL_FILE_NAME);
if (model_size > 0)
{
mem_cfg.pool_info[index].type = HD_COMMON_MEM_USER_DEFINIED_POOL;
mem_cfg.pool_info[index].blk_size = model_size;
mem_cfg.pool_info[index].blk_cnt = 1;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
}
model_size = _getsize_model(FACE_LANDMARK_MODE_FILE_NAME);
if (model_size > 0)
{
mem_cfg.pool_info[index].type = HD_COMMON_MEM_USER_DEFINIED_POOL;
mem_cfg.pool_info[index].blk_size = model_size;
mem_cfg.pool_info[index].blk_cnt = 1;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
}
}
#endif
#ifdef VENC_YUV2JPG_SUPPORT
if (g_face_enabled || g_people_enabled || g_vehicle_enabled || g_head_detection_enabled)
{
mem_cfg.pool_info[index].type = HD_COMMON_MEM_USER_DEFINIED_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(VENC_JPEG_MAX_WIDTH, VENC_JPEG_MAX_HEIGHT, HD_VIDEO_PXLFMT_YUV420);
mem_cfg.pool_info[index].blk_cnt = 1;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
}
#endif
#ifdef DLA_REC_STREAM_SUPPORT
if (g_face_enabled || g_people_enabled || g_vehicle_enabled)
{
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(DLA_REC_FRAME_WIDTH, DLA_REC_FRAME_HEIGHT, HD_VIDEO_PXLFMT_YUV420);
mem_cfg.pool_info[index].blk_cnt = 2;/* 1个block用于识别流,1个block用于jpeg扩展通道, 由于JPEG的实际帧率较低,可以视为基本上不占用 */
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
}
/* 由于人脸抓拍的处理耗时较久,因此识别流通道及其扩展通道JPEG需要加大一块缓存,防止get blk failed */
if(g_face_enabled)
{
mem_cfg.pool_info[index].blk_cnt += 1;
}
index++;
#endif
#endif
#ifdef DUAL_SENSOR
// config common pool (cap)
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_RAW_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, CAP_OUT_FMT)
+VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H)
+VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
mem_cfg.pool_info[index].blk_cnt = 2;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
#endif
#if (defined SENSOR_RESOLUTION_8MP) || (defined SENSOR_RESOLUTION_12MP)
// config common pool (cap)
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_RAW_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, CAP_OUT_FMT)
+VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H)
+VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
mem_cfg.pool_info[index].blk_cnt = 3;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_NRX_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, CAP_OUT_FMT)
+VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H)
+VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
mem_cfg.pool_info[index].blk_cnt = 3;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
#endif
#ifdef SENSOR_RESOLUTION_5MP
// config common pool (cap)
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_RAW_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, CAP_OUT_FMT)
+VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H)
+VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
mem_cfg.pool_info[index].blk_cnt = 2;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
if(g_hdr_enabled)
{
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_NRX_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, CAP_OUT_FMT)
+VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H)
+VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
mem_cfg.pool_info[index].blk_cnt = 2;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
}
#endif
#ifdef MEDIA_PIPELINE_BASE_PTZ5425
// config common pool (cap)
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_RAW_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, CAP_OUT_FMT)
+VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H)
+VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
mem_cfg.pool_info[index].blk_cnt = 2;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
if(g_hdr_enabled)
{
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_RAW_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, CAP_OUT_FMT)
+VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H)
+VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
mem_cfg.pool_info[index].blk_cnt = 2;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
}
#endif
#if defined(SENSOR_RESOLUTION_4MP) || defined(BINOCULOR_AVS)
/*dram mode*/
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_RAW_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, CAP_OUT_FMT)
+VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H)
+VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
mem_cfg.pool_info[index].blk_cnt = 0;
#ifdef SENSOR_RESOLUTION_4MP
// 如果是其他分辨率的拼接情况,此处就不用再加了。
mem_cfg.pool_info[index].blk_cnt = 3;
#endif
#ifdef BINOCULOR_AVS
// vsp in,及双目rawall pipe out(depth=1)
mem_cfg.pool_info[index].blk_cnt += (3 * vsp_src_cnt);
#endif
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
#endif
#ifdef BINOCULOR_AVS
// vsp out -- 拼接完成的尺寸,vprc、venc
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(ALIGN_CEIL_16(VSP_VPE_OUT_W_0 + VSP_VPE_OUT_W_1 - AVS_OVERLAP_W_0),
VDO_SIZE_H, HD_VIDEO_PXLFMT_YUV420);
mem_cfg.pool_info[index].blk_cnt = 6;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
// vsp scl out -- 拼接完成后gfx scale的尺寸
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(ALIGN_CEIL_16(AVS_SCL_OUT_DEF_W),
AVS_SCL_OUT_DEF_H, HD_VIDEO_PXLFMT_YUV420);
mem_cfg.pool_info[index].blk_cnt = 6;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
// dre fusion buffer
for (i = 0; i < vsp_src_cnt; i ++) {
if (vsp_ovlp_w[i]) {
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = 2 * VDO_YUV_BUFSIZE(vsp_ovlp_w[i], AVS_OVERLAP_H, HD_VIDEO_PXLFMT_Y8);
mem_cfg.pool_info[index].blk_cnt = vsp_dev_cnt * 6;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
}
}
// DRE working buffer
max_ovlp_width = MAX_VAL(MAX_VAL(MAX_VAL(vsp_ovlp_w[0], vsp_ovlp_w[1]),vsp_ovlp_w[2]),vsp_ovlp_w[3]);
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = MAX_AVS_SRC_CHAN_NUM * ALIGN_CEIL_16(max_ovlp_width) * AVS_OVERLAP_H;
mem_cfg.pool_info[index].blk_cnt = vsp_dev_cnt;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
#endif
// config common pool (cap)
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_RAW_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, CAP_OUT_FMT)
+VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H)
+VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
#ifdef AIISP_ENABLED
mem_cfg.pool_info[index].blk_cnt = 6; /*todo: 暂定6块,实际需要根据测试情况减少*/
#else
mem_cfg.pool_info[index].blk_cnt = 2;
#endif
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
/* BNR */
if (g_is_nt98539a)
{
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = vendor_common_mem_calc_max_buf_size(VDO_SIZE_W, VDO_SIZE_H, BNR_OUT_FMT); // NOTE: dim need align to 16 for rotate buffer
mem_cfg.pool_info[index].blk_cnt = 4; /*todo*/
#ifdef BINOCULOR_AVS
mem_cfg.pool_info[index].blk_cnt *= 2;
#endif
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = vendor_common_mem_calc_max_buf_size(VDO_SIZE_W, VDO_SIZE_H, BNR_REF_FMT); // NOTE: dim need align to 16 for rotate buffer
mem_cfg.pool_info[index].blk_cnt = 3; /*todo*/
#ifdef BINOCULOR_AVS
mem_cfg.pool_info[index].blk_cnt *= 2;
#endif
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
#ifdef AIISP_ENABLED
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_AIDED_MAP_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, HD_VIDEO_PXLFMT_RAW12); // NOTE: dim need align to 16 for rotate buffer
mem_cfg.pool_info[index].blk_cnt = 2; /*todo*/
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_AIDED_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, HD_VIDEO_PXLFMT_RAW12); // NOTE: dim need align to 16 for rotate buffer
mem_cfg.pool_info[index].blk_cnt = 3; /*todo*/
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
#endif
}
UINT32 md_buf_size = 0;
#if 1
// MD
#define MD_HEAD_BUFSIZE() (0x40)
// Note , the md info w, h is vprc input w, h not out w, h
#define MD_INFO_BUFSIZE(w, h) (ALIGN_CEIL_64((((w + 511) >> 9) << 2) * ((h + 15) >> 4)))
md_buf_size = MD_HEAD_BUFSIZE() + MD_INFO_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H);
#endif
// config common pool (main)
mem_cfg.pool_info[index].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[index].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, HD_VIDEO_PXLFMT_YUV420)+md_buf_size;
mem_cfg.pool_info[index].blk_cnt = 3;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
#ifdef JPEG_SEPERATE_OSD
/*config commom pool osg--peg, jpeg不使用pingpong buffer,所以不单独给时间osd分配两倍内存*/
mem_cfg.pool_info[index].type = HD_COMMON_MEM_OSG_POOL;
mem_cfg.pool_info[index].blk_size = get_stampsize(STRM_ID_JPEG,0);
mem_cfg.pool_info[index].blk_cnt = 4;
mem_cfg.pool_info[index].ddr_id = DDR_ID0;
index++;
#endif
ret = hd_common_mem_init(&mem_cfg);
return ret;
}
最新发布