目录

音视频解码模块阅读笔记一

目录

音视频解码模块阅读笔记(一)

在我们的系统中, 一直觉得音视频解码是较为神秘的模块之一,不理解该模块的工作原理,基本上对整个系统的把握就谈不下掌握了。

今天是第一次写该阅读笔记,个人重点想要了解和学习的地方是音频和视频是如何输出的。

最近社会风气不好,去年的曾哥,今天的著姐。越来越看不懂这个社会,哎,著姐,你就干脆点,自宫得了吧。想练自功,必先自宫。

回到整个系统中来,所谓音视频解码,大多数所做的工作便是对海思音视频解码库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);

今天就写到这里了吧, 下次继续。