音视频编解码学习笔记(四)--转载

来源:互联网 发布:数据库sql语句增删改查 编辑:程序博客网 时间:2024/06/10 03:17

看了几天的视频输入和视频输出部分的代码,自已也写了一些自已的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);

0 0
原创粉丝点击