1.同步P+V IQ和修改卡机问题

This commit is contained in:
payton 2023-12-07 16:28:27 +08:00
parent 2ecffd7895
commit 8ef3f67b2b
2 changed files with 100 additions and 86 deletions

View File

@ -98,6 +98,7 @@ static lfqueue_t write_queue = {0};
#define MOVIE_THUMB_WIDTH 640
#define PRI_MOVIEFAST_CMDTSK 11
#define STKSIZE_MOVIEFAST_CMDTSK 8192
#define MOVIEFAST_REC_SEC 10
//local variable
static DCF_HANDLE g_dcf_hdl = 0;
@ -285,20 +286,19 @@ static void MovieFast_ShutDown(void)
#if POWERON_BOOT_REPORT == ENABLE
DBG_DUMP("PhotoMovie mode = %u\n", mode);
VOS_TICK tick;
PhotoFast_GetTick(g_vprc_trigger_frm_count, &tick);
DBG_DUMP("\n\n**********************************************************\n"
" Trigger Speed(vcap frame count = %lu) : %lu us alg_start_time = %lu g_alg_end_time = %lu, perf tick = %lu us\n"
"**********************************************************\n",
g_vprc_trigger_frm_count, g_vprc_trigger_frm_time, g_alg_start_time, g_alg_end_time, tick);
vos_perf_list_dump();
if(mode == DX_HUNTING_MODE_PHOTO_MOVIE){
MovieFast_PV_Info_Dump();
}
else if(mode == DX_HUNTING_MODE_MOVIE2){
DBG_DUMP("\n\n**********************************************************\n"
" Trigger Speed(vcap frame count = %lu) : %lu us alg_start_time = %lu us g_alg_end_time = %lu us\n"
"**********************************************************\n",
g_vprc_trigger_frm_count, g_vprc_trigger_frm_time, g_alg_start_time, g_alg_end_time);
}
vos_perf_list_dump();
#endif
@ -308,7 +308,16 @@ static void MovieFast_ShutDown(void)
#endif
sf_file_thumb_cfg_sava();
sf_para_print();
DBG_DUMP("wait filesys close ...\n");
#if (LOGFILE_FUNC==ENABLE)
UIMenuStoreInfo *puiPara = sf_ui_para_get();
if(puiPara->DebugMode)
{
DBG_DUMP("LogFile_Close ...\n");
LogFile_Suspend();
LogFile_Close();
}
#endif
//DBG_DUMP("wait filesys close ...\n");
FileSys_Close(FST_TIME_INFINITE);
#if SF_IQ_TEST != ENABLE
if(sf_get_power_off_flag()){
@ -332,19 +341,18 @@ static void MovieFast_ShutDown(void)
#if POWERON_BOOT_REPORT == ENABLE
VOS_TICK tick;
PhotoFast_GetTick(g_vprc_trigger_frm_count, &tick);
DBG_DUMP("\n\n**********************************************************\n"
" Trigger Speed(vcap frame count = %lu) : %lu us alg_start_time = %lu g_alg_end_time = %lu, perf tick = %lu us\n"
"**********************************************************\n",
g_vprc_trigger_frm_count, g_vprc_trigger_frm_time, g_alg_start_time, g_alg_end_time, tick);
vos_perf_list_dump();
if(mode == DX_HUNTING_MODE_PHOTO_MOVIE){
MovieFast_PV_Info_Dump();
}
else if(mode == DX_HUNTING_MODE_MOVIE2){
DBG_DUMP("\n\n**********************************************************\n"
" Trigger Speed(vcap frame count = %lu) : %lu us alg_start_time = %lu us g_alg_end_time = %lu us\n"
"**********************************************************\n",
g_vprc_trigger_frm_count, g_vprc_trigger_frm_time, g_alg_start_time, g_alg_end_time);
}
vos_perf_list_dump();
#endif
@ -772,11 +780,11 @@ static void MovieFast_OnRecStart(void)
//ImageApp_MovieMulti_RecStart(gMovie_Clone_Info[i].rec_id);
#if HUNTING_CAMERA_MCU == ENABLE
ImageApp_MovieMulti_SetParam(gMovie_Clone_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_SEAMLESSSEC, puiPara->VideoLenth);
ImageApp_MovieMulti_SetParam(gMovie_Clone_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_SEAMLESSSEC, puiPara->VideoLenth + 1);
ImageApp_MovieMulti_TrigOnce(gMovie_Clone_Info[i].rec_id, puiPara->VideoLenth);
#else
ImageApp_MovieMulti_SetParam(gMovie_Clone_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_SEAMLESSSEC, 10);
ImageApp_MovieMulti_TrigOnce(gMovie_Clone_Info[i].rec_id, 10);
ImageApp_MovieMulti_SetParam(gMovie_Clone_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_SEAMLESSSEC, MOVIEFAST_REC_SEC + 1);
ImageApp_MovieMulti_TrigOnce(gMovie_Clone_Info[i].rec_id, MOVIEFAST_REC_SEC);
#endif
}
@ -786,12 +794,13 @@ static void MovieFast_OnRecStart(void)
ImageApp_MovieMulti_SetParam(gMovie_Rec_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_BUFRESSEC, uifile_buffer_reserved_sec);
//ImageApp_MovieMulti_RecStart(gMovie_Rec_Info[i].rec_id);
vos_perf_list_mark("trig once", __LINE__, 0);
#if HUNTING_CAMERA_MCU == ENABLE
ImageApp_MovieMulti_SetParam(gMovie_Rec_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_SEAMLESSSEC, puiPara->VideoLenth);
ImageApp_MovieMulti_SetParam(gMovie_Rec_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_SEAMLESSSEC, puiPara->VideoLenth + 1);
ImageApp_MovieMulti_TrigOnce(gMovie_Rec_Info[i].rec_id, puiPara->VideoLenth);
#else
ImageApp_MovieMulti_SetParam(gMovie_Rec_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_SEAMLESSSEC, 10);
ImageApp_MovieMulti_TrigOnce(gMovie_Rec_Info[i].rec_id, 10);
ImageApp_MovieMulti_SetParam(gMovie_Rec_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_SEAMLESSSEC, MOVIEFAST_REC_SEC + 1);
ImageApp_MovieMulti_TrigOnce(gMovie_Rec_Info[i].rec_id, MOVIEFAST_REC_SEC);
#endif
}
@ -897,10 +906,11 @@ static void MovieFast_Manual_Raw_Task(void* arg)
}
ret = hd_videoproc_push_in_buf(vprc_path, &frame, NULL, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS);
if(ret != HD_OK){
/* exposure time might quicker than ipp capability , ignore overrun err */
if(ret != HD_OK && ret != HD_ERR_OVERRUN){
DBG_ERR("hd_videoproc_push_in_buf failed!(%d)\n", ret);
hd_videocap_release_out_buf(vcap_path, &frame);
continue;
break;
}
ret = hd_videocap_release_out_buf(vcap_path, &frame);
@ -912,14 +922,16 @@ static void MovieFast_Manual_Raw_Task(void* arg)
while(1)
{
ret = hd_videocap_pull_out_buf(vcap_path, &frame, 33);
ret = hd_videocap_pull_out_buf(vcap_path, &frame, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS);
if(ret != HD_OK){
DBG_ERR("hd_videocap_pull_out_buf failed!(%d)\n", ret);
break;
}
ret = hd_videoproc_push_in_buf(vprc_path, &frame, NULL, 33);
if(ret != HD_OK){
ret = hd_videoproc_push_in_buf(vprc_path, &frame, NULL, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS);
/* exposure time might quicker than ipp capability , ignore overrun err */
if(ret != HD_OK && ret != HD_ERR_OVERRUN){
DBG_ERR("hd_videoproc_push_in_buf failed!(%d)\n", ret);
hd_videocap_release_out_buf(vcap_path, &frame);
break;
@ -1336,7 +1348,7 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg)
//UI_SetData(FL_MOVIE_SIZE, MOVIE_SIZE_CLONE_1920x1080P30_1280x720P30);
Set_NIGHTMODE(0, 0);
nvt_cmdsys_runcmd("ae set_speed 0 128 200 200 100");
nvt_cmdsys_runcmd("ae set_speed 0 128 700 700 100 ");
}
else{
Set_NIGHTMODE(0, 1);
@ -1362,11 +1374,12 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg)
ImageApp_MovieMulti_Config(MOVIE_CONFIG_ALG_INFO, (UINT32)&gMovie_Alg_Info[0]);
if(DrvGPIO_GetPhotoMovieModeFromMonitor() != DX_HUNTING_MODE_MOVIE2){
MovieFast_Load_Sen_Cfg(MOVIEFAST_IQ_VIDEO);
MovieFast_Load_Sen_Cfg(MOVIEFAST_IQ_PHOTO);
}
else{
MovieFast_Load_Sen_Cfg(MOVIEFAST_IQ_PHOTO);
}
MovieMapping_GetStreamInfo(UI_GetData(FL_MOVIE_SIZE), (UINT32)&gMovie_Strm_Info);
ImageApp_MovieMulti_Config(MOVIE_CONFIG_STREAM_INFO, (UINT32)&gMovie_Strm_Info);
ImageApp_MovieMulti_Config(MOVIE_CONFIG_AUDIO_INFO, (UINT32)&gMovie_Audio_Info);
@ -1458,7 +1471,7 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg)
ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1, MOVIEMULTI_PARAM_AUD_ACAP_ANR, (UINT32)&audio_cfg_param);
#endif
setet_preset_param();
// setet_preset_param();
ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1, MOVIEMULTI_PARAM_FILE_USE_FILEDB, FALSE);
ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1, MOVIEMULTI_PARAM_FILE_CB_CLOSED_FILE_INFO, TRUE);
@ -1537,24 +1550,17 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg)
MovieFast_InstallID();
HD_VIDEO_FRAME frame_capture = {0};
{
HD_VIDEO_FRAME frame;
HD_PATH_ID alg_path;
HD_PATH_ID vcap_path, vprc_path;
BOOL stop = FALSE;
UINT32 ae_cnt = 0;
UINT32 stop_cnt = 0;
BOOL ae_locked = FALSE;
HD_RESULT ret;
if(DrvGPIO_GetPhotoMovieModeFromMonitor() == DX_HUNTING_MODE_MOVIE2){
ae_cnt = 6;
stop_cnt = 12;
}
else{
ae_cnt = 9999;
stop_cnt = 12;
}
UINT32 vcap_frm_cnt = 0; /* start from 1 */
UINT32 vprc_frm_cnt = 0;
UINT32 vprc_frm_cnt_ae_preset = 9999;
BOOL ae_preset_flag = FALSE;
alg_path = ImageApp_MovieMulti_GetAlgDataPort(_CFG_REC_ID_1, _CFG_ALG_PATH3);
vcap_path = ImageApp_MovieMulti_GetVcapPort(_CFG_REC_ID_1);
@ -1563,11 +1569,26 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg)
vos_perf_mark(&g_alg_start_time);
do {
if(vcap_frm_cnt > 2 && ae_preset_flag == FALSE){
extern AET_STATUS_INFO ae_status;
memset(&ae_status, 0, sizeof(AET_STATUS_INFO));
vendor_isp_get_ae(AET_ITEM_STATUS, &ae_status);
if ((ae_status.status_info.state_adj == 0) || (vcap_frm_cnt >= PHOTOFAST_AE_PRESET_FRAME_CNT)){
ae_preset_flag = TRUE;
vprc_frm_cnt_ae_preset = vprc_frm_cnt;
DBG_DUMP("ae preset vprc frame cnt = %lu\n", vprc_frm_cnt_ae_preset);
Set_AEMODE(1);
setet_preset_param();
}
}
ret = hd_videocap_pull_out_buf(vcap_path, &frame, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS);
if(ret != HD_OK){
DBG_ERR("hd_videocap_pull_out_buf failed!(%d)\n", ret);
}
vcap_frm_cnt = frame.count;
ret = hd_videoproc_push_in_buf(vprc_path, &frame, NULL, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS);
if(ret != HD_OK){
DBG_ERR("hd_videoproc_push_in_buf failed!(%d)\n", ret);
@ -1582,39 +1603,31 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg)
if(ret != HD_OK){
DBG_ERR("hd_videoproc_pull_out_buf failed!(%d)\n", ret);
}
++vprc_frm_cnt;
DBG_DUMP("count = %llu, timestamp = %llu\n", frame.count, frame.timestamp);
if(frame.count >= ae_cnt && ae_locked == FALSE){
if( vcap_frm_cnt >= PHOTOFAST_START_CAP_FRAME_CNT ||
(ae_preset_flag == TRUE && vprc_frm_cnt >= (vprc_frm_cnt_ae_preset + 3))){
DBG_DUMP("timestamp = %llu count = %llu\n", frame.timestamp, frame.count);
if(DrvGPIO_GetPhotoMovieModeFromMonitor() == DX_HUNTING_MODE_MOVIE2){
#if 0
HD_PATH_ID vprc_in_id = ImageApp_MovieMulti_GetVprc3DNRPort(_CFG_REC_ID_1);
HD_VIDEOPROC_IN vprc_in = {0};
hd_videoproc_get(vprc_in_id, HD_VIDEOPROC_PARAM_IN, &vprc_in);
vprc_in.frc = HD_VIDEO_FRC_RATIO(1, 1);
hd_videoproc_set(vprc_in_id, HD_VIDEOPROC_PARAM_IN, &vprc_in);
hd_videoproc_start(vprc_in_id);
#endif
if(vcap_frm_cnt >= PHOTOFAST_START_CAP_FRAME_CNT){
DBG_DUMP("triggered by PHOTOFAST_START_CAP_FRAME_CNT\n");
}
else if(ae_preset_flag == TRUE && vprc_frm_cnt >= (vprc_frm_cnt_ae_preset + 3)){
DBG_DUMP("triggered by AE preset\n");
}
Set_AEMODE(1);
setet_preset_param();
ae_locked = TRUE;
memcpy((void*)&frame_capture, (void*)&frame, sizeof(HD_VIDEO_FRAME));
break;
}
else{
hd_videoproc_release_out_buf(alg_path, &frame);
}
if(frame.count >= stop_cnt){
stop = TRUE;
}
hd_videoproc_release_out_buf(alg_path, &frame);
} while(stop == FALSE);
} while(1);
vos_perf_mark(&g_alg_end_time);
}
@ -1654,9 +1667,6 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg)
HD_PATH_ID alg_path = ImageApp_MovieMulti_GetAlgDataPort(_CFG_REC_ID_1, _CFG_ALG_PATH3);
UINT32 max_cnt , duration;
CHKPNT;
MovieFast_fdt_get_info(&fdt_info);
if(MovieFast_fdt_get_tmp_buf(&fdt_info, &tmp_buf, &tmp_buf_size) != E_OK){
@ -1669,28 +1679,32 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg)
goto EXIT;
}
CHKPNT;
yuv_size = VDO_YUV_BUFSIZE(sensor_info->sSize.w, sensor_info->sSize.h , HD_VIDEO_PXLFMT_YUV420);
CHKPNT;
do {
HD_VIDEO_FRAME frame = {0};
if((tmp_buf + yuv_size) > (tmp_buf + tmp_buf_size)){
DBG_ERR("tmp buffer overflow!!\n");
goto EXIT;
}
hd_videoproc_pull_out_buf(alg_path, &frame, -1);
if(cnt == 0){
g_vprc_trigger_frm_time = frame_capture.timestamp;
g_vprc_trigger_frm_count = frame_capture.count;
DBG_DUMP("Trigger speed = %lu\n", g_vprc_trigger_frm_time / 1000);
}
else{
hd_videoproc_pull_out_buf(alg_path, &frame_capture, -1);
}
DBG_DUMP("tmp_buf = %lx , frame.phy_addr[0] = %lx , copy size = %lx\n",
tmp_buf, frame_capture.phy_addr[0], yuv_size);
memcpy((void*)(tmp_buf), (void*)frame_capture.phy_addr[0], yuv_size);
DBG_DUMP("tmp_buf = %lx , frame.phy_addr[0] = %lx , copy size = %lx\n", tmp_buf, frame.phy_addr[0], yuv_size);
memcpy((void*)(tmp_buf), (void*)frame.phy_addr[0], yuv_size);
tmp_buf += yuv_size;
hd_videoproc_release_out_buf(alg_path, &frame);
hd_videoproc_release_out_buf(alg_path, &frame_capture);
if(++cnt >= max_cnt)
break;
@ -1821,7 +1835,7 @@ static void MovieFast_Close(void)
{
if(PhotoFast_Sliceencode2_Enq_Frame(&frame) == E_OK){
break;
}
}
else{
vos_util_delay_ms(1);
}

Binary file not shown.