这几天一直忙于其它事, 学习的时间也就少了!笔记还是得坚持。
看了几天的视频输入和视频输出部分的代码,自已也写了一些自已的DEMO程序,慢慢对这一块有了自已的认识,争取早点将一只脚迈入门内吧。
前几次的笔记大多谈到视频输入的处理, 这次想重点谈谈视频输出的处理。
3520支持三种视频输出设备,HD设备,AD设备,SD设备。
typedef enum hiVO_DEV_E
{
VO_DEV_HD = 0, /* high definition device */
VO_DEV_AD = 1, /* assistant device */
VO_DEV_SD = 2, /* spot device */
VO_DEV_BUTT
} VO_DEV_E;
视频输出模块所做的工作大约就是将视频数据从内存中取出来,送相应的显示设备输出。
接下来准备以我们的产品为例,写写视频输出的处理过程。
机器起动是16画面输出,这点是如何实现的?
1 不同的视频输出设备(HD,AD,SD)的视频输出大小是不一样的, 所以我们必须设置进行VI和VO的绑定处理,16画面输出,要求VI视频通道数据分别与16个通道依次绑定
2视频输出设备图形层的大小,AD设备与SD设备设置图像的大小为D1(PAL为720*576, ntsc为720*480),HD设备根据用户设置的分辨率大小设定.
3因为我们的视频输出的是16个画面,所以要求设置VO通道的属性值,主要是大小和坐标,叠加优先级。
当进行切换画面时又是如何处理的?
主要处理过程和上述基本相同, 但还是有些不一样。
1 首先你必须 Disable VO输出
假设你上一次视频为16画面输出,行,先Disable 16个vo通道。
for(i = 0; i < ibind; i ++)//最大通道数
{
if(iRet = (HI_MPI_VO_DisableChn(VoDev,i)) != 0)
{
DEBUG_INFO(("DisableVideoOutput HI_MPI_VO_DisableChn err (0x%x) vochn=%d /n",iRet, i));
//return -1;
}
}
2 设置VI属性。
当切换到单画面时,设置VI采集数据的大小为D1
/*设置VI通道属性,设置为D1大小显示*/
retvalue = HI_MPI_VI_GetChnAttr(channel/4, channel%4, &stViChnAttr);
FAIL_RETURN(retvalue);
stViChnAttr.stCapRect.u32Width = 704;
stViChnAttr.stCapRect.u32Height = (TS_PAL == system)?288:240;
stViChnAttr.bDownScale = HI_FALSE;
stViChnAttr.enCapSel = VI_CAPSEL_BOTH;
retvalue = HI_MPI_VI_SetChnAttr(channel/4, channel%4, &stViChnAttr);
FAIL_RETURN(retvalue);
当切换到四画面,9画面,16画面,设置VI采集数据的大小为CIF.
/*设置VI通道属性,设置为CIF大小显示*/
retvalue = HI_MPI_VI_GetChnAttr(chn/4, chn%4, &stViChnAttr);
FAIL_RETURN(retvalue);
stViChnAttr.stCapRect.u32Width = 704;
stViChnAttr.stCapRect.u32Height = (TS_PAL==system)?288:240;
stViChnAttr.bDownScale = HI_TRUE;
stViChnAttr.enCapSel = VI_CAPSEL_BOTH;
retvalue = HI_MPI_VI_SetChnAttr(chn/4, chn%4, &stViChnAttr);
FAIL_RETURN(retvalue);