diff --git a/code/lib/source/sifar/code/include/sf_common.h b/code/lib/source/sifar/code/include/sf_common.h index aab391e67..deec4d975 100755 --- a/code/lib/source/sifar/code/include/sf_common.h +++ b/code/lib/source/sifar/code/include/sf_common.h @@ -118,4 +118,5 @@ BOOL sf_cmd_disp_para_set(unsigned char argc, char **argv); BOOL sf_cmd_ftp_switch(unsigned char argc, char **argv); BOOL sf_cmd_ftp(unsigned char argc, char **argv); BOOL sf_cmd_ftps(unsigned char argc, char **argv); +UINT32 sf_cardv_cap_start(void); #endif diff --git a/code/lib/source/sifar/code/source/common/sf_common.c b/code/lib/source/sifar/code/source/common/sf_common.c index 27e34d47f..1ff20d8a7 100755 --- a/code/lib/source/sifar/code/source/common/sf_common.c +++ b/code/lib/source/sifar/code/source/common/sf_common.c @@ -99,7 +99,11 @@ static SF_THREAD_S WifiTskCfg = .IsRun = 0, .TskId = -1, }; - +static SF_THREAD_S CapTskCfg = +{ + .IsRun = 0, + .TskId = -1, +}; int sf_pir_statu_read(void) { static UINT8 state = 0; @@ -1626,31 +1630,7 @@ static SINT32 sf_cardv_proccess_cmd_wifi(SF_MESSAGE_BUF_S *pMessageBuf) ImageApp_Common_RtspStart(0); break; case SF_WIFI_CMD_CAPTURE: - if(PWR_ON_SETUP != sf_cardv_convert_power_on_mode()){ - if(TRUE != sf_is_preview()){ - UIMenuStoreInfo *puiPara = sf_ui_para_get(); - int iCurrMode = System_GetState(SYS_STATE_CURRMODE); - int iNextMode = PRIMARY_MODE_PHOTO; - if((puiPara->CamMode == SF_CAM_MODE_PHOTO) || (puiPara->CamMode == SF_CAM_MODE_PHOTO_VIDEO)) - { - iNextMode = PRIMARY_MODE_PHOTO; - } - else if(puiPara->CamMode == SF_CAM_MODE_VIDEO) - { - iNextMode = PRIMARY_MODE_MOVIE; - } - else - { - iNextMode = PRIMARY_MODE_PHOTO; - } - UI_SetData(FL_PreMode, iCurrMode); - UI_SetData(FL_NextMode, iNextMode); - Ux_PostEvent(NVTEVT_SYSTEM_MODE, 1, iNextMode); - vos_util_delay_ms(400); - } - } - - FlowPhoto_DoCapture(); + sf_cardv_cap_start(); break; case SF_WIFI_CMD_HD_TURE: if(!hdFlagInit) @@ -2436,4 +2416,54 @@ BOOL sf_cmd_ftp_switch(unsigned char argc, char **argv) } printf("[%s:%d] FtpSwitch:%d\n", __FUNCTION__, __LINE__,puiPara->FtpSwitch); return TRUE; +} + +void* sf_cardv_cap_thread(void *arg) +{ + if(PWR_ON_SETUP != sf_cardv_convert_power_on_mode()){ + if(TRUE != sf_is_preview()){ + UIMenuStoreInfo *puiPara = sf_ui_para_get(); + int iCurrMode = System_GetState(SYS_STATE_CURRMODE); + int iNextMode = PRIMARY_MODE_PHOTO; + if((puiPara->CamMode == SF_CAM_MODE_PHOTO) || (puiPara->CamMode == SF_CAM_MODE_PHOTO_VIDEO)) + { + iNextMode = PRIMARY_MODE_PHOTO; + } + else if(puiPara->CamMode == SF_CAM_MODE_VIDEO) + { + iNextMode = PRIMARY_MODE_MOVIE; + } + else + { + iNextMode = PRIMARY_MODE_PHOTO; + } + UI_SetData(FL_PreMode, iCurrMode); + UI_SetData(FL_NextMode, iNextMode); + Ux_PostEvent(NVTEVT_SYSTEM_MODE, 1, iNextMode); + vos_util_delay_ms(1000); + } + } + + FlowPhoto_DoCapture(); + CapTskCfg.IsRun = 0; + return NULL; +} + +UINT32 sf_cardv_cap_start(void) +{ + SINT32 ret = 1; + if(CapTskCfg.IsRun) + { + SLOGE("thread has already run !!!\n"); + return 1; + } + ret = pthread_create(&CapTskCfg.TskId, NULL, sf_cardv_cap_thread, NULL); + if(ret != SF_SUCCESS) + { + MLOGD("thread creat fail!\n"); + return ret; + } + CapTskCfg.IsRun = 1; + return SF_SUCCESS; + } \ No newline at end of file