DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 382|回复: 0
打印 上一主题 下一主题

一种基于DSP平台的快速H.264编码算法的设计

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 14:27:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  视频压缩编码标准H.264/AVC是由ISO/IEC和ITU-T组成的联合视频专家组(JVT)制定的,他引进了一系列先进的视频编码技术,如4×4整数变换、空域内的帧内预测,多参考帧与多种大小块的帧间预测技术等,标准一经推出,就以其高效的压缩性能和友好的网络特性受到业界的广泛推崇。特别是在2004年7月JVT组织做了重要的保真度范围扩展的补充后,更加扩大了标准的应用范围,但同时巨大的运算量却成为其广泛应用的瓶颈。考虑到H.264协议实现的复杂度,本文的思路是:一方面提高硬件处理速度和能力,采用TI公司最新的数字媒体处理器Davinci?TMS320DM6446?DSP芯片作为H.264编码器实现的硬件开发平台,另一方面提高算法效率。最后提出一个基于这个芯片的嵌入式H.264编码器的设计方案。

  1?硬件平台

  1.1?Davinci?DM6446芯片介绍

  DM6446采用DSP+ARM的双内核结构(内核图见图1),其中的DSP芯片的CPU时钟频率可达594?MHz,ARM的引入可以释放DSP在控制方面的部分功能,使DSP专门进行数据处理的工作。芯片采用增强型的哈佛结构总线,其CPU内部有2个数据通道,8个32?b的功能单元,2个通用寄存器组(A和B),可同时执行8条32?b长指令。如果能充分利用这8个功能单元,总字长为256?b的指令包同时分配到8个并行处理单元,在完全流水的情况下,该芯片的指令吞吐量将达到594×8=4?752?MIPS。处理器具有双16?b扩充功能,芯片能在一个周期内完成双16?b的乘法、加减法、比较、移位等操作。该芯片内部支持两级Cache,其中第一级32?kB的程序缓存器L1P,80?kB的数据缓存器L1D,而第二级的Cache大小是可配置的64?kB,芯片自动完成这两级Cache之间数据一致性的维护。有了这两级Cache的支持将使CPU的执行速度大大加快。



?

  Davinci?DM6446具有专用的视频图像处理子系统。视频处理子系统包括1个视频前端和1个视频末端,视频前端的输入接口用于接受外部传感器或视频译码器输出的BT.656等图像输入信息;视频末端输出接口输出图像,实现图像本地重现。

  视频前端输入(VPFE)接口由1个CCD控制器(CCDC),1个预处理器,柱状模块,自动曝光/白平衡/聚焦模块(H3A)和寄存器组成。CCD控制器可以与视频解码器CMOS传感器或电荷耦合装置连接。预处理器是一个实时的图形处理器。

  1.2?H.264编码器硬件平台

  本系统的平台核心处理芯片为Davinci?DM6446,如图2所示,片外RAM选取两片DDR并联成32位的数据宽度,空间为256?MB。模拟视频信号在“VIDEO?IN”引入后经过解码芯片TVP5146变换为数字信号后输入TMS320DM6446芯片中进行处理,H.264编码处理后的码流可以通过视频末端输出保存在本地硬盘上,以方便调试检查。或者可以通过10/100?M以太网物理层接口输出,进行网络传输。同时,本地的重构图像可以通过TMS320DM6446芯片内部OSD模块和编码模块D/A变换后直接显示输出。



?

  2?H.264编码器结构与编码流程

  2.1?H.264编码器结构

  如图3所示输入的图像以宏块为单位进入编码器中,根据图像变化的快慢选择帧内或帧间预测编码。如果选择帧内预测编码,首先判断当前待编码块中是否包含很多的细节,再决定是否要把帧进行再分割。接着以重建帧μF′n中的块为参考,结合当前块周围块的预测模式,选择当前块的最佳预测模式。最后由重建帧μF′n中相应块和当前块选定的预测模式得到当前块的预测值。按照上述方法,对图像中的每一宏块作出帧内预测,进而得到一帧图像的预测值P。如果选择帧间预测编码,当前输入帧Fn和前一帧(参考帧)Fn-1被送到运动估计器(ME),通过块搜索,匹配可以得到当前帧中的各宏块相对于参考帧中对应宏块的偏移量,也就是常说的运动矢量。接着,参考帧Fn-1和刚得到的运动矢量MV被送到运动补偿器(MC),通过计算得到帧间预测值P;当前帧Fn和帧预测值P相减,得到残差Dn,经过变换,量化后产生一组量化后的变换系数X,再经过熵编码,与解码所需的一些边信息(如预测模式量化参数,运动矢量等)一起组成一个压缩后的码流,经NAL(网络自适应层)供传输和存储。?



