/****************************************************************************** * function : Stop BT1120 720P vi/vo/venc ******************************************************************************/ HI_VOID SAMPLE_COMM_IVE_BT1120_720P_Stop(SAMPLE_IVE_VI_VO_CONFIG_S *pstViVoConfig, HI_BOOL bOpenVi,HI_BOOL bOpenViExt,HI_BOOL bOpenVo,HI_BOOL bOpenVenc,HI_BOOL bOpenVpss,HI_U32 u32VpssChnNum) { VO_DEV VoDev = SAMPLE_VO_DEV_DSD0; VO_LAYER VoLayer = 0; SAMPLE_VO_MODE_E enVoMode = VO_MODE_1MUX; VI_CHN ViExtChn = 1; VENC_CHN VencChn = 0; HI_U32 u32VpssGrpCnt = 1; if (HI_TRUE == bOpenVpss) { SAMPLE_COMM_IVE_StopVpss(u32VpssGrpCnt,u32VpssChnNum); } if (HI_TRUE == bOpenVenc) { SAMPLE_COMM_VENC_StopGetStream(); SAMPLE_COMM_VENC_Stop(VencChn); } //Close vo if (HI_TRUE == bOpenVo ) { SAMPLE_COMM_VO_StopChn(VoDev, enVoMode); SAMPLE_COMM_VO_StopLayer(VoLayer); SAMPLE_COMM_VO_StopDev(VoDev); } //Close vi ext chn if(HI_TRUE == bOpenViExt) { (HI_VOID)HI_MPI_VI_DisableChn(ViExtChn); } //Close vi if (HI_TRUE == bOpenVi) { SAMPLE_COMM_VI_StopVi(&(pstViVoConfig->stViConfig)); } //Close sys SAMPLE_COMM_SYS_Exit(); }
/****************************************************************************** * function : VI: DC(720P); VO: SD0(CVBS). Embeded isp, phychn channel preview. ******************************************************************************/ HI_S32 SAMPLE_VIO_720P_PreView(SAMPLE_VI_CONFIG_S* pstViConfig) { HI_U32 u32ViChnCnt = 2; VB_CONF_S stVbConf; VO_DEV VoDev = SAMPLE_VO_DEV_DSD0;; VO_CHN VoChn = 0; VI_CHN ViChn = 0; VO_PUB_ATTR_S stVoPubAttr; SAMPLE_VO_MODE_E enVoMode = VO_MODE_1MUX; PIC_SIZE_E enPicSize = g_enPicSize; HI_S32 s32Ret = HI_SUCCESS; HI_U32 u32BlkSize; SIZE_S stSize; ROTATE_E enRotate = ROTATE_NONE; /****************************************** step 1: init global variable ******************************************/ gs_u32ViFrmRate = (VIDEO_ENCODING_MODE_PAL == gs_enNorm)? 25: 30; memset(&stVbConf,0,sizeof(VB_CONF_S)); u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm, enPicSize, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH); stVbConf.u32MaxPoolCnt = 128; /*ddr0 video buffer*/ stVbConf.astCommPool[0].u32BlkSize = u32BlkSize; stVbConf.astCommPool[0].u32BlkCnt = u32ViChnCnt * 8; /****************************************** step 2: start vpss and vi bind vpss (subchn needn't bind vpss in this mode) ******************************************/ s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enPicSize, &stSize); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n"); goto END_720P_1; } if(pstViConfig) { enRotate = pstViConfig->enRotate; if(ROTATE_90 == enRotate || ROTATE_270 == enRotate) { u32BlkSize = (CEILING_2_POWER(stSize.u32Width, SAMPLE_SYS_ALIGN_WIDTH) * \ CEILING_2_POWER(stSize.u32Height,SAMPLE_SYS_ALIGN_WIDTH) * \ ((PIXEL_FORMAT_YUV_SEMIPLANAR_422 == SAMPLE_PIXEL_FORMAT) ? 2 : 1.5)); stVbConf.astCommPool[1].u32BlkSize = u32BlkSize; stVbConf.astCommPool[1].u32BlkCnt = 8; } } /****************************************** step 3: mpp system init. ******************************************/ s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("system init failed with %d!\n", s32Ret); goto END_720P_0; } /****************************************** step 4: start vi dev & chn to capture ******************************************/ s32Ret = SAMPLE_COMM_VI_StartVi(pstViConfig); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("start vi failed!\n"); goto END_720P_0; } /****************************************** step 5: start VO SD0 (bind * vi ) ******************************************/ stVoPubAttr.enIntfType = g_enVoIntfType; if(VO_INTF_BT1120 == g_enVoIntfType) { stVoPubAttr.enIntfSync = VO_OUTPUT_720P50; gs_u32ViFrmRate = 50; } else { stVoPubAttr.enIntfSync = VO_OUTPUT_PAL; } stVoPubAttr.u32BgColor = 0x000000ff; /* In HD, this item should be set to HI_FALSE */ stVoPubAttr.bDoubleFrame = HI_FALSE; s32Ret = SAMPLE_COMM_VO_StartDevLayer(VoDev, &stVoPubAttr, gs_u32ViFrmRate); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VO_StartDevLayer failed!\n"); goto END_720P_1; } s32Ret = SAMPLE_COMM_VO_StartChn(VoDev, &stVoPubAttr, enVoMode); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VO_StartChn failed!\n"); goto END_720P_2; } s32Ret = SAMPLE_COMM_VO_BindVi(VoDev, VoChn, ViChn); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VO_BindVi(vo:%d)-(vichn:%d) failed with %#x!\n", VoDev, VoChn, s32Ret); goto END_720P_3; } VI_PAUSE(); /****************************************** step 6: exit process ******************************************/ END_720P_3: SAMPLE_COMM_VO_UnBindVi(VoDev,VoChn); SAMPLE_COMM_VO_StopChn(VoDev, enVoMode); END_720P_2: SAMPLE_COMM_VO_StopDevLayer(VoDev); END_720P_1: SAMPLE_COMM_VI_StopVi(pstViConfig); END_720P_0: SAMPLE_COMM_SYS_Exit(); return s32Ret; }
/****************************************************************************** * function : VI: DC(720P); VO: SD0(CVBS). Embeded isp, one ExtChn preview. ******************************************************************************/ HI_S32 SAMPLE_VIO_720P_LDC_Preview(SAMPLE_VI_CONFIG_S* pstViConfig) { HI_U32 u32ViChnCnt = 3; VB_CONF_S stVbConf; VO_DEV VoDev = SAMPLE_VO_DEV_DSD0;; VO_CHN VoChn = 0; VI_CHN ViChn = 0; VO_PUB_ATTR_S stVoPubAttr; SAMPLE_VO_MODE_E enVoMode = VO_MODE_1MUX; HI_S32 s32Ret = HI_SUCCESS; HI_U32 u32BlkSize; SIZE_S stSize; VI_LDC_ATTR_S stLDCAttr; PIC_SIZE_E enPicSize = g_enPicSize; /****************************************** step 1: init global variable ******************************************/ gs_u32ViFrmRate = (VIDEO_ENCODING_MODE_PAL == gs_enNorm)? 25: 30; memset(&stVbConf,0,sizeof(VB_CONF_S)); u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm, enPicSize, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH); stVbConf.u32MaxPoolCnt = 128; /*ddr0 video buffer*/ stVbConf.astCommPool[0].u32BlkSize = u32BlkSize; stVbConf.astCommPool[0].u32BlkCnt = u32ViChnCnt * 8; /****************************************** step 2: mpp system init. ******************************************/ s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("system init failed with %d!\n", s32Ret); goto END_720P_0; } /****************************************** step 3: start vi dev & chn to capture ******************************************/ s32Ret = SAMPLE_COMM_VI_StartVi(pstViConfig); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("start vi failed!\n"); goto END_720P_0; } stLDCAttr.bEnable = HI_TRUE; stLDCAttr.stAttr.enViewType = LDC_VIEW_TYPE_CROP; //LDC_VIEW_TYPE_CROP; LDC_VIEW_TYPE_ALL stLDCAttr.stAttr.s32CenterXOffset = 0; stLDCAttr.stAttr.s32CenterYOffset = 0; stLDCAttr.stAttr.s32Ratio = 255; HI_MPI_VI_SetLDCAttr(ViChn, &stLDCAttr); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VI_SetLDCAttr failed!\n"); goto END_720P_1; } /****************************************** step 4: start vpss and vi bind vpss (subchn needn't bind vpss in this mode) ******************************************/ s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enPicSize, &stSize); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n"); goto END_720P_1; } /****************************************** step 5: start VO SD0 (bind * vi ) ******************************************/ stVoPubAttr.enIntfType = g_enVoIntfType; if(VO_INTF_BT1120 == g_enVoIntfType) { stVoPubAttr.enIntfSync = VO_OUTPUT_720P50; } else { stVoPubAttr.enIntfSync = VO_OUTPUT_PAL; } stVoPubAttr.u32BgColor = 0x000000ff; /* In HD, this item should be set to HI_FALSE */ stVoPubAttr.bDoubleFrame = HI_FALSE; s32Ret = SAMPLE_COMM_VO_StartDevLayer(VoDev, &stVoPubAttr, gs_u32ViFrmRate); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VO_StartDevLayer failed!\n"); goto END_720P_1; } s32Ret = SAMPLE_COMM_VO_StartChn(VoDev, &stVoPubAttr, enVoMode); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VO_StartChn failed!\n"); goto END_720P_2; } s32Ret = SAMPLE_COMM_VO_BindVi(VoDev, VoChn, ViChn); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VO_BindVi(vo:%d)-(vichn:%d) failed with %#x!\n", VoDev, VoChn, s32Ret); goto END_720P_3; } printf("press 'q' key to exit, other key to disable LDC!");; while(1) { char ch = getchar(); char ch1 = getchar(); if('q' == ch || 'q' == ch1) break; stLDCAttr.bEnable = !stLDCAttr.bEnable; HI_MPI_VI_SetLDCAttr(ViChn, &stLDCAttr); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VI_SetLDCAttr failed!\n"); break; } if(stLDCAttr.bEnable) { printf("press 'q' key to exit, other key to disable LDC!\n"); } else { printf("press 'q' key to exit, other key to enable LDC!\n"); } } /****************************************** step 6: exit process ******************************************/ END_720P_3: SAMPLE_COMM_VO_UnBindVi(VoDev,VoChn); SAMPLE_COMM_VO_StopChn(VoDev, enVoMode); END_720P_2: SAMPLE_COMM_VO_StopDevLayer(VoDev); END_720P_1: s32Ret = HI_MPI_VI_DisableChn(ViChn); SAMPLE_COMM_VI_StopVi(pstViConfig); END_720P_0: SAMPLE_COMM_SYS_Exit(); return s32Ret; }
/****************************************************************************** * function : VI: DC(720P); VO: SD0(CVBS). Embeded isp, one ExtChn preview. ******************************************************************************/ HI_S32 SAMPLE_VIO_720P_Extchn_Preview(SAMPLE_VI_CONFIG_S* pstViConfig) { HI_U32 u32ViChnCnt = 2; VB_CONF_S stVbConf; VO_DEV VoDev = SAMPLE_VO_DEV_DSD0;; VO_CHN VoChn = 0; VI_CHN ViChn = 0; VO_PUB_ATTR_S stVoPubAttr; SAMPLE_VO_MODE_E enVoMode = VO_MODE_1MUX; HI_S32 s32Ret = HI_SUCCESS; HI_U32 u32BlkSize; SIZE_S stSize; VI_EXT_CHN_ATTR_S stExtChnAttr; VI_CHN ExtChn = 1; PIC_SIZE_E enPicSize = g_enPicSize; /****************************************** step 1: init global variable ******************************************/ gs_u32ViFrmRate = (VIDEO_ENCODING_MODE_PAL == gs_enNorm)? 25: 30; memset(&stVbConf,0,sizeof(VB_CONF_S)); u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm, enPicSize, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH); stVbConf.u32MaxPoolCnt = 128; /*ddr0 video buffer*/ stVbConf.astCommPool[0].u32BlkSize = u32BlkSize; stVbConf.astCommPool[0].u32BlkCnt = u32ViChnCnt * 8; u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm, PIC_D1, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH); stVbConf.astCommPool[1].u32BlkSize = u32BlkSize; stVbConf.astCommPool[1].u32BlkCnt = 8; /****************************************** step 2: mpp system init. ******************************************/ s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("system init failed with %d!\n", s32Ret); goto END_720P_0; } /****************************************** step 3: start vi dev & chn to capture ******************************************/ s32Ret = SAMPLE_COMM_VI_StartVi(pstViConfig); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("start vi failed!\n"); goto END_720P_0; } stExtChnAttr.enPixFormat = SAMPLE_PIXEL_FORMAT; stExtChnAttr.s32BindChn = ViChn; stExtChnAttr.stDestSize.u32Width = 720; stExtChnAttr.stDestSize.u32Height = 576; stExtChnAttr.s32FrameRate = -1; stExtChnAttr.s32SrcFrameRate = -1; s32Ret = HI_MPI_VI_SetExtChnAttr(ExtChn, &stExtChnAttr); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VI_SetExtChnAttr failed!\n"); goto END_720P_0; } s32Ret = HI_MPI_VI_EnableChn(ExtChn); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VI_EnableChn failed!\n"); goto END_720P_0; } /****************************************** step 4: start vpss and vi bind vpss (subchn needn't bind vpss in this mode) ******************************************/ s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enPicSize, &stSize); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n"); goto END_720P_1; } /****************************************** step 5: start VO SD0 (bind * vi ) ******************************************/ stVoPubAttr.enIntfType = g_enVoIntfType; if(VO_INTF_BT1120 == g_enVoIntfType) { stVoPubAttr.enIntfSync = VO_OUTPUT_720P50; } else { stVoPubAttr.enIntfSync = VO_OUTPUT_PAL; } stVoPubAttr.u32BgColor = 0x000000ff; /* In HD, this item should be set to HI_FALSE */ stVoPubAttr.bDoubleFrame = HI_FALSE; s32Ret = SAMPLE_COMM_VO_StartDevLayer(VoDev, &stVoPubAttr, gs_u32ViFrmRate); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VO_StartDevLayer failed!\n"); goto END_720P_1; } s32Ret = SAMPLE_COMM_VO_StartChn(VoDev, &stVoPubAttr, enVoMode); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VO_StartChn failed!\n"); goto END_720P_2; } s32Ret = SAMPLE_COMM_VO_BindVi(VoDev, VoChn, ExtChn); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VO_BindVi(vo:%d)-(vichn:%d) failed with %#x!\n", VoDev, VoChn, s32Ret); goto END_720P_3; } VI_PAUSE(); /****************************************** step 6: exit process ******************************************/ END_720P_3: SAMPLE_COMM_VO_UnBindVi(VoDev,VoChn); SAMPLE_COMM_VO_StopChn(VoDev, enVoMode); END_720P_2: SAMPLE_COMM_VO_StopDevLayer(VoDev); END_720P_1: s32Ret = HI_MPI_VI_DisableChn(ExtChn); SAMPLE_COMM_VI_StopVi(pstViConfig); END_720P_0: SAMPLE_COMM_SYS_Exit(); return s32Ret; }
int main(int argc, char *argv[]) { HI_S32 s32Ret = 0; VO_PUB_ATTR_S stPubAttr; VB_CONF_S stVbConf = {0}; HI_U32 u32FrmRate; SAMPLE_VO_MODE_E stVoMode = VO_MODE_1MUX; stPubAttr.u32BgColor = 0x000000ff; stPubAttr.enIntfType = VO_INTF_CVBS; stPubAttr.enIntfSync = VO_OUTPUT_PAL; stPubAttr.bDoubleFrame = HI_FALSE; u32FrmRate = 25; if (argc < 2) { printf("Usage : %s <intf>\n", argv[0]); printf("intf : \n"); printf("\t0) CVBS(PAL). Default\n"); printf("\t1) BT1120(720P50).\n"); } else { if(*argv[1] == '1') { stPubAttr.enIntfType = VO_INTF_BT1120; stPubAttr.enIntfSync = VO_OUTPUT_720P50; u32FrmRate = 50; } } if(VO_INTF_CVBS == stPubAttr.enIntfType) { printf("now is cvbs output.\n"); } else { printf("now is bt1120 output.\n"); } stVbConf.u32MaxPoolCnt = 16; /*no need common video buffer!*/ /*1 enable Vo device first*/ if(HI_SUCCESS != SAMPLE_COMM_SYS_Init(&stVbConf)) { return -1; } s32Ret = SAMPLE_COMM_VO_StartDevLayer(VoDev, &stPubAttr, u32FrmRate); if(HI_SUCCESS != s32Ret) { SAMPLE_COMM_SYS_Exit(); return -1; } if (HI_SUCCESS != SAMPLE_COMM_VO_StartChn(SAMPLE_VO_DEV_DSD0, &stPubAttr, stVoMode)) { SAMPLE_COMM_SYS_Exit(); return -1; } /*2 run tde sample which draw grahpic on HiFB memory*/ s32Ret = TDE_DrawGraphicSample(); if(s32Ret != HI_SUCCESS) { goto err; } err: SAMPLE_COMM_VO_StopChn(SAMPLE_VO_DEV_DSD0, stVoMode); SAMPLE_COMM_VO_StopDevLayer(SAMPLE_VO_DEV_DSD0); SAMPLE_COMM_SYS_Exit(); return 0; }
/****************************************************************************** * function : Start BT1120 720P vi/vo/venc ******************************************************************************/ HI_S32 SAMPLE_COMM_IVE_BT1120_720P_PreView(SAMPLE_IVE_VI_VO_CONFIG_S *pstViVoConfig, HI_BOOL bOpenVi,HI_BOOL bOpenViExt,HI_BOOL bOpenVo,HI_BOOL bOpenVenc,HI_BOOL bOpenVpss,HI_U32 u32VpssChnNum) { HI_U32 u32ViChnCnt = 1; VB_CONF_S stVbConf; VO_DEV VoDev = SAMPLE_VO_DEV_DSD0; VI_CHN ViChn = 0; VI_CHN ViExtChn = 1; VO_PUB_ATTR_S stVoPubAttr; SAMPLE_VO_MODE_E enVoMode = VO_MODE_1MUX; PIC_SIZE_E enPicSize = pstViVoConfig->enPicSize; VI_EXT_CHN_ATTR_S stExtChnAttr; HI_S32 s32Ret = HI_SUCCESS; HI_U32 u32BlkSize; SIZE_S stSize; VO_LAYER VoLayer = 0; VO_VIDEO_LAYER_ATTR_S stLayerAttr; SAMPLE_VI_CONFIG_S *pstViConfig = &(pstViVoConfig->stViConfig); VENC_CHN VencChn = 0; HI_U32 u32ViDepth = 4; VI_CHN_ATTR_S stChnAttr; HI_U32 u32VpssGrpCnt = 1; VPSS_CHN aVpssChn[2] = {VPSS_CHN0, VPSS_CHN3}; VPSS_GRP_ATTR_S stVpssGrpAttr; SIZE_S astSize[2]; memset(&stVbConf,0,sizeof(VB_CONF_S)); u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(pstViVoConfig->enNorm, enPicSize, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH); stVbConf.u32MaxPoolCnt = 64; /*ddr0 video buffer*/ stVbConf.astCommPool[0].u32BlkSize = u32BlkSize; stVbConf.astCommPool[0].u32BlkCnt = u32ViChnCnt * 3; if ((HI_TRUE == bOpenViExt) || (HI_TRUE == bOpenVpss)) { u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(pstViVoConfig->enNorm,PIC_CIF, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH); stVbConf.astCommPool[1].u32BlkSize = u32BlkSize; stVbConf.astCommPool[1].u32BlkCnt = 3; } // mpp system init. s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_SYS_Init fail,Error(%#x)\n", s32Ret); goto END_720P_0; } if (HI_TRUE == bOpenVi) { s32Ret = SAMPLE_COMM_VI_StartVi(pstViConfig); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VI_StartVi fail,Error(%#x)\n",s32Ret); goto END_720P_0; } s32Ret = HI_MPI_VI_SetFrameDepth(ViChn,u32ViDepth); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VI_SetFrameDepth fail,ViChn(%d),Error(%#x)\n",ViChn,s32Ret); goto END_720P_1; } s32Ret = HI_MPI_VI_GetChnAttr(ViChn,&stChnAttr); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VI_GetChnAttr fail,ViChn(%d),Error(%#x)\n",ViChn,s32Ret); goto END_720P_1; } //Set Vi frame rate,because vi from BT1120 is 720P@30 stChnAttr.s32SrcFrameRate = 3; stChnAttr.s32DstFrameRate = 1; s32Ret = HI_MPI_VI_SetChnAttr(ViChn,&stChnAttr); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VI_SetChnAttr,ViChn(%d),Error(%#x)\n",ViChn,s32Ret); goto END_720P_1; } } //Open vi ext chn if (HI_TRUE == bOpenViExt) { stExtChnAttr.enPixFormat = SAMPLE_PIXEL_FORMAT; stExtChnAttr.s32BindChn = ViChn; stExtChnAttr.stDestSize.u32Width = 352; stExtChnAttr.stDestSize.u32Height = 288; stExtChnAttr.s32DstFrameRate = -1; stExtChnAttr.s32SrcFrameRate = -1; stExtChnAttr.enCompressMode = COMPRESS_MODE_NONE; s32Ret = HI_MPI_VI_SetExtChnAttr(ViExtChn, &stExtChnAttr); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VI_SetExtChnAttr fail,ViChn(%d),Error(%#x)\n",ViExtChn,s32Ret); goto END_720P_1; } s32Ret = HI_MPI_VI_EnableChn(ViExtChn); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VI_EnableChn fail,ViChn(%d),Error(%#x)\n",ViExtChn,s32Ret); goto END_720P_1; } s32Ret = HI_MPI_VI_SetFrameDepth(ViExtChn,u32ViDepth); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VI_SetFrameDepth fail,ViChn(%d),Error(%#x)\n",ViExtChn,s32Ret); goto END_720P_1; } } //Open vo if (HI_TRUE == bOpenVo) { s32Ret = SAMPLE_COMM_SYS_GetPicSize(pstViVoConfig->enNorm, enPicSize, &stSize); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize fail,Error(%#x)\n",s32Ret); goto END_720P_2; } stVoPubAttr.enIntfType = pstViVoConfig->enVoIntfType; //hi3518e Vo only suppurt pal //if(VO_INTF_BT1120 == pstViVoConfig->enVoIntfType) //{ // stVoPubAttr.enIntfSync = /*VO_OUTPUT_720P60*/VO_OUTPUT_1080P30; //} // if(SAMPLE_VI_MODE_BT1120_1080P == pstViVoConfig->stViConfig.enViMode) // { // stVoPubAttr.enIntfSync = VO_OUTPUT_1080P30; // } //else if(SAMPLE_VI_MODE_BT1120_720P == pstViVoConfig->stViConfig.enViMode) // { // stVoPubAttr.enIntfSync = VO_OUTPUT_720P60; // } // else { stVoPubAttr.enIntfSync = VO_OUTPUT_PAL; } stVoPubAttr.u32BgColor = 0x000000ff; /* In HD, this item should be set to HI_FALSE */ s32Ret = SAMPLE_COMM_VO_StartDev(VoDev, &stVoPubAttr); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VO_StartDevLayer fail,VoDev(%d),Error(%#x)!\n",VoDev,s32Ret); goto END_720P_2; } stLayerAttr.bClusterMode = HI_FALSE; stLayerAttr.bDoubleFrame = HI_FALSE; stLayerAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420; memcpy(&stLayerAttr.stImageSize,&stSize,sizeof(stSize)); stLayerAttr.u32DispFrmRt = 60 ; stLayerAttr.stDispRect.s32X = 0; stLayerAttr.stDispRect.s32Y = 0; if((stVoPubAttr.enIntfSync == VO_OUTPUT_720P60) || (stVoPubAttr.enIntfSync == VO_OUTPUT_1080P30)) { stLayerAttr.stDispRect.u32Width = stSize.u32Width; stLayerAttr.stDispRect.u32Height = stSize.u32Height; } else if(stVoPubAttr.enIntfSync == VO_OUTPUT_PAL) { stLayerAttr.stDispRect.u32Width = 720; stLayerAttr.stDispRect.u32Height = 576; } s32Ret = SAMPLE_COMM_VO_StartLayer(VoLayer, &stLayerAttr, HI_TRUE); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VO_StartLayer fail,VoLayer(%d),Error(%#x)\n",VoLayer,s32Ret); goto END_720P_3; } s32Ret = SAMPLE_COMM_VO_StartChn(VoDev, enVoMode); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VO_StartChn fail,VoDev(%d),Error(%#x)\n",VoDev,s32Ret); goto END_720P_4; } } if (HI_TRUE == bOpenVenc) { s32Ret = SAMPLE_COMM_VENC_Start(VencChn, PT_H264, pstViVoConfig->enNorm, enPicSize, SAMPLE_RC_CBR,0); if(s32Ret != HI_SUCCESS) { SAMPLE_PRT("SAMPLE_COMM_VENC_Start fail,VencChn(%d),Error(%#x)\n",VencChn,s32Ret); goto END_720P_5; } s32Ret = SAMPLE_COMM_VENC_StartGetStream(1); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_VENC_StartGetStream fail,Error(%#x)\n",s32Ret); goto END_720P_6; } } if (HI_TRUE == bOpenVpss) { s32Ret = SAMPLE_COMM_SYS_GetPicSize(pstViVoConfig->enNorm, enPicSize, &astSize[0]); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize fail,Error(%#x)\n",s32Ret); goto END_720P_6; } astSize[1].u32Width = 352; astSize[1].u32Height = 288; SAMPLE_COMM_IVE_VpssGrpAttr(u32VpssGrpCnt, &stVpssGrpAttr, &stSize); s32Ret = SAMPLE_COMM_IVE_VpssStart(u32VpssGrpCnt, astSize, aVpssChn, u32VpssChnNum, &stVpssGrpAttr); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("SAMPLE_COMM_IVE_VpssStart fail,Error(%#x)\n",s32Ret); goto END_720P_6; } } return s32Ret; //END_720P_7: //if (HI_TRUE == bOpenVpss) //{ // SAMPLE_COMM_IVE_StopVpss(u32VpssGrpCnt,u32VpssChnNum); //} END_720P_6: if (HI_TRUE == bOpenVenc) { SAMPLE_COMM_VENC_Stop(VencChn); } END_720P_5: if (HI_TRUE == bOpenVo) { SAMPLE_COMM_VO_StopChn(VoDev, enVoMode); } END_720P_4: if (HI_TRUE == bOpenVo) { SAMPLE_COMM_VO_StopLayer(VoLayer); } END_720P_3: if (HI_TRUE == bOpenVo) { SAMPLE_COMM_VO_StopDev(VoDev); } END_720P_2: if(HI_TRUE == bOpenViExt) { (HI_VOID)HI_MPI_VI_DisableChn(ViExtChn); } END_720P_1: if (HI_TRUE == bOpenVi) { SAMPLE_COMM_VI_StopVi(pstViConfig); } END_720P_0: SAMPLE_COMM_SYS_Exit(); return s32Ret; }