(转)音视频解码模块阅读

一,在进行音视频解码前,进行平台初始化工作:
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 BT.601) */
VIDEO_NORM_E enViNorm; /* video input normal(only for BT.601) */
HI_BOOL bIsChromaChn; /* whether this device capture chroma data(only for BT.1120) */
HI_BOOL bChromaSwap; /* whether exchange U/V of chroma channel(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);

整体上把握一下视频解码的流程,至少也得知道数据是如何采集的
STEP1:模拟信号的采集
模拟信号通过2866芯片采集,转换为数字信号。2866芯片是标准的AD,DA数据转换芯片。在我们的系统中主要实现模拟信号转数字信号输入,数字信号转模拟信号的输出。
2866最大可以同时采集4CH视频信号。
STEP2:模数转换
2866采集的4CH视频信号(模拟)转换为1CH数字信号送3520芯片。对于像本人这样的新手来说,此处可能会有点理解困难,为什么4CH模拟信号

输入2866转换输出的仅仅只是1CH数字信号。这就涉及到点点数电的知识了,数字信号简单讲就是高低电平,高电平代表1,低电平代表0,如何在1CH数字信号

里包括4路VI视频呢?假设下图是2866送出的视频数字信号一个时钟周期内的波形图,

-_--_-_--__---_--_-_--__---_--_-_--__----_--_-_--__----_--_-_--__-----_-

周期的前四个信号 -_-- 第一个信号值为VI1的视频信号,第二信号值为VI2的视频信号,第三个信号值得为VI3的视频信号,第四个信号值得为VI4的视频信号。
STEP3:2866输出视频数据到3520
此时引入一个概念,VI设备,什么是VI设备,对于3520来说,上一步2866采集的4CH模拟信号转换后的一路视频信号就是1个VI设备,该VI设备同时处理包括4路视频数据。
海思的VI模块所做的主要工作就是处理VI设备的4CH视频数据,将视频数据放入内存区域。至于以后这些内存数据是用于视频输出,还是视频编码,就另当别论了。

参考:

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

http://blog.csdn.net/u012236632/article/details/43015233

时间: 2024-10-09 03:23:31

(转)音视频解码模块阅读的相关文章

转:?Android IOS WebRTC 音视频开发总结 (系列文章集合)

随笔分类 - webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn). callstats是一家做实时通讯性能测阅读全文 posted @ 2016-07-22 08:24

ijkplayer阅读笔记02-创建音视频读取,解码,播放线程

本节主要介绍音视频读取和解码线程的创建及启动,代码流程例如以下: IjkMediaPlayer_prepareAsync{ ijkmp_prepare_async_l{ ijkmp_change_state_l(mp, MP_STATE_ASYNC_PREPARING); msg_queue_start(&mp->ffplayer->msg_queue); SDL_CreateThreadEx(&mp->_msg_thread, mp->msg_loop, mp,

各种音视频编解码学习详解

各种音视频编解码学习详解 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等.最近因为项目的关系,需要理清媒体的codec,比较搞的是,在豆丁网上看运营商的规范 标准,同一运营商同样的业务在不同文档中不同的要求,而且有些要求就我看来应当是历史的延续,也就是现在已经很少采用了.所以豆丁上看不出所以然,从 wiki上查.中文的wiki信息量有限,很短,而wiki的英文内容内多,删减版

Windows Media Foundation 音视频采集 小记

写在前面 我是个讲文明的人…… 不过有的时候实在忍不住了也要吐槽几句: 1. 我真是跟不上时代,到现在了还在研究 Windows 应用开发…… 咳: 2. DirectShow 是傻X!我只是想要获取 Camera 裸数据,尼玛却要让我学习神马各种 .ax, filter, graph... 相关资料少.又晦涩: 3. 在此祝愿 Windows XP 及其之前的版本早点退出历史舞台,这样 DirectShow 就不是必须的了! 音视频采集 Windows 7 以后, Media Foundati

ffmpeg 如何音视频同步

转自:http://blog.csdn.net/yangzhiloveyou/article/details/8832516 output_example.c 中AV同步的代码如下(我的代码有些修改),这个实现相当简单,不过挺说明问题. 音视频同步方法:选择一个参考时钟,参考时钟上的时间是线性递增的,生成数据流时依据参考时钟上的时间给每个数据块 都打上时间戳(一般包括开始时间和结束时间).在播放时,读取数据块上的时间戳,同时参考当前参考时钟上的时间来安 排播放.数据流不会发生参考关系. 步骤:1

Android IOS WebRTC 音视频开发总结(四九)-- ffmpeg介绍

本文主要介绍ffmpeg,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,个人微信公众号blacker,更多详见www.rtc.help 说明: ps1:如果直接从webrtc开始学习音视频,你可能没听过ffmpeg,也不需要用到,但随着个人能力提升,你会发现这套东西确实很有用. 就我目前接触到的音视频企业,还没有碰到过没用过ffmpeg的(视频厂商都会对用户上传的视频文件做转码,因为他们的客户端在播放的时候需要根据不同客户端的网络带宽适配不同分辨率,或做些自定义开发),由此可

ffplay(2.0.1)中的音视频同步

最近在看ffmpeg相关的一些东西,以及一些播放器相关资料和代码. 然后对于ffmpeg-2.0.1版本下的ffplay进行了大概的代码阅读,其中这里把里面的音视频同步,按个人的理解,暂时在这里作个笔记. 在ffplay2.0.1版本里面,视频的刷新不再直接使用SDL里面的定时器了,而是在主的循环中event_loop中,通过调用函数refresh_loop_wait_event来等待事件, 同时在这个refresh_loop_wait_event函数里面,通过使用休眠函数av_usleep 来

Android音视频点/直播模块开发实践总结-zz

随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能.那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,以及如何技术选型,如何解决遇到的坑. 一. 音视频的基础知识 1.1 基本概念 视频是什么 静止的画面叫图像(picture).连续的图像变化每秒超过24帧(frame)画面以上时,根椐视觉暂留原理,人眼无法辨别每付单独的静态画面,看上去是平滑连续的视觉效果.这样的连续画面叫视频.当连续图像变化每秒低于

Android WebRTC 音视频开发总结

www.cnblogs.com/lingyunhu/p/3621057.html 前面介绍了WebRTCDemo的基本结构,本节主要介绍WebRTC音视频服务端的处理,,转载请说明出处(博客园RTC.Blacker). 通过前面的例子我们知道运行WebRTCDemo即可看到P2P的效果,实际应用中我们不可能让用户自己去里面设置对方的IP和音视频端口, 而且即使设置了对方的IP和端口也不一定能运行起来,因为P2P如果双方不在同一个网段则还需穿透NAT,那服务端具体该如何部署呢? 1.信令服务: 想