?

  2.2?编码器编码流程

  如图4所示为H.264编码器主流程。对输入的一帧图像首先进行单元划分:以宏块为基本单元进行划分,再由若干宏块在组合成Slice,由Slice再组合成Slice?Group,这样每个宏块所属的Slice和Slice?Group也就确定了。再判断输入的一帧图像是I-Frame还是P-Frame。在以上工作完成后,也就可以对每个宏块进行编码了。在对每个宏块都编码完成后,还需要对重构图像进行1/4象素精度插值处理、参考帧缓冲区插入处理等工作。至此,编码一帧的工作才算完成。




  3?运动估计模式快速率失真决策

  为了减少图像序列的时间冗余,达到更好压缩效果的目的,H.264/AVC编码方案采用运动补偿技术和预测。即由先前已编码的一个或多个帧产生当前编码帧的一种预测模式,然后再进行预测编码。且采用了一种可变块尺寸的运动预测模式,亮度块尺寸的范围从16×16变化到4×4,其中包含很多可选模式,形成了一种树形结构的运动预测。对于I帧(包含帧内4×4、帧内16×16),对P帧(包含帧内4×4、帧内16×16、SKIP模式、帧间16×16、帧间16×8、帧间8×16、帧间8×8、帧间8×4、帧间4×8)同时还为P帧和B帧提供了特殊的SKIP模式,总共11种模式。这些可选模式的存在使得编码方式更加灵活,编码精度相对于固定尺寸块预测要高很多。然而,可选的帧问预测模式增加了,必然会使得运算复杂度增加,因此有必要采用一种高效的决策方法来选取块尺寸组合方式,使得编码效率和编码质量均佳。

  3.1?拉各朗日代价函数

  引入拉各朗日代价函数如下:


?


  其中D表示重构恢复图像相对于原始图像间的失真;R(si,m)表示对宏块编码后数据及相关参数在码流中所占用的比特数,一般由编码统计得到,但对于SKIP模式,比特数默认为1比特;λ表示模式选择时所使用的拉各朗日乘积因子。
  对于运动估计,可使用拉各朗日代价函数作为选择运动矢量的判决标准。根据式(1)得到对一个采样块si进行ME判决的代价函数为下:
?


  该式返回产生最小代价值的最佳匹配运动矢量mi,其中M指各种可能编码模式的集合,m为当前选定模式,式(2)中R(si,m)是运动矢量(mx,my)所要传输(按熵编码)的比特数。D(si,m)表示对图像宏块的预测误差,对于该预测误差的计算有两种方案:当预测误差选择是绝对误差时用(SAD)表示,如式(3);当预测误差选择是平方差时,则用SSD表示,如式(4)中:
?


  其中A为当前编码宏块。在使用多参考帧进行运动估计时,mi表示所选用的最佳参考帧。在进行运动搜索时,对块si先是进行整象素精度的运动搜索,以取式(1)最小值为匹配标准,得到整象素精度最佳匹配点后,以同样的方法进行1/2,1/4象素精度的匹配搜索。同时在多个参考帧内作同样的操作,将所得的函数代价进行比较得到最小值,也就找到了s,块的最佳匹配的运动矢量mi。
  3.2?快速预测模式判断算法

  快速算法相对于拉各朗日代价函数算法,可分以下两步实现:

  (1)以基于预测模式的方式计算代价函数J,但是这里采用简化的计算方法,对每一种采样模式进行分行交错隔点采样,如对8×8块内象素进行下采样,采样如图5所示。


?


  然后对采样点计算SAD,记做SADi。仅对采样点计算的拉各朗日代价函数如下:
  J=[SAD(si,m)+λ?R(si,m)]
  先对上述各种模式分别计算代价函数J,然后选择代价最小的3种模式构成候选模式集。
  (2)对步骤(1)所得到的候选模式集中每个模式,按照式(1),通过计算基于率失真的代价来实现基于RDO的模式选择,也即C值最小的模式作为最终预测模式。
  4?测试结果与结论

  目前,基于DM6446平台上设计的以上H.264编码器系统己基本完成,我们选择了几个常见的视频对该编码器进行了性能测试,测试数据如表1所示。数据表明本H.264编码器能够正常工作,且表现出较好的压缩性能。当然该编码器只实现了H.264协议的基本档次的部分,而且尚未进行更专门的优化过程,而协议的其他部分,由于其复杂性,则需要进行进一步研究,沿着这个方向,视频还可以进一步压缩。




                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-16 18:33 , 耗时 0.082939 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表