259 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			259 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <stdio.h>
 | |
| #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 <kwrap/debug.h>
 | |
| 
 | |
| 
 | |
| //#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            1920
 | |
| #define VDO_CLONE_SIZE_H            1080
 | |
| 
 | |
| #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 = 4;
 | |
| 	#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);
 | |
| }
 | |
| 
 | 
