nt9856x/rtos/code/application/source/cardv/SrcCode/UIApp/UsbCamFast/UsbCamFast.c
2023-03-28 15:07:53 +08:00

96 lines
3.7 KiB
C
Executable File

////////////////////////////////////////////////////////////////////////////////
#include "PrjInc.h"
#include "ImageApp/ImageApp_UsbMovie.h"
#include "SysSensor.h"
#include "usb2dev.h"
#include <FreeRTOS_POSIX.h>
#include <FreeRTOS_POSIX/pthread.h>
#include <comm/hwpower.h>
#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 <kwrap/debug.h>
#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);
}