From 8ef3f67b2b688fd2c53e956c0fed73503b154fcb Mon Sep 17 00:00:00 2001 From: payton Date: Thu, 7 Dec 2023 16:28:27 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=90=8C=E6=AD=A5P+V=20IQ=E5=92=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=8D=A1=E6=9C=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cardv/SrcCode/UIApp/MovieFast/MovieFast.c | 186 ++++++++++-------- rtos/code/lib/output/libfileout.a | Bin 111434 -> 111434 bytes 2 files changed, 100 insertions(+), 86 deletions(-) diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c index 5b15033e2..7e2be1faa 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c @@ -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); } diff --git a/rtos/code/lib/output/libfileout.a b/rtos/code/lib/output/libfileout.a index 3baa7451f16e2fba57787340ec974c6082f37e3b..5f000a141d9a79a4d5f6bde7c117263c79081caf 100644 GIT binary patch delta 165 zcmX^0jP2AjwhhOQGcrv+e%zjsX*2tY<1 dghPRtnSr4INP$7=^!!4`YR1&