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 MOVIE_THUMB_WIDTH 640
#define PRI_MOVIEFAST_CMDTSK 11 #define PRI_MOVIEFAST_CMDTSK 11
#define STKSIZE_MOVIEFAST_CMDTSK 8192 #define STKSIZE_MOVIEFAST_CMDTSK 8192
#define MOVIEFAST_REC_SEC 10
//local variable //local variable
static DCF_HANDLE g_dcf_hdl = 0; static DCF_HANDLE g_dcf_hdl = 0;
@ -285,20 +286,19 @@ static void MovieFast_ShutDown(void)
#if POWERON_BOOT_REPORT == ENABLE #if POWERON_BOOT_REPORT == ENABLE
DBG_DUMP("PhotoMovie mode = %u\n", mode); 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){ if(mode == DX_HUNTING_MODE_PHOTO_MOVIE){
MovieFast_PV_Info_Dump(); 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 #endif
@ -308,7 +308,16 @@ static void MovieFast_ShutDown(void)
#endif #endif
sf_file_thumb_cfg_sava(); sf_file_thumb_cfg_sava();
sf_para_print(); 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); FileSys_Close(FST_TIME_INFINITE);
#if SF_IQ_TEST != ENABLE #if SF_IQ_TEST != ENABLE
if(sf_get_power_off_flag()){ if(sf_get_power_off_flag()){
@ -332,19 +341,18 @@ static void MovieFast_ShutDown(void)
#if POWERON_BOOT_REPORT == ENABLE #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){ if(mode == DX_HUNTING_MODE_PHOTO_MOVIE){
MovieFast_PV_Info_Dump(); 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 #endif
@ -772,11 +780,11 @@ static void MovieFast_OnRecStart(void)
//ImageApp_MovieMulti_RecStart(gMovie_Clone_Info[i].rec_id); //ImageApp_MovieMulti_RecStart(gMovie_Clone_Info[i].rec_id);
#if HUNTING_CAMERA_MCU == ENABLE #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); ImageApp_MovieMulti_TrigOnce(gMovie_Clone_Info[i].rec_id, puiPara->VideoLenth);
#else #else
ImageApp_MovieMulti_SetParam(gMovie_Clone_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_SEAMLESSSEC, 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, 10); ImageApp_MovieMulti_TrigOnce(gMovie_Clone_Info[i].rec_id, MOVIEFAST_REC_SEC);
#endif #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_SetParam(gMovie_Rec_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_BUFRESSEC, uifile_buffer_reserved_sec);
//ImageApp_MovieMulti_RecStart(gMovie_Rec_Info[i].rec_id); //ImageApp_MovieMulti_RecStart(gMovie_Rec_Info[i].rec_id);
vos_perf_list_mark("trig once", __LINE__, 0);
#if HUNTING_CAMERA_MCU == ENABLE #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); ImageApp_MovieMulti_TrigOnce(gMovie_Rec_Info[i].rec_id, puiPara->VideoLenth);
#else #else
ImageApp_MovieMulti_SetParam(gMovie_Rec_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_SEAMLESSSEC, 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, 10); ImageApp_MovieMulti_TrigOnce(gMovie_Rec_Info[i].rec_id, MOVIEFAST_REC_SEC);
#endif #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); 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); DBG_ERR("hd_videoproc_push_in_buf failed!(%d)\n", ret);
hd_videocap_release_out_buf(vcap_path, &frame); hd_videocap_release_out_buf(vcap_path, &frame);
continue; break;
} }
ret = hd_videocap_release_out_buf(vcap_path, &frame); ret = hd_videocap_release_out_buf(vcap_path, &frame);
@ -912,14 +922,16 @@ static void MovieFast_Manual_Raw_Task(void* arg)
while(1) 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){ if(ret != HD_OK){
DBG_ERR("hd_videocap_pull_out_buf failed!(%d)\n", ret); DBG_ERR("hd_videocap_pull_out_buf failed!(%d)\n", ret);
break; break;
} }
ret = hd_videoproc_push_in_buf(vprc_path, &frame, NULL, 33); 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); DBG_ERR("hd_videoproc_push_in_buf failed!(%d)\n", ret);
hd_videocap_release_out_buf(vcap_path, &frame); hd_videocap_release_out_buf(vcap_path, &frame);
break; break;
@ -1336,7 +1348,7 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg)
//UI_SetData(FL_MOVIE_SIZE, MOVIE_SIZE_CLONE_1920x1080P30_1280x720P30); //UI_SetData(FL_MOVIE_SIZE, MOVIE_SIZE_CLONE_1920x1080P30_1280x720P30);
Set_NIGHTMODE(0, 0); 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{ else{
Set_NIGHTMODE(0, 1); 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]); ImageApp_MovieMulti_Config(MOVIE_CONFIG_ALG_INFO, (UINT32)&gMovie_Alg_Info[0]);
if(DrvGPIO_GetPhotoMovieModeFromMonitor() != DX_HUNTING_MODE_MOVIE2){ if(DrvGPIO_GetPhotoMovieModeFromMonitor() != DX_HUNTING_MODE_MOVIE2){
MovieFast_Load_Sen_Cfg(MOVIEFAST_IQ_VIDEO); MovieFast_Load_Sen_Cfg(MOVIEFAST_IQ_PHOTO);
} }
else{ else{
MovieFast_Load_Sen_Cfg(MOVIEFAST_IQ_PHOTO); MovieFast_Load_Sen_Cfg(MOVIEFAST_IQ_PHOTO);
} }
MovieMapping_GetStreamInfo(UI_GetData(FL_MOVIE_SIZE), (UINT32)&gMovie_Strm_Info); 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_STREAM_INFO, (UINT32)&gMovie_Strm_Info);
ImageApp_MovieMulti_Config(MOVIE_CONFIG_AUDIO_INFO, (UINT32)&gMovie_Audio_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); ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1, MOVIEMULTI_PARAM_AUD_ACAP_ANR, (UINT32)&audio_cfg_param);
#endif #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_USE_FILEDB, FALSE);
ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1, MOVIEMULTI_PARAM_FILE_CB_CLOSED_FILE_INFO, TRUE); 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(); MovieFast_InstallID();
HD_VIDEO_FRAME frame_capture = {0};
{ {
HD_VIDEO_FRAME frame; HD_VIDEO_FRAME frame;
HD_PATH_ID alg_path; HD_PATH_ID alg_path;
HD_PATH_ID vcap_path, vprc_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; HD_RESULT ret;
UINT32 vcap_frm_cnt = 0; /* start from 1 */
if(DrvGPIO_GetPhotoMovieModeFromMonitor() == DX_HUNTING_MODE_MOVIE2){ UINT32 vprc_frm_cnt = 0;
ae_cnt = 6; UINT32 vprc_frm_cnt_ae_preset = 9999;
stop_cnt = 12; BOOL ae_preset_flag = FALSE;
}
else{
ae_cnt = 9999;
stop_cnt = 12;
}
alg_path = ImageApp_MovieMulti_GetAlgDataPort(_CFG_REC_ID_1, _CFG_ALG_PATH3); alg_path = ImageApp_MovieMulti_GetAlgDataPort(_CFG_REC_ID_1, _CFG_ALG_PATH3);
vcap_path = ImageApp_MovieMulti_GetVcapPort(_CFG_REC_ID_1); 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); vos_perf_mark(&g_alg_start_time);
do { 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); ret = hd_videocap_pull_out_buf(vcap_path, &frame, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS);
if(ret != HD_OK){ if(ret != HD_OK){
DBG_ERR("hd_videocap_pull_out_buf failed!(%d)\n", ret); 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); ret = hd_videoproc_push_in_buf(vprc_path, &frame, NULL, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS);
if(ret != HD_OK){ if(ret != HD_OK){
DBG_ERR("hd_videoproc_push_in_buf failed!(%d)\n", ret); 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){ if(ret != HD_OK){
DBG_ERR("hd_videoproc_pull_out_buf failed!(%d)\n", ret); 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); 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(vcap_frm_cnt >= PHOTOFAST_START_CAP_FRAME_CNT){
DBG_DUMP("triggered by PHOTOFAST_START_CAP_FRAME_CNT\n");
#if 0 }
HD_PATH_ID vprc_in_id = ImageApp_MovieMulti_GetVprc3DNRPort(_CFG_REC_ID_1); else if(ae_preset_flag == TRUE && vprc_frm_cnt >= (vprc_frm_cnt_ae_preset + 3)){
HD_VIDEOPROC_IN vprc_in = {0}; DBG_DUMP("triggered by AE preset\n");
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
} }
Set_AEMODE(1);
setet_preset_param();
ae_locked = TRUE; memcpy((void*)&frame_capture, (void*)&frame, sizeof(HD_VIDEO_FRAME));
break;
} }
else{
if(frame.count >= stop_cnt){
stop = TRUE;
}
hd_videoproc_release_out_buf(alg_path, &frame); hd_videoproc_release_out_buf(alg_path, &frame);
}
} while(stop == FALSE); } while(1);
vos_perf_mark(&g_alg_end_time); 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); HD_PATH_ID alg_path = ImageApp_MovieMulti_GetAlgDataPort(_CFG_REC_ID_1, _CFG_ALG_PATH3);
UINT32 max_cnt , duration; UINT32 max_cnt , duration;
CHKPNT;
MovieFast_fdt_get_info(&fdt_info); MovieFast_fdt_get_info(&fdt_info);
if(MovieFast_fdt_get_tmp_buf(&fdt_info, &tmp_buf, &tmp_buf_size) != E_OK){ 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; goto EXIT;
} }
CHKPNT;
yuv_size = VDO_YUV_BUFSIZE(sensor_info->sSize.w, sensor_info->sSize.h , HD_VIDEO_PXLFMT_YUV420); yuv_size = VDO_YUV_BUFSIZE(sensor_info->sSize.w, sensor_info->sSize.h , HD_VIDEO_PXLFMT_YUV420);
CHKPNT;
do { do {
HD_VIDEO_FRAME frame = {0};
if((tmp_buf + yuv_size) > (tmp_buf + tmp_buf_size)){ if((tmp_buf + yuv_size) > (tmp_buf + tmp_buf_size)){
DBG_ERR("tmp buffer overflow!!\n"); DBG_ERR("tmp buffer overflow!!\n");
goto EXIT; 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; 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) if(++cnt >= max_cnt)
break; break;

Binary file not shown.