//////////////////////////////////////////////////////////////////////////////// #include "PrjInc.h" #include "ImageApp/ImageApp_UsbMovie.h" #include "SysSensor.h" #include "usb2dev.h" #include #include #include #define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER #if 1//_TODO #define __MODULE__ UsbCamFast #define __DBGLVL__ 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER #define __DBGFLT__ "*" //*=All, [mark]=CustomClass #include #endif extern UVAC_VID_RESO gUIUvacVidReso[NVT_UI_UVAC_RESO_CNT]; extern UINT32 gUIUvacAudSampleRate[NVT_UI_UVAC_AUD_SAMPLERATE_CNT]; extern UVAC_VEND_DEV_DESC gUIUvacDevDesc; extern void xUvac_ConfigMovieSizeCB(PNVT_USBMOVIE_VID_RESO pVidReso); extern void xUSBMakerInit_UVAC(UVAC_VEND_DEV_DESC *pUVACDevDesc); THREAD_RETTYPE UsbCamFast_InitUvacModeThread(void *arg) { UVAC_VID_RESO_ARY uvacVidResoAry = {0}; UVAC_AUD_SAMPLERATE_ARY uvacAudSampleRateAry = {0}; USBMOVIE_SENSOR_INFO sen_cfg = {0}; printf("Enter UsbCamFast mode...\r\n"); UsbMovie_CommPoolInit(); ImageApp_UsbMovie_Config(USBMOVIE_CFG_SET_MOVIE_SIZE_CB, (UINT32)xUvac_ConfigMovieSizeCB); ImageApp_UsbMovie_Config(USBMOVIE_CFG_CHANNEL, UVAC_CHANNEL_1V1A); uvacVidResoAry.aryCnt = sizeof(gUIUvacVidReso)/sizeof(UVAC_VID_RESO); uvacVidResoAry.pVidResAry = &gUIUvacVidReso[0]; ImageApp_UsbMovie_SetParam(0, UVAC_PARAM_VID_RESO_ARY, (UINT32)&uvacVidResoAry); uvacAudSampleRateAry.aryCnt = sizeof(gUIUvacAudSampleRate)/sizeof(UINT32); uvacAudSampleRateAry.pAudSampleRateAry = &gUIUvacAudSampleRate[0]; ImageApp_UsbMovie_SetParam(0, UVAC_PARAM_AUD_SAMPLERATE_ARY, (UINT32)&uvacAudSampleRateAry); xUSBMakerInit_UVAC(&gUIUvacDevDesc); ImageApp_UsbMovie_SetParam(0, UVAC_PARAM_UVAC_VEND_DEV_DESC, (UINT32)&gUIUvacDevDesc); DBG_IND("VID=0x%x, PID=0x%x\r\n", gUIUvacDevDesc.VID, gUIUvacDevDesc.PID); // enable to register UVC extension unit callback #if 0 DBG_IND("VendCb:0x%x\r\n", (UINT32)xUvacEU_CB); ImageApp_UsbMovie_SetParam(0, UVAC_PARAM_EU_CTRL, (UINT32)xUvacEU_CB); #endif ImageApp_UsbMovie_SetParam(0, UVAC_PARAM_WINUSB_ENABLE, FALSE); // get sensor info sen_cfg.rec_id = 0; System_GetSensorInfo(0, SENSOR_DRV_CFG, &(sen_cfg.vcap_cfg)); System_GetSensorInfo(0, SENSOR_SENOUT_FMT, &(sen_cfg.senout_pxlfmt)); System_GetSensorInfo(0, SENSOR_CAPOUT_FMT, &(sen_cfg.capout_pxlfmt)); System_GetSensorInfo(0, SENSOR_DATA_LANE, &(sen_cfg.data_lane)); System_GetSensorInfo(0, SENSOR_AE_PATH, &(sen_cfg.ae_path)); System_GetSensorInfo(0, SENSOR_AWB_PATH, &(sen_cfg.awb_path)); System_GetSensorInfo(0, SENSOR_IQ_PATH, &(sen_cfg.iq_path)); ImageApp_UsbMovie_Config(USBMOVIE_CFG_SENSOR_INFO, (UINT32)&sen_cfg); ImageApp_UsbMovie_SetParam(0, UVAC_PARAM_VCAP_FUNC, (HD_VIDEOCAP_FUNC_AE | HD_VIDEOCAP_FUNC_AWB)); ImageApp_UsbMovie_SetParam(0, UVAC_PARAM_VPROC_FUNC, (HD_VIDEOPROC_FUNC_WDR | HD_VIDEOPROC_FUNC_COLORNR | HD_VIDEOPROC_FUNC_3DNR)); //ImageApp_UsbMovie_SetParam(0, UVAC_PARAM_VCAP_OUTFUNC, HD_VIDEOCAP_OUTFUNC_DIRECT); ImageApp_UsbMovie_SetParam(0, UVAC_PARAM_UVAC_TBR_H264, NVT_USBMOVIE_TBR_H264_DEFAULT); #if (SENSOR_SIEPATGEN == ENABLE) ImageApp_UsbMovie_SetParam(0, UVAC_PARAM_VCAP_PAT_GEN, HD_VIDEOCAP_SEN_PAT_COLORBAR); #endif // set image mirror/flip (HD_VIDEO_DIR_NONE / HD_VIDEO_DIR_MIRRORX / HD_VIDEO_DIR_MIRRORY / HD_VIDEO_DIR_MIRRORXY) ImageApp_UsbMovie_SetParam(0, UVAC_PARAM_IPL_MIRROR, HD_VIDEO_DIR_NONE); ImageApp_UsbMovie_Open(); while(1) { if (usb2dev_state_change()) { vos_util_delay_ms(200); } else { ImageApp_UsbMovie_Close(); hwpower_set_power_key(POWER_ID_PSW1, 0xFF); } } THREAD_RETURN(0); }