#include #include "ImageApp/ImageApp_MovieMulti.h" #include "hdal.h" #include "PrjInc.h" #include "UIApp/MovieStamp/MovieStamp.h" #include "SysSensor.h" #define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER /////////////////////////////////////////////////////////////////////////////// #define __MODULE__ UiAppMovie_CommPool #define __DBGLVL__ ((THIS_DBGLVL>=PRJ_DBG_LVL)?THIS_DBGLVL:PRJ_DBG_LVL) #define __DBGFLT__ "*" //*=All, [mark]=CustomClass #include //#define ENABLE 1 //#define DISABLE 0 #if (defined(_MODEL_565_CARDV_HS880C_)) #define VDO_SIZE_W 1920 #define VDO_SIZE_H 1080 #define VDO_MAIN_SIZE_W 1920 #define VDO_MAIN_SIZE_H 1080 #define VDO_CLONE_SIZE_W 1920 #define VDO_CLONE_SIZE_H 1080 #else #define VDO_SIZE_W 2560 #define VDO_SIZE_H 1440 #define VDO_MAIN_SIZE_W 2560 #define VDO_MAIN_SIZE_H 1440 #define VDO_CLONE_SIZE_W 848 #define VDO_CLONE_SIZE_H 480 #endif #if (_BOARD_DRAM_SIZE_ == 0x04000000 || (defined(_NVT_ETHREARCAM_RX_) && ETH_REARCAM_CAPS_COUNT >=2)) #define VDO_WIFI_SIZE_W 640 #define VDO_WIFI_SIZE_H 640 #else #define VDO_WIFI_SIZE_W 640 #define VDO_WIFI_SIZE_H 640 #endif #define VDO2_SIZE_W 1920 //second sensor. #define VDO2_SIZE_H 1080 //second sensor. #define VDO2_MAIN_SIZE_W 1920 #define VDO2_MAIN_SIZE_H 1080 #define VDO2_CLONE_SIZE_W 848 #define DBGINFO_BUFSIZE() (0x200) #define CA_WIN_NUM_W 32 #define CA_WIN_NUM_H 32 #define LA_WIN_NUM_W 32 #define LA_WIN_NUM_H 32 #define VA_WIN_NUM_W 16 #define VA_WIN_NUM_H 16 #define YOUT_WIN_NUM_W 128 #define YOUT_WIN_NUM_H 128 #define ETH_8BIT_SEL 0 //0: 2bit out, 1:8 bit out #define ETH_OUT_SEL 1 //0: full, 1: subsample 1/2 /////////////////////////////////////////////////////////////////////////////// //header #define DBGINFO_BUFSIZE() (0x200) //RAW #define VDO_RAW_BUFSIZE(w, h, pxlfmt) (ALIGN_CEIL_4((w) * HD_VIDEO_PXLFMT_BPP(pxlfmt) / 8) * (h)) //NRX: RAW compress: Only support 12bit mode #define RAW_COMPRESS_RATIO 59 #define VDO_NRX_BUFSIZE(w, h) (ALIGN_CEIL_4(ALIGN_CEIL_64(w) * 12 / 8 * RAW_COMPRESS_RATIO / 100 * (h))) //CA for AWB #define VDO_CA_BUF_SIZE(win_num_w, win_num_h) ALIGN_CEIL_4((win_num_w * win_num_h << 3) << 1) //LA for AE #define VDO_LA_BUF_SIZE(win_num_w, win_num_h) ALIGN_CEIL_4((win_num_w * win_num_h << 1) << 1) //YUV #define VDO_YUV_BUFSIZE(w, h, pxlfmt) (ALIGN_CEIL_4((w) * HD_VIDEO_PXLFMT_BPP(pxlfmt) / 8) * (h)) //NVX: YUV compress #define YUV_COMPRESS_RATIO 75 #define VDO_NVX_BUFSIZE(w, h, pxlfmt) (VDO_YUV_BUFSIZE(w, h, pxlfmt) * YUV_COMPRESS_RATIO / 100) /////////////////////////////////////////////////////////////////////////////// static HD_COMMON_MEM_INIT_CONFIG mem_cfg = {0}; void Movie_CommPoolInit(void) { UINT32 id=0; UINT32 vcap_buf_size = 0; HD_VIDEO_PXLFMT vcap_fmt = HD_VIDEO_PXLFMT_RAW12; HD_VIDEOOUT_SYSCAPS video_out_syscaps; HD_VIDEOOUT_SYSCAPS *p_video_out_syscaps = &video_out_syscaps; HD_PATH_ID video_out_ctrl = (HD_PATH_ID)GxVideo_GetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_CTRLPATH); HD_RESULT hd_ret = HD_OK; USIZE DispDevSize = {0}; hd_ret = hd_videoout_get(video_out_ctrl, HD_VIDEOOUT_PARAM_SYSCAPS, p_video_out_syscaps); if (hd_ret != HD_OK) { DBG_ERR("get video_out_syscaps failed\r\n"); DispDevSize.w = 960; DispDevSize.h = 240; } else { DispDevSize.w = p_video_out_syscaps->output_dim.w; DispDevSize.h = p_video_out_syscaps->output_dim.h; } // config common pool (cap) for (id = 0; id < (SENSOR_CAPS_COUNT& SENSOR_ON_MASK); id++) { System_GetSensorInfo(id, SENSOR_CAPOUT_FMT, &vcap_fmt); if (HD_VIDEO_PXLFMT_CLASS(vcap_fmt) == HD_VIDEO_PXLFMT_CLASS_YUV) { // YUV switch (id) { case 0: //single sensor vcap_buf_size = VDO_YUV_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, vcap_fmt); break; case 1: // dual sensor vcap_buf_size = VDO_YUV_BUFSIZE(VDO2_SIZE_W, VDO2_SIZE_H, vcap_fmt); break; } } else { // RAW switch (id) { case 0: vcap_buf_size = VDO_RAW_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, vcap_fmt); break; case 1: vcap_buf_size = VDO_RAW_BUFSIZE(VDO2_SIZE_W, VDO2_SIZE_H, vcap_fmt); break; } } #if (MOVIE_DIRECT_FUNC == ENABLE) if (id == 0) { vcap_buf_size = 0; } #endif mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL; mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + vcap_buf_size + 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[id].blk_cnt = 2; mem_cfg.pool_info[id].ddr_id = DDR_ID0; } #if(!defined(_NVT_ETHREARCAM_RX_)) // config common pool (main) //id ++; mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL; #if (MOVIE_YUV_COMPRESS == ENABLE) mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + VDO_NVX_BUFSIZE(VDO_MAIN_SIZE_W, VDO_MAIN_SIZE_H, HD_VIDEO_PXLFMT_YUV420); #else mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + VDO_YUV_BUFSIZE(VDO_MAIN_SIZE_W, VDO_MAIN_SIZE_H, HD_VIDEO_PXLFMT_YUV420); #endif #if (defined(_MODEL_565_CARDV_HS880C_)) mem_cfg.pool_info[id].blk_cnt = 4;//6; //3 for 3dnr-off, 4 for 3dnr-on #else #if (_BOARD_DRAM_SIZE_ == 0x04000000) mem_cfg.pool_info[id].blk_cnt = 4; //3 for 3dnr-off, 4 for 3dnr-on #else mem_cfg.pool_info[id].blk_cnt = 4; //3 for 3dnr-off, 4 for 3dnr-on #endif #endif mem_cfg.pool_info[id].ddr_id = DDR_ID0; #if (_BOARD_DRAM_SIZE_ > 0x04000000) && (MOVIE_AI_DEMO == DISABLE) // config common pool (clone) id ++; mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL; mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(VDO_CLONE_SIZE_W, VDO_CLONE_SIZE_H, HD_VIDEO_PXLFMT_YUV420); #if (defined(_MODEL_565_CARDV_HS880C_)) #if (MOVIE_DIRECT_FUNC == ENABLE) mem_cfg.pool_info[id].blk_cnt = 2; #else mem_cfg.pool_info[id].blk_cnt = 4; #endif #else mem_cfg.pool_info[id].blk_cnt = 6; #endif mem_cfg.pool_info[id].ddr_id = DDR_ID0; #endif // config common pool (disp) id ++; mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL; mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(DispDevSize.w, DispDevSize.h, HD_VIDEO_PXLFMT_YUV420); #if (defined(_MODEL_565_CARDV_HS880C_)) mem_cfg.pool_info[id].blk_cnt = 11;//9; #else mem_cfg.pool_info[id].blk_cnt = 4; #endif mem_cfg.pool_info[id].ddr_id = DDR_ID0; // config common pool (wifi) id ++; mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL; mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(VDO_WIFI_SIZE_W, VDO_WIFI_SIZE_H, HD_VIDEO_PXLFMT_YUV420); #if (defined(_MODEL_565_CARDV_HS880C_)) mem_cfg.pool_info[id].blk_cnt = 6; #else #if (_BOARD_DRAM_SIZE_ == 0x04000000) mem_cfg.pool_info[id].blk_cnt = 3; //no alg #else mem_cfg.pool_info[id].blk_cnt = 2; #endif #endif mem_cfg.pool_info[id].ddr_id = DDR_ID0; #else /// for NVT_ETHREARCAM_RX #if(SENSOR_CAPS_COUNT & SENSOR_ON_MASK) // config common pool (main) //id ++; mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL; mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + VDO_YUV_BUFSIZE(VDO_MAIN_SIZE_W, VDO_MAIN_SIZE_H, HD_VIDEO_PXLFMT_YUV420); mem_cfg.pool_info[id].blk_cnt = 4; //3 for 3dnr-off, 4 for 3dnr-on mem_cfg.pool_info[id].ddr_id = DDR_ID0; // config common pool (clone) id ++; mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL; mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(VDO_CLONE_SIZE_W, VDO_CLONE_SIZE_H, HD_VIDEO_PXLFMT_YUV420); mem_cfg.pool_info[id].blk_cnt = 5; mem_cfg.pool_info[id].ddr_id = DDR_ID0; // config common pool (disp) id ++; #endif mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL; mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(DispDevSize.w, DispDevSize.h, HD_VIDEO_PXLFMT_YUV420); mem_cfg.pool_info[id].blk_cnt = 5; mem_cfg.pool_info[id].ddr_id = DDR_ID0; // config common pool (decode) id ++; mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL; #if (ETH_REARCAM_CAPS_COUNT >= 2) mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(ALIGN_CEIL_64(1920), ALIGN_CEIL_64(1080), HD_VIDEO_PXLFMT_YUV420); mem_cfg.pool_info[id].blk_cnt = 10;//8; #else mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(ALIGN_CEIL_64(1280), ALIGN_CEIL_64(720), HD_VIDEO_PXLFMT_YUV420); mem_cfg.pool_info[id].blk_cnt = 5; #endif mem_cfg.pool_info[id].ddr_id = DDR_ID0; #endif ImageApp_MovieMulti_Config(MOVIE_CONFIG_MEM_POOL_INFO, (UINT32)&mem_cfg); }