4.3 API参考
视频输出(VO)实现启用视频输出设备或通道、发送视频数据到输出通道等功能。该功能模块提供以下MPI:
设备操作:
· HI_MPI_VO_Enable :启用视频输出设备。
· HI_MPI_VO_Disable :禁用视频输出设备。
· HI_MPI_VO_SetPubAttr :设置视频输出设备的公共属性。
· HI_MPI_VO_GetPubAttr :获取视频输出设备的公共属性。
· HI_MPI_VO_CloseFd :关闭视频输出模块所有占用的Fd。
· HI_MPI_VO_SetDevFrameRate:设置设备用户时序下设备帧率。
· HI_MPI_VO_GetDevFrameRate:获取设备帧率。
· HI_MPI_VO_SetVtth:设置设备垂直时序中断门限。
· HI_MPI_VO_GetVtth:获取设备垂直时序中断门限。
· HI_MPI_VO_QueryDevIntStatus:查询设备接口的连接状态。
视频层操作:
· HI_MPI_VO_EnableVideoLayer:使能视频层。
· HI_MPI_VO_DisableVideoLayer:禁止视频层。
· HI_MPI_VO_SetVideoLayerCompressAttr:设置视频层压缩属性。
· HI_MPI_VO_GetVideoLayerCompressAttr:获取视频层压缩属性。
· HI_MPI_VO_SetVideoLayerAttr:设置视频层属性。
· HI_MPI_VO_GetVideoLayerAttr:获取视频层属性。
· HI_MPI_VO_BindVideoLayer:设置视频层绑定关系。
· HI_MPI_VO_UbBindVideoLayer:解除视频层绑定关系。
· HI_MPI_VO_SetVideoLayerPriority:设置视频层优先级。
· HI_MPI_VO_GetVideoLayerPriority:获取视频层优先级。
· HI_MPI_VO_SetVideoLayerPartitionMode:设置视频层的分割模式。
· HI_MPI_VO_GetVideoLayerPartitionMode:获取视频层的分割模式。
· HI_MPI_VO_SetVideoLayerCSC:设置视频层CSC。
· HI_MPI_VO_GetVideoLayerCSC:获取视频层CSC。
· HI_MPI_VO_SetAttrBegin:设置视频层上的通道的设置属性开始。
· HI_MPI_VO_SetAttrEnd:设置视频层上的通道的设置属性结束。
· HI_MPI_VO_SetPlayToleration:设置视频层上的播放容忍度。
· HI_MPI_VO_GetPlayToleration:获取视频层上的播放容忍度。
· HI_MPI_VO_GetScreenFrame:获取视频层上的输出图像帧。
· HI_MPI_VO_ReleaseScreenFrame:释放视频层上的输出图像帧。
· HI_MPI_VO_SetDispBufLen:设置视频层上的显示缓存长度。
· HI_MPI_VO_GetDispBufLen:获取视频层上的显示缓存长度。
· HI_MPI_VO_EnableChn:启动指定的视频输出通道。
· HI_MPI_VO_DisableChn:禁用指定的视频输出通道。· HI_MPI_VO_SetChnAttr:设置指定视频输出通道的属性。
· HI_MPI_VO_GetChnAttr:获取指定视频输出通道的属性。
· HI_MPI_VO_SetChnParam:设置指定视频输出通道的参数。
· HI_MPI_VO_SetChnDispPos:设置指定视频输出通道的显示位置。
· HI_MPI_VO_GetChnDispPos:获取指定视频输出通道的显示位置。
· HI_MPI_VO_SetChnField:设置指定视频输出通道的帧场显示策略。
· HI_MPI_VO_GetChnField:获取指定视频输出通道的显示策略。
· HI_MPI_VO_GetChnFrame:获取输出通道图像数据。
· HI_MPI_VO_ReleaseChnFrame:释放输出通道图像数据。
· HI_MPI_VO_SendFrame:将视频图像送入指定视频输出通道显示。
· HI_MPI_VO_SetChnFrameRate:设置指定视频输出通道的显示帧率。
· HI_MPI_VO_GetChnFrameRate:获取指定视频输出通道的显示帧率。
· HI_MPI_VO_PauseChn:暂停指定的视频输出通道。
· HI_MPI_VO_ResumeChn:恢复指定的视频输出通道。
· HI_MPI_VO_StepChn:单帧播放指定的视频输出通道。
· HI_MPI_VO_ReFreshChn:刷新指定的视频输出通道。
· HI_MPI_VO_ShowChn:设置显示通道。
· HI_MPI_VO_HideChn:设置隐藏通道。· HI_MPI_VO_EnableRecvFrameRateMatch:启用指定通道的帧率匹配功能。
· HI_MPI_VO_DisableRecvFrameRateMatch:禁用指定通道的帧率匹配功能。
· HI_MPI_VO_SetZoomInWindow:设置视频输出局部放大窗口。
· HI_MPI_VO_GetZoomWindow:获取视频出输出局部放大窗口参数。
· HI_MPI_VO_GetChnPts:获取指定视频输出通道当前显示图像的时间戳。
· HI_MPI_VO_QueryChnStat:查询视频输出通道状态。
· HI_MPI_VO_ClearChnBuffer:清空指定输出通道的缓存buffer数据。
· HI_MPI_VO_SetChnBorder:设置指定输出通道的边框属性。
· HI_MPI_VO_GetChnBorder:获取指定输出通道的边框属性。
· HI_MPI_VO_SetChnReceiveThreshold:设置视频输出通道的显示门限值。
· HI_MPI_VO_GetChnReceiveThreshold:获取视频输出通道的显示门限值。
· HI_MPI_VO_GetChnRegionLuma:获取区域亮度信息。
接口操作:
· HI_MPI_VO_SetVgaParam:设置设备VGA输出图像效果。
· HI_MPI_VO_GetVgaParam:获取设备VGA输出图像效果。
· HI_MPI_VO_SetHdmiParam:设置设备HDMI输出图像效果
· HI_MPI_VO_GetHdmiParam:获取设备HDMI输出图像效果。
回写操作:
· HI_MPI_VO_SetWbcSource:设置回写数据源。
· HI_MPI_VO_GetWbcSource:获取回写数据源。
· HI_MPI_VO_EnableWbc:使能视频回写。
· HI_MPI_VO_DisableWbc:禁用视频回写。
· HI_MPI_VO_SetWbcAttr:设置视频回写属性。
· HI_MPI_VO_GetWbcAttr:获取视频回写属性。
· HI_MPI_VO_SetWbcMode:设置视频回写模式。
· HI_MPI_VO_GetWbcMode:获取视频回写模式。
· HI_MPI_VO_SetWbcDepth:设置获取视频回写图像的缓存深度。
· HI_MPI_VO_GetWbcDepth:获取视频回写图像的缓存深度。
· HI_MPI_VO_GetWbcFrame:获取视频回写图像。
· HI_MPI_VO_ReleaseWbcFrame:释放视频回写图像。
图形层操作:
· HI_MPI_VO_BindGraphicLayer:图形层绑定设备。
· HI_MPI_VO_UnBindGrapHicLayer:图形层绑定设备。
· HI_MPI_VO_SetGrapHicLayerCSC:设置图形层输出图像效果。
· HI_MPI_VO_GetGrapHicLayerCSC:获取图形层输出图像效果。
级联操作:
· HI_MPI_VO_SetCascadeAttr:设置级联属性。
· HI_MPI_VO_GetCascadeAttr:获取级联属性。
· HI_MPI_VO_EnableCascadeDev:使能级联扩展设备。
· HI_MPI_VO_DisableCascadeDev:禁止级联扩展设备。
· HI_MPI_VO_SetCascadePattem:设置视频级联画面样式。
· HI_MPI_VO_GetCascadePattem:获取视频级联画面样式。
· HI_MPI_VO_CascadePosBindChn:绑定级联区域与视频输出通道。
· HI_MPI_VO_CascadePosUnBindChn:解绑定级联区域与视频输出通道。
· HI_MPI_VO_EnableCascade:使能视频级联。
· HI_MPI_VO_DisableCascade:禁止视频级联。
HI_MPI_VO_Enable
【描述】
启用视频输出设备。
【语法】
HI_S32 HI_MPI_VO_Enable(VO_DEV VoDev);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoDev | 视频输出设备号 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败,参见错误码 |
【差异说明】
芯片 | VoDev取值范围 |
---|---|
Hi3536 | 【0,VO_MAX_DEV_NUM)。 |
Hi3521A | 【0,VO_MAX_DEV_NUM)。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | 【0,VO_MAX_DEV_NUM)。 |
【需求】
· 头文件:mpi_vo.h、hi_comm_vo.h
· 库文件:libmpi.a
【注意】
· 由于系统没有初始化设备为使能状态,所以在使用视频输出功能前必须先进行设备使能操作。
· 在调用设备使能前,必须对设备公共属性进行配置,否则返回设备未配置错误。
· 为适应开机画面与正常操作界面间顺畅切换,此处需要检查VO硬件是否已经使能(检查对应设备的使能寄存器位是否被设置位1),如果已使能则返回成功,且沿用已有时序配置。如果希望更改VO的时序配置,则需要先调用HI_MPI_VO_Disable接口,强制关闭VO硬件后再使能。推荐先关闭开机画面已打开的设备再去使能。
· 各个DEV的使用说明详见VO_DEV章节。
【举例】
HI_S32 s32Ret;
VO_DEV VoDev = 0;
VO_PUB_ATTR_S stPubAttr;s32Ret = HI_MPI_VO_GetPubAttr(VoDev ,&stPubAttr);
if( s32Ret != HI_SUCCESS )
{printf("Get device attributes failed with error code %#x!\n",s32Ret);return HI_FAILURE;
}stPubAttr.u32BgColor = 0xff;
stPubAttr.enIntType = VO_INTF_VGA;
stPubAttr.enIntSync = VO_OUTPUT_1280✖1024_60;s32Ret = HI_MPI_VO_SetPubAttr(VoDev , &stPubAttr);
if( s32Ret != HI_SUCCESS )
{printf("Set device attributes failed with errno %#x!\n",s32Ret);return HI_FAILURE;
}s32Ret = HI_MPI_VO_Enable(VoDev);
if ( s32Ret != HI_SUCCESS )
{printf("Enable vo dev %d failed with errno %#x!\n",VoDev , s32Ret);return HI_FAILURE;
}s32Ret = HI_MPI_VO_Disable(VoDev);
if( s32Ret != HI_SUCCESS )
{printf("Enable vo dev %d failed with errno %#x!\n",VoDev , s32Ret);return HI_FAILURE;
}
s32Ret = HI_MPI_VO_CloseFd();
if (s32Ret != HI_SUCCESS)
{ printf("Some device is not disable with errno %#x!\n", VoDev, s32Ret); return HI_FAILURE;
}
HI_MPI_VO_Disable
【描述】
禁用视频输出设备。
【语法】
HI_S32 HI_MPI_VO_Disable(VO_DEV VoDev);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
ViDev | 视频输出设备号。 | 输入 |
【返回值】
同上
【芯片差异】
芯片 | VoDev取值范围 |
---|---|
Hi3536 | [0,VO_MAX_DEV_NUM)。 |
Hi3521A | [0,VO_MAX_DEV_NUM)。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | [0,VO_MAX_DEV_NUM)。 |
【需求】
同上
【注意】
· 设备禁止前必须先禁止该设备上的视频层。
· 设备禁止前,如果有使能WBC,则必须关闭该使能。
· 调用设备使能接口后,如果未调用该接口进行禁止,则VO设备将一直保持使能状态,并且下次设置设备属性时不会生效。
· 设备禁止后需要重新设置设备公共属性,才可使能设备。
【举例】
参见HI_MPI_VO_Enable的举例。
【相关主题】
HI_MPI_VO_Enable
HI_MPI_VO_SetPubAttr
【描述】
配置视频输出设备的公共属性。
【语法】
HI_S32 HI_MPI_VO_SetPubAttr( VO_DEV VoDev,const VO_PUB_ATTR_S *pstPubAttr);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoDev | 视频输出设备号。 | 输入 |
pstPubAttr | 视频输出设备公共属性结构体指针。 静态属性 | 输入 |
【返回值】
同上
【差异说明】
芯片 | 描述 |
---|---|
Hi3536 | VoDev取值范围:[0,VO_MAX_DEV_NUM)。 CVBS输出时支持自动负载检测。 |
Hi3521A | VoDev取值范围:[0,VO_MAX_DEV_NUM)。 CVBS输出时支持自动负载检测。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | VoDev取值范围:[0,VO_MAX_DEV_NUM)。 CVBS输出时支持自动负载检测。 |
【需求】
同上
【注意】
· 视频输出设备属性为静态属性,必须在执行HI_MPI_VO_Enable前配置。
· 各个DEV的使用说明详见VO_DEV章节。
· 视频输出设备属性的使用说明详见VO_PUB_ATTR_S章节。
· 当设置视频输出设备属性的输出接口类型 enIntType为VO_INTF_CVBS时,Hi3536/Hi3521A/Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100支持自动负载检测。
- 基本原理:周期性检测CVBS接口是否有线缆连接,当检测到没有线缆连接时,驱动会自动将DAC下电从而达到降低功耗的目的。
- 配置检测周期:可通过配置VO模块参数来配置负载检测周期,检测周期以帧中断为单位,例如insmod hi3536_vou.ko detectCycle=50,当配置视频输出设备属性的输出时序enIntSync为VO_OUTPUT_PAL时,检测周期为2秒(50/25),当配置输出时序enIntSync为VO_OUTPUT_PAL时,检测周期为1.67秒(50/30)。当不带任何模块参数加载VO驱动时,负载检测周期默认为30,当配置VO模块参数detectCycle为0时,将关闭自动负载检测功能。
· Hi3531DV100视频级联场景,输出3840✖2160@fps和3840✖2160@25fps时,只支持双沿采样模式。
【举例】
请参见HI_MPI_VO_Enable的举例。
【相关主题】
· HI_MPI_VO_GetPubAttr
· HI_MPI_VO_SetCascadeAttr
HI_MPI_VO_GetPubAttr
【描述】
获取视频输出设备的公共属性。
【语法】
HI_S32 HI_MPI_VO_GetPubAttr(VO_DEV VoDev,VO_PUB_ATTR_S *pstPubAttr);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoDev | 视频输出设备号。 | 输入 |
pstPubAttr | 视频输出设备公共属性结构体指针。 | 输出 |
【差异说明】
芯片 | |
---|---|
Hi3536 | [0,VO_MAX_DEV_NUM)。 |
Hi3521A | [0,VO_MAX_DEV_NUM)。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | [0,VO_MAX_DEV_NUM)。 |
【需求】
同上
【注意】
在设置设备公共属性前先获取属性,就可以只设置需要改变
的配置项。
【举例】
请参见HI_MPI_VO_Enable的举例。
【相关主题】
HI_MPI_VO_SetPubAttr
HI_MPI_VO_CloseFd
【描述】
关闭视频输出模块所有占用的Fd。
【语法】
HI_S32 HI_MPI_VO_CloseFd( HI_VOID );
【参数】
无。
【返回值】
同上
【需求】
同上
【注意】
本接口用于关闭VO设备文件句柄,建议在设备都关闭的情况下使用。
【举例】
请参见HI_MPI_VO_Enable的举例。
【相关主题】
HI_MPI_VO_Enable
HI_MPI_VO_SetDevFrameRate
【描述】
设置设备用户时序下设备帧率。
【语法】
HI_S32 HI_MPI_VO_SetDevFrameRate(VO_DEV VoDev, HI_U32 u32FrameRate);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoDev | 视频输出设备号。 | 输入 |
u32FrameRate | 设备帧率。 取值范围:只能配置为25、30、50、60。 | 输入 |
【返回值】
同上
【需求】
同上
【注意】
· 只能在用户时序下使用(即接口时序enIntSync等于VO_OUTPUT_USER)。
· 只能在调用HI_MPI_VO_SetPubAttr之后、HI_MPI_VO_Enable之前调用。
【举例】
无。
【相关主题】
HI_MPI_VO_GetDevFrameRate
HI_MPI_VO_GetDevFrameRate
【描述】
获取设备帧率
【语法】
HI_S32 HI_MPI_VO_GetDevFrameRate(VO_DEV VoDev,HI_U32 *pu32FrameRate);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoDev | 视频输出设备号。 | 输入 |
pu32FrameRate | u32类型的指针。 | 输出 |
【返回值】
同上
【需求】
同上
【注意】
无
【举例】
无
【相关主题】
HI_MPI_VO_SetDevFrameRate
HI_MPI_VO_SetVtth
【描述】
设置设备垂直时序中断门限。
【语法】
HI_S32 HI_MPI_VO_SetVtth(VO_DEV VoDev,HI_U32 u32Vtth);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoDev | 视频输出设备号。 | 输入 |
u32Vtth | 门限值 ,表示在倒数第u32Vtth行有效像素行处上报垂直时序中断。 取值范围:高清设备为[240,8191],标清设备为[100,8191]。 | 输入 |
【返回值】
同上
【需求】
同上
【注意】
· 一般在多片视频级联场景下,因业务量大,中断处理被延迟响应时,可通过本接口调大门限值,使垂直时序中断提前上报。其他情况下不建议调用本接口。
· 调用前需保证设备未使能。
· 只有物理设备支持设置门限值。
· 高清设备在分辨率小于2560✖1600@60时默认垂直时序中断门限为240,分辨率为2560✖1600@60和3840✖2160@30时为480,分辨率为3840✖2160时为960,标清设备的默认垂直时序中断门限为100。用户必须保证设置的门限值不超过当前时序的有效像素行行数。如果用户设置的门限值低于默认值,会自动适配到默认的门限值。
【举例】
无
【相关主题】
HI_MPI_VO_GetVtth
HI_MPI_VO_GetVtth
【描述】
获取设备垂直时序中断门限值。
【语法】
HI_S32 HI_MPI_VO_GetVtth(VO_DEV VoDev,HI_U32 *pu32Vtth);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoDev | 视频输出设备号 | 输入 |
pu32Vtth | u32类型的指针。 | 输出 |
【返回值】
同上
【需求】
同上
【注意】
只有物理设备支持获取门限值
【举例】
无
【相关主题】
HI_MPI_VO_SetVtth
HI_MPI_VO_QueryDevIntStatus
【描述】
查询VGA/CVBS的连接状态。
【语法】
HI_S32 HI_MPI_VO_QueryDevIntStatus(VO_INTF_TYPE_E enDevInter,VO_DEVINTF_STATUS_S *pstStatus);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
enDevInter | 设备接口 | 输入 |
pstStatus | 接口状态 | 输出 |
【返回值】
同上
【差异说明】
无
【需求】
同上
【注意】
如果开启VGA检测,需要设置模块参数vgaDetectEnable为1。
【举例】
无
【相关主题】
无
HI_MPI_VI_EnableVideoLayer
【描述】
使能视频层
【语法】
HI_S32 HI_MPI_VO_EnableVideoLayer (VO_LAYER VoLayer);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoLayer | 视频输出视频层号。 | 输入 |
【返回值】
同上
【差异说明】
芯片 | Volayer取值范围 |
---|---|
Hi3536 | [0,VO_MAX_LAYER_NUM)。 |
Hi3521A | [0,VO_MAX_LAYER_NUM)。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | [0,VO_MAX_LAYER_NUM)。 |
【需求】
同上
【注意】
· 视频层使能前必须保证该视频层所绑定的设备处于使能状态。
· 视频层使能前必须保证该视频层已经配置
。
· 各个视频层的使用说明详见VO_LAYER章节。
【举例】
HI_S32 s32Ret;
VO_LAYER VoLayer = 0;
RECT_S stRect;
VO_VIDEO_LAYER_ATTR_S stLayerAttr;s32Ret = HI_MPI_VO_GetVideoLayerAttr(VoLayer,&stLayerAttr);
if( s32Ret != HI_SUCCESS )
{printf("Get Video layer attributes failed with errno %#x!\n",s32Ret);return HI_FAILURE;
}
stLayerAttr.stDispRect.s32X = 0;
stLayerAttr.stDispRect.s32Y = 0;
stLayerAttr.stDispRect.u32Width = 720;
stLayerAttr.stDispRect.u32Height = 576;stLayerAttr.stImageSize.u32Width = 720;
stLayerAttr.stImageSize.u32Height =576;
stLayerAttr.u32DispFrmRt = 25;
stLayerAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_422;
stLayerAttr.bDoubleFrame = HI_TRUE;
stLayerAttr.bClusterMode = HI_FALSE;
s32Ret = HI_MPI_VO_SetVideoLayerAttr(VoLayer,&stLayerAttr);
if(s32Ret != HI_SUCCESS)
{printf("Set Video layer attributes failed with errno %#x!\n",s32Ret);return HI_FAILURE;
}s32Ret = HI_MPI_VO_EnableVideoLayer(VoLayer);
if(s32Ret != HI_SUCCESS)
{printf("Enable video layer failed with errno %#x!\n",s32Ret);return HI_FAILURE;
}
s32Ret = HI_MPI_VO_DisableVideoLayer(VoLayer);
if(s32Ret != HI_SUCCESS)
{printf("Disable video layer failed with errno %#x!\n",s32Ret);return HI_FAILURE;
}
【相关主题】
HI_MPI_VO_DisableVideoLayer
HI_MPI_VO_DisableVideoLayer
【描述】
禁止视频层
【语法】
HI_S32 HI_MPI_VO_DisableVideoLayer(VO_LAYER VoLayer);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoLayer | 视频输出视频层号。 | 输入 |
【返回值】
同上
【差异说明】
芯片 | VoLayer取值范围 |
---|---|
Hi3536 | [0,VO_MAX_LAYER_NUM)。 |
Hi3521A | [0,VO_MAX_LAYER_NUM)。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | [0,VO_MAX_LAYER_NUM)。 |
【需求】
同上
【注意】
· 视频层禁止前必须保证其上的通道全部禁止。
· 在禁止视频层时,如果用户没有释放从VO获取的图像buffer资源,该接口会返回HI_MPI_VB_BUSY的错误码,表示VO创建的VB资源没有释放。多用于用户调用获取屏幕图像未释放的情况下。
· 在禁止视频层时,如果用户选择了WBC数据源为VO_WBC_DATASOURCE_VIDEO模式,则必须保证将该设备的WBC功能关闭使能。
· 如果VO作为输出源绑定到其他模块,则在退出业务的时候需要先关闭所绑定的模块,再关闭VO,以防止绑定模块仍使用VO已释放的VB资源而引起来的错误。
【举例】
请参见HI_MPI_VO_EnableVideoLayer的举例。
【相关主题】
HI_MPI_EnableVideoLayer
HI_MPI_VO_SetVideoLayerCompressAttr
【描述】
设置视频层压缩属性。
【语法】
HI_S32 HI_MPI_VO_SetVideoLayerCompressAttr(VO_LAYER VoLayer , const VO_COMPRESS_ATTR_S *pstCompressAttr);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoLayer | 视频输出视频层号 | 输入 |
pstCompressAttr | 视频层压缩属性结构体指针。 | 输入 |
【返回值】
同上
【差异说明】
芯片 | VoLayer取值范围 |
---|---|
Hi3536 | [0,VO_MAX_LAYER_NUM)。 |
Hi3521A | 不支持。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | [0,VO_MAX_LAYER_NUM)。 |
【需求】
同上
【注意】
· 设置视频层压缩属性必须在视频层禁止的情况下进行。
· 设置视频层压缩属性时,必须保证视频层和输出设备的绑定关系存在。这主要是针对可以动态绑定的PIP层而言,在对PIP层解除绑定时,意味着PIP层的绑定关系已经不存在了,若此时调用该视频层压缩属性设置接口会出现绑定关系不存在的错误。同时,也需要确保该视频层绑定的设备已经使能。
· 视频层中通道宽度小于352字节时并不能减少带宽,默认为不压缩。
· 视频层压缩属性的使用说明详见VO_COMPRESS_ATTR_S章节。
【举例】
HI_S32 s32Ret;
VO_LAYER VoLayer = 0;
RECT_S stRect;
VO_VIDEO_LAYER_ATTR_S stLayerAttr;
VO_COMPRESS_ATTR_S stCompressAttr;s32Ret = HI_MPI_VO_GetVideoLayerAttr(VoLayer,&stLayerAttr);
if(s32Ret !=HI_SUCCESS)
{printf("Get video layer attributes failed with errno %#x!\n",s32Ret);return HI_FAILURE;
}stLayerAttr.stDispRect.s32X = 0;
stLayerAttr.stDispRect.s32Y =0;
stLayerAttr.stDispRect.u32Width = 720;
stLayerAttr.stDispRect.u32Height =576;stLayerAttr.stImageSize.u32Width = 720;
stLayerAttr.stImageSize.u32Height = 576;
stLayerAttr.u32DispFrmRt = 25;
stLayerAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_422;
stLayerAttr.bDoubleFrame = HI_TRUE;
stLayerAttr.bClusterMode = HI_FALSE;s32Ret = HI_MPI_VO_SetVideoLayerAttr(VoLayer,&StLayerAttr);
if (s32Ret != HI_SUCCESS)
{printf("Set video layer attributes failed with errno %#x!\n",s32Ret);return HI_FAILURE;
}s32Ret = HI_MPI_VO_GetVideoLayerCompressAttr(VoLayer,&stCompressAttr);
if(s32Ret != HI_SUCCESS)
{printf("Get video layer compress attributes failed with errno %#x!\n",s32Ret);return HI_FAILURE;
}
stCompressAttr.bSupportCompress = HI_TRUE;
s32Ret = HI_MPI_VO_SetVideoLayerCompressAttr(VoLayer,&stCompressAttr);
if(s32Ret != HI_SUCCESS)
{printf("Set video layer compress attributes failed with errno %#x!\n",s32Ret);return HI_FAILURE;
}
s32Ret = HI_MPI_VO_EnableVideoLayer(VoLayer);
if(s32Ret != HI_SUCCESS)
{printf("Enable video layer failed with errno %#x!\n",s32Ret);return HI_FAILURE;
}
s32Ret = HI_MPI_VO_DisableVideoLayer(VoLayer);
if(s32Ret != HI_SUCCESS)
{printf("Disable video layer failed with errno %#x!\n",s32Tet);return HI_FAILURE;
}
【相关主题】
HI_MPI_VO_GetVideoLayerCompressAttr
HI_MPI_VO_GetVideoLayerCompressAttr
【描述】
获取视频层压缩属性
【语法】
HI_S32 HI_MPI_VO_GetVideoLayerCompressAttr(VO_LAYER VoLayer,VO_COMPRESS_ATTR_S *pstCompressAttr);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoLayer | 视频输出视频层号。 | 输入 |
pstCompressAttr | 视频层压缩属性结构体指针。 | 输出 |
【返回值】
同上
【差异说明】
芯片 | VoLayer取值范围 |
---|---|
Hi3536 | [0,VO_MAX_LAYER_NUM)。 |
Hi3521A | 不支持。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | [0,VO_MAX_LAYER_NUM) |
【需求】
同上
【注意】
· 不调用HI_MPI_VO_EnableVideoLayer和HI_MPI_VO_SetVideoLayerCompressAttr也可获取视频层压缩属性。此时获取的为默认值。
· 建议在设置视频层压缩属性前先调用此接口获取视频层压缩属性。
【举例】
请参见HI_MPI_VO_SetVideoLayerCompressAttr的举例。
【相关主题】
HI_MPI_VO_SetVideoLayerCompressAttr
HI_MPI_VO_SetVideoLayerCompressAttr
【描述】
设置视频层属性。
【语法】
HI_S32 HI_MPI_VO_SetVideoLayerAttr(VO_LAYER VoLayer , const VO_VIDEO_LAYER_ATTR_S *pstLayerAttr);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoLayer | 视频输出视频层号 | 输入 |
pstLayerAttr | 视频层属性结构体指针。 | 输入 |
【返回值】
同上
【差异说明】
芯片 | VoLayer取值范围 |
---|---|
Hi3536 | [0,VO_MAX_LAYER_NUM)。 |
Hi3521A | [0,VO_MAX_LAYER_NUM)。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | [0,VO_MAX_LAYER_NUM)。 |
【需求】
同上
【注意】
· 设置视频层属性必须在视频层禁止的情况下进行。
· 设置视频层属性时,必须保证视频层的绑定关系存在。这主要是针对可以动态绑定的PIP层而言,在对PIP层解除绑定时,意味着PIP层的绑定关系已经不存在了,若此时调用该视频层属性设置接口会出现绑定关系不存在的错误。同时,也需要确保该视频层绑定的设备已经使能。
· 视频层属性的使用说明详见VO_VIDEO_LAYER_ATTR_S章节。
【举例】
请参见HI_MPI_VO_EnableVideoLayer的举例
【相关主题】
HI_MPI_VO_GetVideoLayerAttr
HI_MPI_VO_GetVideoLayerAttr
【描述】
获取视频层属性。
【语法】
HI_S32 HI_MPI_VO_GetVideoLayerAttr(VO_LAYER VoLayer,VO_VIDEO_LAYER_ATTR_S *pstLayerAttr);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoLayer | 视频输出视频层号。 | 输入 |
pstLayerAttr | 视频层属性结构体指针。 | 输出 |
【返回值】
同上
【差异说明】
芯片 | VoLayer取值范围 |
---|---|
Hi3536 | [0,VO_MAX_LAYER_NUM)。 |
Hi3521A | [0,VO_MAX_LAYER_NUM)。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | [0,VO_MAX_LAYER_NUM)。 |
【需求】
同上
【注意】
· 不调用HI_MPI_VO_EnableVideoLayer和HI_MPI_VO_SetVideoLayerAttr也可获取视频层属性。此时获取的为默认值。
· 建议在设置视频层属性前先调用此接口获取视频层属性。
【举例】
请参见HI_MPI_VO_EnableVideoLayer的举例
【相关主题】
HI_MPI_VO_SetVideoLayerAttr
HI_MPI_VO_BindVideoLayer
【描述】
绑定视频层到指定设备。
【语法】
HI_S32 HI_MPI_VO_BindVideoLayer(VO_LAYER VoLayer ,VO_DEV VoDev)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoLayer | 需要绑定的视频层号。 | 输入 |
VoDev | 视频层要绑定的设备号。 | 输入 |
【返回值】
同上
【差异说明】
芯片 | 描述 |
---|---|
Hi3536 | VoLayer只能是PIP层。 VoDev只能是接收动态绑定的设备[0,1] |
Hi3521A | VoLayer只能是PIP层。 VoDev只能是接收动态绑定的设备0。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | VoLayer只能是PIP层。 VoDev只能是接收动态绑定的设备[0,1] |
【需求】
同上
【注意】
· PIP层默认绑定在高清设备DHD0上,如果希望将该层绑定到DHD1上面,则在调用该接口之前先解除与DHD0的绑定。
· 对已经存在的绑定关系,支持重复绑定。
· 不能在视频层使能的情况下,调用该接口设置绑定关系。
【举例】
HI_S32 s32Ret;
VO_DEV VoDeV = 1;
VO_LAYER V0Layer = 2
HI_U32 u32Pri;s32Ret = HI_MPI_VO_UnBindVideoLayer(VoLayer,VoDev);
if(32Ret != HI_SUCCESS)
{printf("Pip video layer unbind to dev 0 failed with ernno %#x!\n",VoDev,s32Ret);return HI_FAILURE;
}s32Ret = HI_MPI_VO_BindVideoLayer(VoLayer,VoDev);
if(s32Ret != HI_SUCCESS)
{printf("Pip video layer bind to dev %d failed with errno %#x!\n",VoDev,s32Ret);return HI_FAILURE;
}s32Ret = HI_MPI_VO_GetVideoLayerPriority(VoLayer,&u32Pri);
if(s32Ret != HI_SUCCESS)
{printf("Pip video layer get the priority failed with errno %#x!\n",VoDev,s32Ret);return HI_FAILURE;
}
【相关主题】
HI_MPI_VO_UnBindVideoLayer
HI_MPI_VO_UnBindVideoLayer
【描述】
将指定视频层从设备上面解除绑定。
【语法】
HI_S32 HI_MPI_VO_UnBindVideoLayer(VO_LAYER VoLayer , VO_DEV VoDev);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoLayer | 需要解除绑定的视频层号。 | 输入 |
VoDev | 视频层要解除绑定的设备号。 | 输入 |
【返回值】
同上
【差异说明】
芯片 | 描述 |
---|---|
Hi3536 | VoLayer只能是PIP层 VoDev只能是接收动态绑定的设备[0,1] |
Hi3521A | VoLayer只能是PIP层。 VoDev只能是接收动态绑定的设备0。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | VoLayer只能是PIP层。 VoDev只能是接收动态绑定的设备[0,1] |
【需求】
同上
【注意】
· 将VoLayer层从设备VoDev解除绑定前必须关闭视频层。
· 重复解绑定返回成功。
· 不强制要求传入的形参VoDev必须是之前VoLayer层绑定的设备号,用户调用此接口就视为解除VoLayer层的绑定关系。
【举例】
请参见HI_MPI_VO_BindVideoLayer的举例
【相关主题】
HI_MPI_VO_BindVideoLayer
HI_MPI_VO_SetVideoLayerPriority
【描述】
设置视频层的优先级。
【语法】
HI_MPI_VO_SetVideoLayerPriority(VO_LAYER VoLayer,HI_U32 u32Priority);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoLayer | 视频输出视频层号。 | 输入 |
u32Priority | 视频层优先级设置等级。 | 输入 |
【返回值】
同上
【差异说明】
芯片 | 描述 |
---|---|
Hi3536 | VoLayer的取值范围:[0,VO_MAX_LAYER_NUM)。 u32Priority的取值范围:[0,VO_MAX_PRIORITY)。 |
Hi3521A | VoLayer的取值范围:[0,VO_MAX_LAYER_NUM)。 u32Priority的取值范围:[0,VO_MAX_PRIORITY)。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | VoLayer的取值范围:[0,VO_MAX_LAYER_NUM)。 u32Priority的取值范围:[0,VO_MAX_PRIORITY)。 |
【需求】
同上
【注意】
· 本接口被调用时,VoLayer视频层必须已经绑定在某个VoDev设备上。
· 每个视频层绑定到设备时,都会被默认给定一个优先级。默认的优先级是按照所有优先级从大到小索引的原则设置的,当找到一个最大的优先级,则会对这个视频层进行默认设置。
· 如果在视频层VoLayer绑定的设备VoDev上,需要设置VoLayer的优先级为u32Priority,但是已经有视频层VoLayer_old配置优先级u32Priority,那么,将优先保障VoLayer的设置,同时将VoLayer的默认优先级赋值给视频层VoLayer_old。例如,视频层PIP和VHD1都绑定在DHD1上面,且他们的优先级分别为1和0。若视频层PIP调用设置优先级接口设置优先级为0,那么此时就会有优先级的冲突,这时,优先设置的配置,将PIP层的优先级设置为0,并将PIP层原始的优先级1赋值为VHD1。· 不支持动态修改优先级,否则会出现低带宽;需要关闭所有绑定到该设备VoDev上的所有视频层才能修改优先级。
【举例】
请参见HI_MPI_VO_BindVideoLayer的举例。
【相关主题】
HI_MPI_VO_GetVideoLayerPriority
HI_MPI_VO_GetVideoLayerPriority
【描述】
获取视频层的优先级。
【语法】
HI_S32 HI_MPI_VO_GetVideoLayerPriority(VO_LAYER VoLayer , HI_U32 *pu32Priority);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoLayer | 视频输出视频层号。 | 输入 |
pu32Priority | 视频层优先级指针。 | 输出 |
【返回值】
同上
【差异说明】
芯片 | 描述 |
---|---|
Hi3536 | VoLayer的取值范围:[0,VO_MAX_LAYER_NUM)。 |
Hi3521A | VoLayer的取值范围:[0,VO_MAX_LAYER_NUM)。 |
Hi3531A/Hi3531DV100/Hi3521Dv100/Hi3536CV100 | VoLayer的取值范围:[0,VO_MAX_LAYER_NUM)。 |
【需求】
同上
【注意】
调用前必须确保该视频层存在绑定关系。
【举例】
请参见HI_MPI_VO_BindVideoLayer的举例。
【相关主题】
HI_MPI_VO_SetVideoLayerPriority
HI_MPI_VO_SetVideoLayerPartitionMode
【描述】
设置视频层的分割模式。
【语法】
HI_S32 HI_MPI_VO_SetVideoLayerPartitionMode(VO_LAYER VoLayer,VO_PART_MODE_E enPartMode);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoLayer | 视频输出视频层号 | 输入 |
enPartMode | 视频层处理的分割模式 | 输入 |
【返回值】
同上
【差异说明】
芯片 | 描述 |
---|---|
Hi3536 | VoLayer的取值范围:[0,VO_MAX_LAYER_NUM)。 |
Hi3521A | VoLayer的取值范围:[0,VO_MAX_LAYER_NUM)。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | VoLayer的取值范围:[0,VO_MAX_LAYER_NUM)。 |
【需求】
· 头文件:mpi_vo.h、hi_comm_vo.h、hi_defines.h
· 库文件:libmpi.a
【注意】
· 调用前必须确保该视频层没有使能。
· 视频层分割模式是指图像在配置硬件显示的时候,按照什么方式配置区域。即对于VO_PART_MODE_MULTI模式,多区域图像按照区域数目在硬件配置同等数目的显示信息。对于VO_PART_MODE_SINGLE模式,不管单区域图像还是多区域图像,在硬件处理的时候,只会按照单个区域的图像进行配置。
· 按照VO_PART_MODE_MULTI模式处理的视频层,能显示的画面个数受硬件限制,参考表4-3硬件支持的通道数;而按照VO_PART_MODE_SINGLE模式处理的视频层,多区域的拼接是由VGS模块实现,能显示的画面个数参考表4-3软件支持的通道数。
· VO_PART_MODE_SINGLE模式下视频层多区域拼接是由VGS模块实现,所以该模式处理下的视频层通道不能接收来自VPSS模块AUTO模式下的系统绑定源的绑定。
· 系统初始化的时候会给每个视频层配置初始的分割模式:VHD和视频层PIP默认为VO_PART_MODE_MULTI;VSD和虚拟设备视频层默认为VO_PART_MODE_SINGLE。
【举例】
无
【相关主题】
HI_MPI_VO_GetVideoLayerPartitionMode
HI_MPI_VO_GetVideoLayerPartitionMode
【描述】
获取视频层的分割模式。
【语法】
HI_S32 HI_MPI_VO_GetVideoLayerPartitionMode(VO_LAYER VoLayer,VO_PART_MODE_E *penPartMode);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoLayer | 视频输出视频层号。 | 输入 |
penPartMode | 视频层分割模式指针。 | 输出 |
【返回值】
同上
【差异说明】
芯片 | 描述 |
---|---|
Hi3536 | VoLayer的取值范围:[0,VO_MAX_LAYER_NUM)。 |
Hi3521A | VoLayer的取值范围:[0,VO_MAX_LAYER_NUM)。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | VoLayer的取值范围:[0,VO_MAX_LAYER_NUM)。 |
【需求】
· 头文件:mpi_vo.h、hi_comm_vo.h
· 库文件:libmpi.a
【注意】
无
【举例】
无
【相关主题】
HI_MPI_VO_SetVideoLayerPartitionMode
HI_MPI_VO_SetVideoLayerCSC
【描述】
设置视频层输出图像效果。
【语法】
HI_S32 HI_MPI_VO_SetVideoLayerCSC(VO_LAYER VoLayer ,const VO_CSC_S *pstVideoCSC);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoLayer | 视频输出视频层号。 | 输入 |
pstDevCSC | 图像输出效果结构体指针。 | 输入 |
【返回值】
同上
【差异说明】
芯片 | 描述 |
---|---|
Hi3536 | VoLayer的取值范围为[0,3]。 u32Luma、u32Contrast、u32Hue、u32Saturation取值范围:[0,100],默认值:50。 enCscMatrix默认值:单位矩阵。 |
Hi3521A | VoLayer的取值范围为[0,2]。 u32Luma、u32Contrast、u32Hue、u32Saturation取值范围:[0,100],默认值:50。 enCscMatrix默认值:单位矩阵。 |
Hi3531A/Hi3531DV10/Hi3521DV100/Hi3536CV100 | VoLayer的取值范围为[0,2]。 u32Luma、u32Contrast、u32Hue、u32Saturation取值范围:[0,100],默认值:50。 enCscMatrix默认值:单位矩阵。 |
【需求】
同上
【注意】
· 该接口主要用于调节图像的输出效果,包括宽度、对比度、色调、饱和度,其取值范围均为[0,100].
· CSC转换矩阵只能选择VO_CSC_MATRIX_IDENTITY、VO_CSC_MATRIX_BT601_TO_BT709或VO_CSC_MATIX_BT709_TO_BT601。
· 禁止视频层时会将亮度、对比度、色调、饱和度的值恢复为默认值,CSC转换矩阵恢复为默认值。
【举例】
无
【相关主题】
HI_MPI_VO_GetVideoLayerCSC
HI_MPI_VO_GetVideoLayerCSC
【描述】
HI_S32 HI_MPI_VO_GetVideoLayerCSC(VO_LAYER VoLayer , VO_CSC_S *pstVideoCSC);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoLayer | 视频输出视频层号。 | 输入 |
pstDevCSC | 图像输出效果结构体指针。 | 输出 |
【返回值】
同上
【差异说明】
芯片 | VoLayer取值范围 |
---|---|
Hi3536 | [0,3] |
Hi3521A | [0,2] |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | [0,3] |
【需求】
同上
【注意】
该接口主要用于获取图像得输出效果,包括亮度、对比度、色调、饱和度,其取值范围均为[0,100].
【举例】
无
【相关主题】
HI_MPI_VO_SetVideoLayerCSC
HI_MPI_VO_SetAttrBegin
【描述】
设置视频层上的通道的设置属性开始。
【语法】
HI_S32 HI_MPI_VO_SetAttrBegin(VO_LAYER VoLayer);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
VoLayer | 视频输出视频层号 | 输入 |
【返回值】
同上
【差异说明】
芯片 | VoLayer取值范围 |
---|---|
Hi3536 | [0,VO_MAX_LAYER_NUM)。 |
Hi3521A | [0,VO_MAX_LAYER_NUM)。 |
Hi3531A/Hi3531DV100/Hi3521DV100/Hi3536CV100 | [0,VO_MAX_LAYER_NUM)。 |
【需求】
同上
【注意】
· BEGIN和END接口要配对使用,否则BEGIN后设置的通道属性不会生效。
· 此接口可对通道的动态操作进行批处理,例如设置通道属性、通道显示、通道隐藏、使能通道、禁止通道、级联区域绑定通道、级联区域解绑定通道等。当VO切换画面大小或显示隐藏时,需要重新准备内存并保存切换的及时性,因此建议的调用顺序为:在BEGIN和END接口之间调用设置通道属性、通道显示、通道隐藏等接口,对设备的多个通道进行批处理操作。
· 批处理中的通道操作都是在HI_MPI_VO_SetAttrEnd接口调用之后生效,建议合理控制BEGIN和END接口的范围。例如希望批处理禁止通道,并禁止视频层。由于禁止视频层的调用必须在禁止通道成功后生效,禁止通道必须在HI_MPI_VO_SetAttrEnd接口调用后生效,因此要按照如下顺序调用HI_MPI_VO_SetAttrBegin、HI_MPI_VO_DisableChn、HI_MPI_VOI_SetAttrEnd和HI_MPI_VO_DisableVideoLayer。如果是按照顺序调用HI_MPI_VO_SetAttrBegin、HI_MPI_VO_DisableChn、HI_MPI_VO_DisableVideoLayer和HI_MPI_VO_SetAttrEnd,将导致禁止视频层失败。
【举例】
HI_S32 s32ret;
HI_U32 i;
VO_DEV VoDev = 0;
VO_LAYER VoLayer = 0;
VO_PUB_ATTR_S VoAttr;
VO_CHN_ATTR_S VoChnAttr[4];memset(&VoAttr,0,sizeof(VO_PUB_ATTR_S));
VoAttr.enIntType = VO_INTF_CVBS;/* CVBS */
VoAttr.enIntSync = VO_OUTPUT_PAL; /* PAL Mode */
VoAttr.u32BgColor = 0x0;/* set public attribute of vo device */
s32ret = HI_MPI_VO_SetPubAttr(VoDev,&VoAttr);
if(HI_SUCCESS != s32ret)
{printf("vo set pub attr failed! \n");return s32ret;
}/* enable vo device */
s32ret = HI_MPI_VO_Enable(VoDev);
if(HI_SUCCESS != s32ret)
{printf("enable vo device failed! \n");return s32ret;
}
/* configure and enable vo Layer 0 *//* configure and enable vo channel
for(i=0; i<4;i++)
{VoChnAttr[i].bDeflicker = HI_FALSE;VoChnAttr[i].u32Priority = 1;VoChnAttr[i].stRect.s32X = 360*(i%2);VoChnAttr[i].stRect.s32Y = 288*(i/2);VoChnAttr[i].stRect.u32Width = 360;VoChnAttr[i].stRect.u32Height = 288;
/* set attribute of vo chn */
s32ret = HI_MPI_VO_SetChnAttr(VoLayer,i,&VoChnAttr[i]);
if(HI_SUCCESS != s32ret)
{printf("vo set dev %d chn %d attr failed! \n",VoLayer,i);return s32ret;
}/* enable vo chn */
s32ret = HI_MPI_VO_EnableChn(VoLayer,i);
if(HI_SUCCESS != s32ret)
{printf("enable vo Layer %d chn %d failed!\n",VoLayer,i);return s32ret;}
}/* do something else */
sleep(20);/* set channel attributes begin */
s32ret = HI_MPI_VO_SetAttrBegin(VoLayer);
if(HI_SUCCESS != s32ret)
{printf("set attributes begin failed!\n");return s32ret;}
/* reset channel attributes* we just show channel 0 and 1 on screen, and scale them as vertical* half D1* /for(i = 0;i < 2; i++)
{VoChnAttr[i].bDeflicker = HI_FALSE;VoChnAttr[i].u32Priority = 1;VoChnAttr[i].s32Rect.s32X = 352*(i%2);VoChnAttr[i].s32Rect.s32Y = 288*(i/2);VoChnAttr[i].stRect.u32Width = 360;VoChnAttr[i].stRect.u32Height = 576;
/* set attribute of vo chn */
s32ret = HI_MPI_VO_SetChnAttr(VoLayer , i , &VoChnAttr[i]);
if(HI_SUCCESS != s32ret)
{printf("vo set chn %d attr failed! \n",i);return s32ret;
}
}/* hide channel 2 and 3* we do this just for saving bandwidth* /for(i = 2; i < 4 ; i++)
{s32ret = HI_MPI_VO_HideChn(VoLayer , i);if(s32ret != HI_SUCCESS){printf("vo hide channel %d failed!\n",i);return HI_FAILURE;}
}/* set channel attributes end */
s32ret = HI_MPI_VO_SetAttrEnd(VoLayer);
if(HI_SUCCESS != s32ret)
{printf("set attributes end failed!\n");return s32ret;
}/* do something else */
sleep(20);/* set channel attributes begin */
s32ret = HI_MPI_VO_SetAttrBegin(VoLayer);
if(HI_SUCCESS != s32ret)
{printf("set attributes begin failed!\n");return s32ret;
}/* reset channel attributes * now we set them back as 4 cif on screen * /for(i = 0; i < 4; i++){VoChnAttr[i].bDeflicker = HI_FALSE;VoChnAttr[i].u32Priority = 1;VoChnAttr[i].stRect.s32X = 360*(i%2);VoChnAttr[i].stRect.s32Y = 288*(i/2);VoChnAttr[i].stRect.u32Width = 360;VoChnAttr[i].stRect.u32Height = 288;/* set attribute of vo chn */s32ret = HI_MPI_VO_SetChnAttr(VoLayer, i , &VoChnAttr[i]);if(HI_SUCCESS != s32ret){printf("vo set chn %d attr failed! \n",i);return s32ret;}
/* show channel 2 and 3 8/for(i = 2; i < 4 ; i++){s32ret = HI_MPI_VO_ShowChn(VoLayer,i);if(s32ret != HI_SUCCESS){printf("vo show channel %d failed!\n",i);return HI_FAILURE;}}/* set channel attributes end */s32ret = HI_MPI_VO_SetAttrEnd(VoLayer);if(HI_SUCCESS != s32ret){printf("set attributes end failed!\n");return s32ret;}
/* do something else */sleep(20);/* disable all channels */for(i = 0; i < 4 ; i++){s32ret = HI_MPI_VO_DisableChn(VoLayer , i);if(HI_SUCCESS != s32ret){printf("vo disable chn %d failed!\n",i);return s32ret;}}}/* disable VoLayer */............./* disable vou */(void)HI_MPI_VO_Disable(VoDev);
【相关主题】
HI_MPI_VO_SetAttrEnd