📄 vou.c
字号:
HI_RET VOU_LayerSetKey(IN VOU_LAYER_t WhichLayer, IN BOOL keyEnable, IN UINT32 YUVColor){ VOU_sCtrlReg control; control.ul32 = pVouReg ->control.ul32; switch(WhichLayer) { case VOU_LAYER_OVER1: if(keyEnable == TRUE) control.bits.ulOvl1MaskEn= VOU_CONTROL_OVLKEY_ENABLE; else control.bits.ulOvl1MaskEn = VOU_CONTROL_OVLKEY_DISABLE; pVouReg->ovl1Key.ul32 = YUVColor; break; case VOU_LAYER_OVER2: if(keyEnable == TRUE) control.bits.ulOvl2MaskEn= VOU_CONTROL_OVLKEY_ENABLE; else control.bits.ulOvl2MaskEn = VOU_CONTROL_OVLKEY_DISABLE; pVouReg->ovl2Key.ul32 = YUVColor; break; default: return HI_ERROR; break; } pVouReg ->control.ul32 = control.ul32; return HI_OK;}HI_RET VOU_SetTvClip( BOOL clipEnable, UINT32 ChromaThreshold_L, UINT32 ChromaThreshold_H, UINT32 LumaThreshold_L, UINT32 LumaThreshold_H){ VOU_sVoClipReg clip; VOU_sCtrlReg control; control.ul32 = pVouReg->control.ul32; if(clipEnable == TRUE) { clip.bits.ulLowChroma = ChromaThreshold_L; clip.bits.ulHighChroma = ChromaThreshold_H; clip.bits.ulLowLuma = LumaThreshold_L; clip.bits.ulHighLuma = LumaThreshold_H; pVouReg->clip = clip; control.bits.ulClipEn = VOU_CONTROL_CLIP_ENABLE; } else { control.bits.ulClipEn = VOU_CONTROL_CLIP_DISABLE; } pVouReg->control.ul32 = control.ul32; return HI_OK; }HI_RET VOU_LayerSetAlpha(IN VOU_LAYER_t WhichLayer,IN UINT32 AlphaValue0, IN UINT32 AlphaValue1){ VOU_sVoOvlAlphaReg ovlAlpha; switch(WhichLayer) { case VOU_LAYER_OVER1: ovlAlpha.bits.ulOvlAlpha1 = AlphaValue1; ovlAlpha.bits.ulOvlAlpha0 = AlphaValue0; pVouReg->ovl1Alpha.ul32 = ovlAlpha.ul32; break; case VOU_LAYER_OVER2: ovlAlpha.bits.ulOvlAlpha1 = AlphaValue1; ovlAlpha.bits.ulOvlAlpha0 = AlphaValue0; pVouReg->ovl2Alpha.ul32 = ovlAlpha.ul32; break; default: return HI_ERROR; break; } return HI_OK;}HI_RET VOU_LayerSetRect(VOU_LAYER_t WhichLayer, RECT_t LayerRect){ VOU_sVoOvlReg overLayer; VOU_sVoOvlStartReg ovlStart; VOU_sVoImageReg image; VOU_sVoImageOffsetReg offset; VOU_sCtrlReg control; control.ul32 = pVouReg->control.ul32; switch(WhichLayer) { case VOU_LAYER_OVER1: overLayer.bits.ulOvlWidth = LayerRect.w - 1; overLayer.bits.ulOvlHeight = LayerRect.h - 1; ovlStart.bits.ulOvlStartPixel = LayerRect.x; ovlStart.bits.ulOvlStartLine = LayerRect.y; pVouReg->ovl1Start.ul32 = ovlStart.ul32; pVouReg->ovl1.ul32 = overLayer.ul32; break; case VOU_LAYER_OVER2: overLayer.bits.ulOvlWidth = LayerRect.w - 1; overLayer.bits.ulOvlHeight = LayerRect.h - 1; ovlStart.bits.ulOvlStartPixel = LayerRect.x; ovlStart.bits.ulOvlStartLine = LayerRect.y; pVouReg->ovl2Start.ul32 = ovlStart.ul32; pVouReg->ovl2.ul32 = overLayer.ul32; break; case VOU_LAYER_MAIN: if(control.bits.ulOutFormat == VOU_CONTROL_OUTFORMAT_LCD) image.bits.ulImageWidth = LayerRect.w - 1; else image.bits.ulImageWidth = LayerRect.w*2 - 1; image.bits.ulImageHeight = LayerRect.h - 1; offset.bits.ulImageHOffset = LayerRect.x; offset.bits.ulImageVOffset = LayerRect.y; pVouReg->image.ul32 = image.ul32; pVouReg->imageOff.ul32 = offset.ul32; default: return HI_ERROR; break; } return HI_OK; }HI_RET VOU_HCDefaultSetting(void){ VOU_sCtrlReg control; VOU_sVoHcStartReg hcStart; control.ul32 = pVouReg->control.ul32; control.bits.ulHcMode = VOU_CONTROL_HCMODE_2COLOR; pVouReg->control.ul32 = control.ul32; hcStart.bits.ulHcStartPixel = 0; hcStart.bits.ulHcStartLine = 0; pVouReg->hcStart.ul32 = hcStart.ul32; return HI_OK;}HI_RET VOU_LayerSetAddrAndStride( IN VOU_LAYER_t WhichLayer, IN UINT32 LayerLumaAddr, IN UINT32 LayerChromaAddr, IN UINT32 LayerLumaStride, IN UINT32 LayerChromaStride){ VOU_sVoOvlOffsetReg ovlOffset; VOU_sVoMOffsetReg mOffset; switch(WhichLayer) { case VOU_LAYER_MAIN: pVouReg->mlAddr = LayerLumaAddr; pVouReg->mcAddr = LayerChromaAddr; mOffset.bits.ulMLumaOffset = LayerLumaStride; mOffset.bits.ulMChromaOffset = LayerChromaStride; pVouReg->mOffset.ul32 = mOffset.ul32; break; case VOU_LAYER_OVER1: ovlOffset.ul32 = pVouReg->ovlOffset.ul32; ovlOffset.bits.ulOvl1Offset = LayerLumaStride; pVouReg->ovlOffset.ul32 = ovlOffset.ul32; pVouReg->ovl1Addr = LayerLumaAddr; break; case VOU_LAYER_OVER2: ovlOffset.ul32 = pVouReg->ovlOffset.ul32; ovlOffset.bits.ulOvl2Offset = LayerLumaStride; pVouReg->ovlOffset.ul32 = ovlOffset.ul32; pVouReg->ovl2Addr = LayerLumaAddr; break; default: return HI_ERROR; break; } return HI_OK; }HI_RET VOU_HCSetColor( IN UINT32 HCColor0, IN UINT32 HCColor1, IN UINT32 HCColor2, IN UINT32 HCColor3){ pVouReg->hcColor0 = HCColor0; pVouReg->hcColor1 = HCColor1; pVouReg->hcColor2 = HCColor2; pVouReg->hcColor3 = HCColor3; return HI_OK;}/*** Load a 32*32 Cursor Image to HC ** pCursorData: 32*32 ARGB(32bit) Pixels*/HI_RET VOU_HCLoadCursor(IN UINT32 *pCursorData){ VOU_sVoHcStartReg hcStart; pVouReg->hcAddr = (UINT32)pCursorData; hcStart.ul32 = pVouReg->hcStart.ul32; hcStart.bits.ulHcReload = 1; pVouReg->hcStart.ul32 = hcStart.ul32; return HI_OK; }/* VOU HC position configure routine. */HI_RET VOU_HCSetPosition(IN UINT32 CursorPosX, IN UINT32 CursorPosY){ VOU_sVoHcStartReg hcStart; hcStart.ul32 = pVouReg->hcStart.ul32; hcStart.bits.ulHcStartLine = CursorPosX; hcStart.bits.ulHcStartPixel = CursorPosY; pVouReg->hcStart.ul32 = hcStart.ul32; return HI_OK;}/* Background Image Layer setting --------------------------*/HI_RET VOU_BGSetColor(IN UINT32 ulBgColor){ pVouReg->bgColor.ul32 = ulBgColor; return HI_OK;}/* VOU layer Enable routine. */HI_RET VOU_LayerEnable(IN VOU_LAYER_t WhichLayer){ VOU_sCtrlReg control; control.ul32 = pVouReg->control.ul32; switch(WhichLayer) { case VOU_LAYER_MAIN: control.bits.ulMainEn = VOU_CONTROL_LAYER_ENABLE; break; case VOU_LAYER_OVER1: control.bits.ulOvl1En = VOU_CONTROL_LAYER_ENABLE; break; case VOU_LAYER_OVER2: control.bits.ulOvl2En = VOU_CONTROL_LAYER_ENABLE; break; case VOU_LAYER_HC: control.bits.ulHcEn = VOU_CONTROL_LAYER_ENABLE; break; default:break; } pVouReg->control.ul32 = control.ul32; return HI_OK;}/* VOU layer disable routine. */HI_RET VOU_LayerDisable(IN VOU_LAYER_t WhichLayer){ VOU_sCtrlReg control; control.ul32 = pVouReg->control.ul32; switch(WhichLayer) { case VOU_LAYER_MAIN: control.bits.ulMainEn = VOU_CONTROL_LAYER_DISABLE; break; case VOU_LAYER_OVER1: control.bits.ulOvl1En = VOU_CONTROL_LAYER_DISABLE; break; case VOU_LAYER_OVER2: control.bits.ulOvl2En = VOU_CONTROL_LAYER_DISABLE; break; case VOU_LAYER_HC: control.bits.ulHcEn = VOU_CONTROL_LAYER_DISABLE; break; default:break; } pVouReg->control.ul32 = control.ul32; return HI_OK;}/* VOU interrupt mask setting routine. */HI_RET VOU_IntSet(IN UINT32 u32Int){ pVouReg->intMask.ul32 = u32Int; return HI_OK;}HI_RET VOU_IntEnable(IN VOU_INT_t WhichInt){ VOU_sIntMaskReg intMask; intMask.ul32 = pVouReg->intMask.ul32; switch(WhichInt) { case VOU_RELOAD_INT: intMask.bits.ulReloadIntEn = VOU_INTMASK_INT_ENABLE; break; case VOU_MAINR_INT: intMask.bits.ulMainRIntEn = VOU_INTMASK_INT_ENABLE; break; case VOU_HCR_INT: intMask.bits.ulHcRIntEn = VOU_INTMASK_INT_ENABLE; break; case VOU_OVL2R_INT: intMask.bits.ulOvl2RIntEn = VOU_INTMASK_INT_ENABLE; break; case VOU_OVL1R_INT: intMask.bits.ulOvl1RIntEn = VOU_INTMASK_INT_ENABLE; break; case VOU_LBW_INT: intMask.bits.ulLbwIntEn = VOU_INTMASK_INT_ENABLE; break; case VOU_BUSERR_INT: intMask.bits.ulBusErrIntEn = VOU_INTMASK_INT_ENABLE; break; default:break; } pVouReg->intMask.ul32 = intMask.ul32; return HI_OK;}HI_RET VOU_IntDisable(IN VOU_INT_t WhichInt){ VOU_sIntMaskReg intMask; intMask.ul32 = pVouReg->intMask.ul32; switch(WhichInt) { case VOU_RELOAD_INT: intMask.bits.ulReloadIntEn = VOU_INTMASK_INT_DISABLE; break; case VOU_MAINR_INT: intMask.bits.ulMainRIntEn = VOU_INTMASK_INT_DISABLE; break; case VOU_HCR_INT: intMask.bits.ulHcRIntEn = VOU_INTMASK_INT_DISABLE; break; case VOU_OVL2R_INT: intMask.bits.ulOvl2RIntEn = VOU_INTMASK_INT_DISABLE; break; case VOU_OVL1R_INT: intMask.bits.ulOvl1RIntEn = VOU_INTMASK_INT_DISABLE; break; case VOU_LBW_INT: intMask.bits.ulLbwIntEn = VOU_INTMASK_INT_DISABLE; break; case VOU_BUSERR_INT: intMask.bits.ulBusErrIntEn = VOU_INTMASK_INT_DISABLE; break; default:break; } pVouReg->intMask.ul32 = intMask.ul32; return HI_OK;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -