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);
|
|
}
|
|
|