HI_S32 sw_COMM_VO_StartDevLayer(VO_DEV VoDev, VO_PUB_ATTR_S *pstPubAttr, HI_U32 u32SrcFrmRate) { HI_S32 s32Ret = HI_SUCCESS; HI_U32 u32Width = 0; HI_U32 u32Height = 0; HI_U32 u32Frm = 0; VO_VIDEO_LAYER_ATTR_S stLayerAttr; if ( 0 == u32SrcFrmRate ) { printf("vo u32SrcFrmRate invaild! %d!\n", u32SrcFrmRate); return HI_FAILURE; } s32Ret = HI_MPI_VO_SetPubAttr(VoDev, pstPubAttr); if (s32Ret != HI_SUCCESS) { printf("failed with %#x!\n", s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VO_Enable(VoDev); if (s32Ret != HI_SUCCESS) { printf("failed with %#x!\n", s32Ret); return HI_FAILURE; } s32Ret = sw_COMM_VO_GetWH(pstPubAttr->enIntfSync, &u32Width, &u32Height, &u32Frm); if (s32Ret != HI_SUCCESS) { printf("failed with %#x!\n", s32Ret); return HI_FAILURE; } stLayerAttr.enPixFormat = sw_PIXEL_FORMAT; stLayerAttr.u32DispFrmRt = u32SrcFrmRate; stLayerAttr.stDispRect.s32X = 0; stLayerAttr.stDispRect.s32Y = 0; stLayerAttr.stDispRect.u32Width = u32Width; stLayerAttr.stDispRect.u32Height = u32Height; stLayerAttr.stImageSize.u32Width = u32Width; stLayerAttr.stImageSize.u32Height = u32Height; s32Ret = HI_MPI_VO_SetVideoLayerAttr(VoDev, &stLayerAttr); if (s32Ret != HI_SUCCESS) { printf("failed with %#x!\n", s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VO_EnableVideoLayer(VoDev); if (s32Ret != HI_SUCCESS) { printf("failed with %#x!\n", s32Ret); return HI_FAILURE; } return s32Ret; }
HI_S32 sw_HIFB_VO_Start(void) { #define HIFB_HD_WIDTH 1280 #define HIFB_HD_HEIGHT 720 HI_S32 s32Ret = HI_SUCCESS; VO_PUB_ATTR_S stPubAttr; VO_VIDEO_LAYER_ATTR_S stLayerAttr; VO_CHN_ATTR_S stChnAttr; HI_MPI_VO_Disable(VoDev); stPubAttr.enIntfType = VO_INTF_VGA; stPubAttr.enIntfSync = VO_OUTPUT_720P50; stPubAttr.u32BgColor = 0xff0000ff; stLayerAttr.stDispRect.s32X = 0; stLayerAttr.stDispRect.s32Y = 0; stLayerAttr.stDispRect.u32Width = HIFB_HD_WIDTH; stLayerAttr.stDispRect.u32Height = HIFB_HD_HEIGHT; stLayerAttr.stImageSize.u32Width = HIFB_HD_WIDTH; stLayerAttr.stImageSize.u32Height = HIFB_HD_HEIGHT; stLayerAttr.u32DispFrmRt = 50; stLayerAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_422; stChnAttr.stRect.s32X = 0; stChnAttr.stRect.s32Y = 0; stChnAttr.stRect.u32Width = HIFB_HD_WIDTH; stChnAttr.stRect.u32Height = HIFB_HD_HEIGHT; stChnAttr.bDeflicker = HI_FALSE; stChnAttr.u32Priority = 1; if (HI_SUCCESS != HI_MPI_VO_SetPubAttr(VoDev, &stPubAttr)) { printf("set VO pub attr failed !\n"); return -1; } if (HI_SUCCESS != HI_MPI_VO_Enable(VoDev)) { printf("enable vo device failed!\n"); return -1; } s32Ret = HI_MPI_VO_SetVideoLayerAttr(VoDev, &stLayerAttr); if (s32Ret != HI_SUCCESS) { printf("set video layer attr failed with %#x!\n", s32Ret); return -1; } if (HI_SUCCESS != HI_MPI_VO_EnableVideoLayer(VoDev)) { printf("enable video layer failed!\n"); return -1; } return 0; }
HI_S32 SAMPLE_COMM_VO_StartLayer(VO_LAYER VoLayer,const VO_VIDEO_LAYER_ATTR_S *pstLayerAttr, HI_BOOL bVgsBypass) { HI_S32 s32Ret = HI_SUCCESS; if (!bVgsBypass) { s32Ret = HI_MPI_VO_SetDispBufLen(VoLayer, 3); if (s32Ret != HI_SUCCESS) { SAMPLE_PRT("failed with %#x!\n", s32Ret); return HI_FAILURE; } } s32Ret = HI_MPI_VO_SetVideoLayerAttr(VoLayer, pstLayerAttr); if (s32Ret != HI_SUCCESS) { SAMPLE_PRT("failed with %#x!\n", s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VO_EnableVideoLayer(VoLayer); if (s32Ret != HI_SUCCESS) { SAMPLE_PRT("failed with %#x!\n", s32Ret); return HI_FAILURE; } return s32Ret; }
static void video_OutputInit() { int i = 0, ii = 0; int const nMaxFps = MAX_D1_CNT ? MAX_D1_LIVE_FPS : MAX_CIF_LIVE_FPS; VO_VIDEO_LAYER_ATTR_S stVgaLayerAttr; VO_VIDEO_LAYER_ATTR_S stCvbsLayerAttr; // vga output { VGA_RESOLUTION const enRes = g_pstSysEnv->GetVGAResolution(g_pstSysEnv); stVgaLayerAttr.stImageSize.u32Width = VO_ORIGIN_WIDTH; stVgaLayerAttr.stImageSize.u32Height = VO_ORIGIN_HEIGHT; stVgaLayerAttr.stDispRect.s32X = 0; stVgaLayerAttr.stDispRect.s32Y = 0; switch(enRes) { case VGA_800x600: stVgaLayerAttr.stDispRect.u32Width = 800; stVgaLayerAttr.stDispRect.u32Height = 600; break; default: case VGA_1024x768: stVgaLayerAttr.stDispRect.u32Width = 1024; stVgaLayerAttr.stDispRect.u32Height = 768; break; case VGA_1280x1024: stVgaLayerAttr.stDispRect.u32Width = 1280; stVgaLayerAttr.stDispRect.u32Height = 1024; break; case VGA_1366x768: stVgaLayerAttr.stDispRect.u32Width = 1366; stVgaLayerAttr.stDispRect.u32Height = 768; break; case VGA_1440x900: stVgaLayerAttr.stDispRect.u32Width = 1440; stVgaLayerAttr.stDispRect.u32Height = 900; break; } stVgaLayerAttr.u32DispFrmRt = nMaxFps; stVgaLayerAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420; stVgaLayerAttr.s32PiPChn = VO_DEFAULT_CHN; } // cvbs { stCvbsLayerAttr.stImageSize.u32Width = VO_ORIGIN_WIDTH; stCvbsLayerAttr.stImageSize.u32Height = VO_ORIGIN_HEIGHT; stCvbsLayerAttr.stDispRect.s32X = 0; stCvbsLayerAttr.stDispRect.s32Y = 0; stCvbsLayerAttr.stDispRect.u32Width = VO_ORIGIN_WIDTH; stCvbsLayerAttr.stDispRect.u32Height = VO_ORIGIN_HEIGHT; stCvbsLayerAttr.u32DispFrmRt = nMaxFps; stCvbsLayerAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420; stCvbsLayerAttr.s32PiPChn = VO_DEFAULT_CHN; } { // configuration active const VO_VIDEO_LAYER_ATTR_S astVideoLayerAttr[] = {stVgaLayerAttr, stCvbsLayerAttr}; video_ScreenInit(); for(i = 0; i < sizeof(VO_DEV_ID) / sizeof(VO_DEV_ID[0]); ++i){ //DVR_ASSERT(HI_MPI_VO_SetDispBufLen(nDev, MAX_CAM_CH)); DVR_ASSERT(HI_MPI_VO_SetVideoLayerAttr(VO_DEV_ID[i], &astVideoLayerAttr[i])); DVR_ASSERT(HI_MPI_VO_EnableVideoLayer(VO_DEV_ID[i])); // setup division video_Division(VO_DEV_ID[i], s_stVideo.nScrWidth[i], s_stVideo.nScrHeight[i], -1, 0, FALSE); // enable vo channel for(ii = 0; ii < VIDEO_GetMaxDiv(); ++ii){ DVR_ASSERT(HI_MPI_VO_SetChnField(VO_DEV_ID[i], ii, VO_FIELD_BOTTOM)); DVR_ASSERT(HI_MPI_VO_EnableChn(VO_DEV_ID[i], ii)); if(ii < MAX_CAM_CH){ video_BindOutput(VO_DEV_ID[i], ii, TRUE); }else{ DVR_ASSERT(HI_MPI_VO_SENDFRAME(VO_DEV_ID[i], ii, s_pstLogoPic)); } } } } s_stVideo.bOutput = TRUE; }
static void video_OutputInit() { int i = 0, ii = 0; int const nMaxFps = MAX_D1_CNT ? MAX_D1_LIVE_FPS : MAX_CIF_LIVE_FPS; VO_VIDEO_LAYER_ATTR_S stVgaLayerAttr; VO_VIDEO_LAYER_ATTR_S stCvbsLayerAttr; // vga output { VGA_RESOLUTION const enRes = g_pstSysEnv->GetVGAResolution(g_pstSysEnv); stVgaLayerAttr.stImageSize.u32Width = VO_ORIGIN_WIDTH; stVgaLayerAttr.stImageSize.u32Height = VO_ORIGIN_HEIGHT; stVgaLayerAttr.stDispRect.s32X = 0; stVgaLayerAttr.stDispRect.s32Y = 0; switch(enRes) { case VGA_800x600: stVgaLayerAttr.stDispRect.u32Width = 800; stVgaLayerAttr.stDispRect.u32Height = 600; break; default: case VGA_1024x768: stVgaLayerAttr.stDispRect.u32Width = 1024; stVgaLayerAttr.stDispRect.u32Height = 768; break; case VGA_1280x1024: stVgaLayerAttr.stDispRect.u32Width = 1280; stVgaLayerAttr.stDispRect.u32Height = 1024; break; case VGA_1366x768: stVgaLayerAttr.stDispRect.u32Width = 1366; stVgaLayerAttr.stDispRect.u32Height = 768; break; case VGA_1440x900: stVgaLayerAttr.stDispRect.u32Width = 1440; stVgaLayerAttr.stDispRect.u32Height = 900; break; } stVgaLayerAttr.u32DispFrmRt = nMaxFps; stVgaLayerAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420; stVgaLayerAttr.s32PiPChn = VO_DEFAULT_CHN; } // cvbs { stCvbsLayerAttr.stImageSize.u32Width = VO_ORIGIN_WIDTH; stCvbsLayerAttr.stImageSize.u32Height = VO_ORIGIN_HEIGHT; stCvbsLayerAttr.stDispRect.s32X = 0; stCvbsLayerAttr.stDispRect.s32Y = 0; stCvbsLayerAttr.stDispRect.u32Width = VO_ORIGIN_WIDTH; stCvbsLayerAttr.stDispRect.u32Height = VO_ORIGIN_HEIGHT; stCvbsLayerAttr.u32DispFrmRt = nMaxFps; stCvbsLayerAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420; stCvbsLayerAttr.s32PiPChn = VO_DEFAULT_CHN; } { // configuration active const VO_VIDEO_LAYER_ATTR_S astVideoLayerAttr[] = {stVgaLayerAttr, stCvbsLayerAttr}; video_ScreenInit(); for(i = 0; i < sizeof(VO_DEV_ID) / sizeof(VO_DEV_ID[0]); ++i){ //DVR_ASSERT(HI_MPI_VO_SetDispBufLen(nDev, MAX_CAM_CH)); DVR_ASSERT(HI_MPI_VO_SetVideoLayerAttr(VO_DEV_ID[i], &astVideoLayerAttr[i])); DVR_ASSERT(HI_MPI_VO_EnableVideoLayer(VO_DEV_ID[i])); // setup division video_Division(VO_DEV_ID[i], s_stVideo.nScrWidth[i], s_stVideo.nScrHeight[i], VIDEO_GetMaxDiv(), 0, FALSE); // 1 - 16 digital zoom // 17 - 20 bind directly // 21 - 24 bind directly VO_DISPLAY_FIELD_E enDisplayField; // enable vo channel for(ii = 0; ii < VIDEO_GetMaxDiv() + 1; ++ii){ if(ii < 16){ // for vi0 1-16 // digital zoom VO_ZOOM_ATTR_S stZoomAttr; memset(&stZoomAttr, 0, sizeof(stZoomAttr)); stZoomAttr.enField = VIDEO_FIELD_FRAME; stZoomAttr.stZoomRect.u32Width = VI_CIF_WIDTH; stZoomAttr.stZoomRect.u32Height = VI_CIF_HEIGHT; stZoomAttr.stZoomRect.s32X = 0; stZoomAttr.stZoomRect.s32Y = (ii % 8) * (stZoomAttr.stZoomRect.u32Height + 2); VIDEO_TRACE("ch=%d zoom [%d,%d,%d,%d]", ii, stZoomAttr.stZoomRect.s32X, stZoomAttr.stZoomRect.s32Y, stZoomAttr.stZoomRect.u32Width, stZoomAttr.stZoomRect.u32Height); DVR_ASSERT(HI_MPI_VO_SetZoomInWindow(VO_DEV_ID[i], ii, &stZoomAttr)); enDisplayField = (ii >= 8) ? VO_FIELD_TOP : VO_FIELD_BOTTOM; }else if(ii < 20){ // for vi2 ch1-4 enDisplayField = VO_FIELD_BOTTOM; }else if(ii < 24){ // for vi3 ch1-4 enDisplayField = VO_FIELD_BOTTOM; }else if(24 == ii){ enDisplayField = VO_FIELD_BOTH; }else if(25 == ii){ // for ch1-16 d1 live enDisplayField = VO_FIELD_BOTH; } DVR_ASSERT(HI_MPI_VO_SetChnField(VO_DEV_ID[i], ii, enDisplayField)); DVR_ASSERT(HI_MPI_VO_EnableChn(VO_DEV_ID[i], ii)); if(ii < MAX_CAM_CH){ video_BindOutput(VO_DEV_ID[i], ii, TRUE); }else if(ii < SPECIAL_D1_CH){ DVR_ASSERT(HI_MPI_VO_SENDFRAME(VO_DEV_ID[i], ii, s_pstLogoPic)); } } } } s_stVideo.bOutput = TRUE; }