音视频解码模块阅读笔记(一)-->转载

来源:互联网 发布:java string转数组 编辑:程序博客网 时间:2024/06/08 08:28

在我们的系统中, 一直觉得音视频解码是较为神秘的模块之一,不理解该模块的工作原理,基本上对整个系统的把握就谈不下掌握了。
 今天是第一次写该阅读笔记,个人重点想要了解和学习的地方是音频和视频是如何输出的。
 最近社会风气不好,去年的曾哥,今天的著姐。越来越看不懂这个社会,哎,著姐,你就干脆点,自宫得了吧。想练自功,必先自宫。
回到整个系统中来,所谓音视频解码,大多数所做的工作便是对海思音视频解码库api的调用。想要完整的解出音视频数据吗,行,老老实
实的调用海思提供的api函数。
  说了半天的白话,/:-)。
  
  
  一, 在进行音视频解码前,首行我们得进行平台初始化工作。
  InitPlatform()
 {
   .......
  }
 该函数主要完成如下工作。
 先清空系统控制信息,视频缓冲区的信息
 HI_MPI_SYS_Exit()
 HI_MPI_VB_Exit()
 
 接下来设置视频缓冲区
 先配置几个视频缓冲区的大小
  stVbConf.astCommPool[0].u32BlkSize = 720 * 576 * 2;/*D1*/
    stVbConf.astCommPool[0].u32BlkCnt  = 10;
    stVbConf.astCommPool[1].u32BlkSize = 704 * 576 * 2;/*D1*/
    stVbConf.astCommPool[1].u32BlkCnt  = 52;
    stVbConf.astCommPool[2].u32BlkSize = 384 * 576 * 2;/*2CIF*/
    stVbConf.astCommPool[2].u32BlkCnt = 64;
    stVbConf.astCommPool[3].u32BlkSize = 384 * 288 * 2;/*CIF*/
    stVbConf.astCommPool[3].u32BlkCnt  = 20;
 
 设置系统中使用图像的字节对齐数,开发文档推荐配置成16 or 64就可以了,此时不是很明白,得去问问罗罗了。
 
 stSysConf.u32AlignWidth = 64;
 HI_MPI_VB_SetConf(&stVbConf)
 视频缓冲区初始化。
 HI_MPI_VB_Init
 
 二, 完成了系统平台的初始化,接下来该进行音视频的输入处理。
 在视频输入处理中有一个概念必要要明确,vi设备端口,hi3520有4个vi设备端口,最大同进支持16ch视频输入,也就是说1个vi设备端口对应4个视频输入设备。
 视频输入的初始化得完成以下几个工作。 
  
   设置vi设备端口的属性 HI_MPI_VI_SetPubAttr
      |
      |
      |
      V
   vi设备使能 HI_MPI_VI_Enable(ViDev) 
       |
       |
   设置vi设备端口接入各个vi通道的属性 
   
   
   
   在hi3520系统中,3520芯片外的数据是通过ITU-R BT656/601/1120 接口或digital camera 接口,存入芯片外的内存区域的,
   当数据接口为ITU-R BT656 时, 一个vi设备能支持多个通道,最多支持4个,我们称之为ViChn0、ViChn1、ViChn2、ViChn3。
   
   1 设置vi设备端口的属性
   
   设置属性接口函数,VI_DEV ViDevId vi输入设备端口。pstPubAttr 设置属性值。
   
   HI_S32 HI_MPI_VI_SetPubAttr(VI_DEV ViDevId,const VI_PUB_ATTR_S *pstPubAttr);

   typedef struct hiVI_PUB_ATTR_S
   {
      VI_INPUT_MODE_E enInputMode;  /* video input mode */
    
      VI_WORK_MODE_E  enWorkMode;   /* work mode(only for ITU-R.BT656) */ 
      VIDEO_NORM_E  enViNorm;    /* video input normal(only for BT.601) */
      HI_BOOL         bIsChromaChn;       /* whethe this device capture chroma data (only for BT.1120) */
      HI_BOOL         bChromaSwap;        /* whethe exchange U/V of chroma channle  (only for BT.1120) */
   } VI_PUB_ATTR_S;
   
   HI_MPI_VI_Enable(ViDev);
   
   2 设置完视频输入设备,接下来该设置视频输入通道。
   一个视频输入设备对应4个通道。
   
   和视频输入设备设置一个样,先设置通道属性
   s32Ret = HI_MPI_VI_SetChnAttr(ViDev, ViChn, pstViChnAttr);
   再接下来使能通道
   s32Ret = HI_MPI_VI_EnableChn(ViDev, ViChn);
    设置通道的每秒的帧数,N制下为30,pal制为25帧。
    s32Ret = HI_MPI_VI_SetSrcFrameRate(ViDev, ViChn, u32SrcFrmRate);

1 0