H.264高清编码器

2024-09-22

H.264高清编码器(精选7篇)

H.264高清编码器 篇1

1 引言

H.264作为新一代的视频压缩标准,编码性能远优于以往的任何标准。在同等画质下,H.264比MPEG-2平均节约64%的传输码流,比MPEG-4平均节约39%的传输码流[1]。但是由于H.264编码过程较为复杂,基于这一标准的实时编解码技术面临着巨大的挑战,特别是高分辨力视频更是很难做到实时处理,因此如何提高H.264编码的实时性是目前国内外学者研究的热点。

DSP芯片具有易扩展和可继承性,针对特殊应用更改也较为方便,已经被广泛应用在各种图像处理领域,在视频压缩上也得到了广泛使用。由于高清实时视频处理计算的复杂性,多处理器架构的系统被越来越多的采用。目前应用较为广泛的是FPGA+DSP框架的嵌入式系统结构,基于这种结构的视频压缩具有较强的处理能力,但是对开发人员有较高要求,开发人员需同时具有较高的DSP和FPGA的技能,开发周期相对较长。针对以上问题,本文提出了一种使用2片DSP来实现H.264高清实时视频压缩的方案。

在DSP芯片选型上,本文采用了具有C64x+内核的TMS320C6455[2],不仅具备了C64内核的优势,同时由于结构上的改进,提高了处理能力,特别是对流媒体数据的处理能力有了很大的提高,且TMS320C6455内嵌的SRIO总线接口具有较高的数据传输速度,支持点对点的数据通信,使多DSP系统互联通信结构具有了高效的性能[3]。

2 H.264简介

H.264编码算法总体上分为网络适配层(Network Abstraction Layer,NAL)和视频编码层(Video Coding Layer,VCL)。NAL主要是实现在不同网络应用中的数据打包。VCL是视频处理的核心,完成对有效视频数据的描述,其结构框图[4]如图1所示。

尽管H.264和其他视频压缩标准的主要结构相似,但是由于它使用了许多特殊的数据处理方法,编码效率有很大提高,主要体现在帧内预测、帧间预测、熵编码、整数变换、量化和扫描几个方面[5]。

3 H.264压缩编码在双DSP中的实现

使用双处理器进行数据处理的关键是任务分配,任务分配需充分考虑各处理器及图像数据自身的特点,最佳的任务分配是各处理器的运算量相当,且处理器之间的通信数据量最小。常用的方法有两种:方法一,将待处理的数据平均分配到各处理器处理;方法二,将程序按不同处理模块分配到不同处理器。

在实现H.264视频压缩时,方法一在分配时较为简单,但压缩前数据分成两路会导致计算过程中数据间的关联性被忽略,从而影响压缩性能;而且若在各自的压缩过程中使用了不同的压缩参数也会导致解码拼接时边界不连续。而采用模块分割的方法二充分利用了图像本身的特性进行任务分配,则不会出现上述现象。本文选择方法二进行任务分配。

整个实现过程分为压缩程序在单DSP上的移植优化、双DSP通信接口的初始化、压缩程序在双DSP中的分配和双DSP间的协调性。为保证实时性,本文处理的帧类型只选用了I帧和P帧。

3.1 H.264视频压缩程序在单个DSP上进行移植优化

按照耗时相当的原则直接对原程序进行分割后优化,由于分割后两部分的优化效率不同导致2片DSP上的耗时不同,从而影响整体效率,甚至导致分割失败,因此须要首先在单个DSP上进行优化,再将优化后的程序在2个DSP之间进行分割。

优化主要分为算法级、系统级和语言级优化。算法级优化通过对算法的改进,比如编码全零块预测[6,7],编码模式判断[8]等来实现。系统级优化主要优化程序对DSP存储器[9]的使用。语言级优化是通过使用线性汇编[10]或汇编语言改写部分耗时语句达到提高程序执行速度的目的。很多学者多对优化做了系统的研究[11,12],本文不详细讨论。

3.2 双DSP通信接口初始化

笔者采用SRIO口完成两DSP芯片间的数据通信。SRIO具有速度快、传输灵活的特性,适合片级间的通信。TMS320C6455 DSP内嵌了SRIO模块,拥有4个全双工的端口(port),支持SRIO 1x/4x串行协议,每个port支持1.25 Gbit/s,2.5 Gbit/s,3.125 Gbit/s的比特率,单个port可以单独构成1x模式,也可以4个port共同构成4x模式[9]。SRIO口初始化配置主要包括速度配置、差分信号摆幅配置、本地ID、1x/4x模式选择,分别通过相应的寄存器来设置。本文配置速度为3.125 Gbit/s,为便于灵活传输,选择1x模式,完成配置后,SRIO口即可进行通信。

SRIO会话是基于请求和响应包的,传输时主设备端首先生成一个请求包,然后将请求包传输到目标设备,当目标设备接收到以后发出相应的响应包。SRIO支持多种通信模式,由于2个DSP端地址分配互相可见,故选择Direct IO模式。这种模式主端使用EDMA完成目的端读写,并不干涉目地端的操作。配置这种模式进行发送接收时,更改LSU_Regn寄存器[3]即可。

3.3 压缩程序在双DSP中的分配

完成以上两步后,即可进行程序的分割。图2是本文所采用的分割方法。由于编码过程中P帧的个数远大于I帧的个数,故测试时间以P帧为主。根据反复测试发现,完成运动估计和运动补偿模块所耗费的时间之和与整数变换、量化、反变换、反量化和熵编码模块所耗费的时间之和相当,因此将运动估计和运动补偿模块放于DSP0中,整数变换、量化、反变换、反量化和熵编码模块放置于DSP1中进行处理,从而使双DSP的处理任务在时间上相当,利于两者并行效率的最大化。

源视频流(YUV 4∶2∶0)由外部采集模块送入DSP0。若当前帧是I帧,则在DSP0中进行帧内模式选择、变换、量化,将结果通过SRIO口传输到DSP1中做熵编码生成H.264的码流;若当前帧是P帧,在DSP0中进行运动估计和运动补偿求得最佳预测宏块和运动矢量,并将预测宏块和当前宏块做差求得残差,将残差和运动矢量通过SRIO口传输到DSP1中实现对残差的整数变换、量化和熵编码操作,最终生成H.264的码流。在DSP1中生成的当前帧的重构帧要作为下一帧的参考帧,因此还需将重构宏块通过SRIO口传回到DSP0中。

3.4 双DSP程序协调方法

2个DSP之间的程序协调至关重要,若协调不当将直接影响2个处理器的并行处理能力,从而影响处理的速度。双DSP程序协调困难主要有以下原因:

1)双向数据等待

从图2中可以看出重构帧必须在下一帧编码前传回到DSP0,残差及运动矢量需在DSP1开始编码当前宏块前由DSP0传递来,即DSP1与DSP0之间需互相等待彼此的数据,且数据必须在一定的时间内传递到特定的位置。这种限时双向数据传输不同于数据只是单向传递的静态视频压缩方法,比如JPEG,JPEG2000。

2)高效数据传输

为满足实时性的要求,双DSP通过SRIO口交互数据的耗时需非常小,协调标志的传输次数也要尽量少,且由于SRIO接口规定每次传输数据包的大小不超过256 byte,因此如何高效地使用SRIO口对本文的方案也具有至关重要的意义。

针对以上两个问题,笔者提出了一种双DSP协调处理的方法,其中编码P帧时的协调流程图如图3所示,分4步实现:

1)DSP0通过SRIO口读取DSP1是否准备好的状态标志,如果状态标志为0,则重复读取,状态标志存放于DSP1内部RAM的固定地址内。

2)在确定DSP1已经准备好后,DSP0连续处理10个宏块的运动估计、运动补偿,将相应的结果传输到DSP1,并发送SRIO的门铃信号到DSP1,表示DSP1编码所需10个宏块的相关数据已经发送完毕。

3)DSP1收到门铃信号后会启动相应的中断服务程序,在中断服务程序中清除中断标志并发送旗语信号量到编码任务,以启动DSP1的编码程序执行变换量化熵编码等处理。

4)DSP1连续处理了10个宏块后,重新等待DSP0的门铃中断。DSP0端在发送完门铃信号后,继续编码后面10个宏块,此时DSP1则开始处理由DSP0处理后的前10个宏块的数据,从而实现了DSP0和DSP1的并行处理。

对于I帧,由于编码时不需要运动估计和运动补偿,只需把图3中的运动估计和运动补偿替换为帧内预测即可。

由于SRIO口数目有限,需排列数据的传输流水线以减少SRIO口数据传输的等待。DSP1中得到的重建宏块存放在内部RAM中,DSP0在编码的间隙中调用SRIO读取。每隔10个宏块进行同步是充分考虑了DSP的内部存储空间和SRIO口的通信速度而选取的。

4 测试方法及结果

硬件实现时,首先通过采集模块将高清720p、YUV格式的源视频数据传到DSP0中,然后按照上述的双DSP分割方法进行H.264视频编码,编码后的结果由DSP1的网络传送到PC机上进行解码显示。结果显示,整个系统可以流畅的实现H.264的实时编解码。在2个DSP上分别测试编码耗时,如表1所示,结果显示每个DSP运算的时间相当,完成整个编码运算的时间在40 ms内,从而实现了H.264高清720p、25 f/s(帧/秒)的视频压缩编码。

5 小结

本文设计并实现了利用双DSP处理器进行H.264高清实时视频压缩的方案,解决了H.264在双DSP实现过程中DSP间的数据传输、任务分割及协调性问题。该方案充分利用了DSP芯片的特点,按照耗时相当、通信数据量少、协调次数少的原则,结合H.264编码流程将不同模块分配到2个DSP中执行,充分发挥了DSP的并行性能,满足了对高清视频实时处理的需求。

摘要:针对H.264标准的高清视频编码在实现时对硬件有较高要求,提出了一种使用双DSP处理的方案。针对双DSP执行时的并行性、协调性及通信的问题进行了详细讨论,提出了相应的解决方法。DSP芯片选用TI的TMS320C6455,双DSP间的数据通信采用串行RapidIO(SRIO)接口。实验结果表明,该方案对高清720p的处理时间在40ms以内,满足了对高清视频的实时处理要求。

关键词:H.264,高清视频压缩,双DSP,视频编码

参考文献

[1]Joint Video Team(JVT)of ISO/IEC MPEG&ITU-T VCE.Study of final committee draft of joint video specification final committee draft[S].2002.

[2]TexasInstrumentsInc.TMS320C6455fixed-pointdigitalsignalprocessor[EB/OL].[2009-11-25].http://www.dinigroup.com/product/data/DNDSP_40G/files/tms320c6455_data_sheet_rev_I.pdf.

[3]Texas Instruments Inc.TMS320C645x DSP serial rapid IO(SRIO)user′s guide[EB/OL].[2009-11-25].http://focus.ti.com.cn/cn/lit/ug/spru976c/spru976c.pdf.

[4]WIEGAND T,SULLIVAN G J.Overview of the H.264/AVC video coding standard[J].IEEE Trans.Circuits and Systems for Video Technology,2003,13(7):560-576.

[5]余兆明,查日勇,黄磊,等.图像编码标准H.264技术[M].北京:人民邮电出版社,2006.

[6]MOON Y H,KIM G Y,KIM J H.An improved early detection algorithmfor all-zero blocks in H.264video encoding[J].IEEE Trans.Circuits and Systems for Video Technology,2005,15(8):1053-1057.

[7]SU C Y.An enhanced detection algorithm for all-zero blocks in H.264video coding[J].IEEE Trans.Consumer Electronics,2006,52(5):596-605.

[8]沈礼权.高效视频编码的算法优化及其扩展研究[D].上海:上海大学,2008.

[9]Texas Instruments Inc.TMS320C64x+DSP cache user′s guide[EB/OL].[2009-11-25].http://focus.ti.com.cn/cn/lit/ug/spru862b/spru862b.pdf.

[10]Texas Instruments Inc.TMS320C64x/C64x+DSP CPU and Instruction Set Reference Guide[EB/OL].[2009-11-25].http://www.mendeley.com/research/tms320c64xc64x-dsp-cpu-and-instruction-set reference-guide/.

[11]王强,卓力,沈兰荪.基于DSP平台的H.264编码器的优化与实现[J].电子与信息学报,2007,29(12):2970-2973.

[12]李小红,蒋建国,齐美彬,等.基于DSP的H.264关键模块技术的研究及实现[J].仪器仪表学报,2006,27(10):1330-1331.

H.264高清编码器 篇2

视频运用越来越广泛, 众多应用对图像的质量, 大小, 流畅性, 实时性也提出了更高的要求。由ITU-T与ISO/IEC联合制定的H.264/MPEG-4 Part10标准压缩效率比H.263、MPEG-4等提高了50%, 也具有广泛适应性, 但同时它的计算复杂度也成倍的提高。H.264压缩性能的获得主要依靠帧间预测编码, 这一编码方式中运动估计计算量庞大。要减少这种庞大的计算量占据的时间, 较为现实的方案是采用快速算法及用硬件来实现。本文的重点是在硬件实现的编码器中高效的为帧间预测模块准备数据。

(二) H.264编码器硬件架构

图1是编码器的硬件架构图, 本文的设计属于其中帧间预测编码部分。编码器的帧内编码和帧间编码并行进行。帧内编码方式是去除一帧图像内相邻元素的空间相关性达到压缩的目的。帧间编码方式能达到很好的压缩效果, 是因为通常相邻帧图像存在非常大的相关性, 通过去除这种相关性, 能极大的减少编码的码流。本编码器为流程即一般H264编码器原理所经历的步骤, 为编码帧中每个宏块 (Mb) 具体选择相应的参考区域, 通过整像素搜索和分像素搜索的预测过程, 得到最佳的相同尺寸参考块, 然后进行差值, 再进行变化编码、量化、重排序后再进行熵编码。

(三) SRAM的规划ME_control的设计

原始帧YUV和参考帧YUV数据量庞大, 而DDR具有比较大的存储量, 读取地址连续的批量数据速度快、成本低的特点, 所以编码器芯片就采用DDR存储原始帧和参考帧的YUV数据。根据本编码器的算法, 运动搜索区域只是一帧图像中某一个位置的上下左右相邻的区域, 且每次搜索是上下左右各运动一个像素进行比较。直接从DDR获取数据是极不合适的, 因为DDR的客户很多, 且从DDR中读取一个小区域中上下左右一行或一列像素数据overhead过重。另一方面, SRAM具有访问速度快, 功耗低等特点, 因此利用SRAM临时存放编码一个宏块需要的所有数据及编码过程中用到的运动矢量。为支持最大分辨率1920x1080的实时编码, 就要满足耗时最长的IME部分执行前后Mb的搜索任务之间不必等待, 编码器整像素搜索 (IME模块) 和分像素搜索 (FME模块) 必须分成两级流水线并行工作。因此需要合理规划SRAM同时供IME使用和FME使用, 另外还需要控制模块 (即ME_control模块) 完成SRAM的更新, 协调IME和FME对SRAM的使用, 并以最快的速度从SRAM中取出正确的数据提供给两者使用, 这正是本论文的设计要解决的问题。

1. ME_control和IME, FME及DDR之间的交互

编码器芯片在Xlinx公司的Vertex4系列的FPGA平台上进行验证, 如果要达到1920x1080的实时编码, 以166MHz的时钟频率, 编码一个宏块最多只能耗时:

个时钟。IME的搜索过程有自己的快速搜索算法, 大概需要800个时钟;FME以最佳整像素为起点, 以block (Luma为4x4, Chroma为2x2) 为单位进行分像素插值, 然后进行分像素搜索, 需要500个时钟。采用IME和FME的并行结构, 能满足实时编码要求。

本设计方案采用两套SRAM (下个小节论述) , 分别供IME搜索宏块Mbx和FME搜索Mbx-1之用, FME用完的SRAM被更新为IME搜索Mbx+1所需要的数据, IME用完的SRAM给FME继续使用, 形成ping-pong的形式。FME搜索一个宏块的时间远小于IME, 这正好给了ME_control时间, 来更新FME使用完的那套SRAM, 为IME准备搜索宏块Mbx+1所需要的数据。

关于参考区域的算法方案是, 每个Mb都根据已编码的相邻宏块的Mv计算得到一个MVmb, ME_control跟据当前宏块的坐标以及MVmb计算参考帧中对应的Mb位置, 以它为中心的上下左右Luma3x3Mb或Chroma3x3Mb即为参考区域。ME_control计算参考区域中每个Mb数据在DDR中的地址, 向DDR请求读取数据。同一个Mb数据在DDR中存放在相邻的位置, ME_control将连续接收的数据分批写入到SRAM中。即使间隔一个Mb的前后Mb之间, 参考区域通常都有重叠区域, 所以ME_control不需要每次更新SRAM中Luma3x3Mb和Chroma3x3Mb的所有数据, 用新的参考Mb的数据覆盖不需要的Mb的数据即可。

在IME的编码过程中需要读取参考数据时, 向ME_control传递数据在Luma3x3Mb中的位置, 并区别是一行数据还是一列数据, ME_control计算SRAM中的实际地址并将数据取出传递给IME。FME是block为单位取数据的, 它只传递数据在参考区域的位置, ME_control计算在SRAM中的实际地址后, 扩展为一个block进行分像素插值需要用到的整个像素区域一次传给FME。

2. SRAM存储器设计

编码器的设计方案IME和FME并行工作, 它们需要的参考区域数据必须分开存储。本设计在DDR和IME, FME之间用两套SRAM分别存储它们所需要的参考区域的数据。进行运动搜索的时候, 大尺寸分割都用相应的Mvp作为搜索起点, 每个宏块都要用到左边, 左上方, 上方和右上方Mb中某些block的Mv, 所以需要存储一行中每个Mb对应的5个block的Mv。编码器芯片支持的最大分辨率是1920x1080, 所以最大要能存储120个宏块需要的block的Mv。

两套SRAM每套都包括3片位宽为384位的SRAM0, SRAM1, SRAM2, 见图2, 每片由3片128位的SRAM组成。SRAM0和SRAM1分别存放正常顺序和转置的Luma3x3Mb, SRAM1能实现一个时钟取出正常顺序的一列像素数据。此外SRAM0中存放一行宏块中奇数或偶数宏块需要的block的Mv, 两套SRAM的SRAM0共同存放总的一行宏块所需的block的Mv。SRAM2中存原始的Chroma数据和参考区域的Chroma3x3Mb数据。

3. 搜索区域中心宏块位置的替代算法

要提前准备参考区域的数据, 就要提前计算每个Mb对应的MVmb。MVmb的算法类似于16x16分割的Mvp的计算, 需要用到相邻block A, B, C, D的Mv, 图3是各个block相对于Mb的位置。当前宏块搜索未完成之前, 无法知道相对于下一个Mb位置block A的Mv。本设计采用的算法是IME做完当前Mb的16x16分割的运动搜索后得到最佳整像素点Mv, 作为相对于下一Mb的block A的Mv, 能取得较好的替代效果。block A和B, C, D一起借用16x16分割Mvp的计算方法计算下一Mb的搜索区域中心宏块的位置。图4对比了采用替代算法的前后编码性能, 主要参数设置:

(1) 编码帧数:5帧;

(2) 帧率:25帧/秒;

(3) 编码模式:IPPP;

(4) 参考帧:1帧

(四) 小节

本文设计方案采用合理规划的两套SRAM作为编码器预测模块和DDR之间的缓冲, 分别和整像素搜索IME模块及分像素搜索FME模块单独交互传递数据, 保证IME和FME的独立性;协调IME和FME对SRAM的使用, 并快速地从SRAM中为它们获取参考数据;使用替代算法, 能提前计算编码Mb的参考区域位置并提前准备参考区域数据, 使得关键路径上除了IME之外不再引入其他的延迟, 能满足实时编码的要求。

参考文献

[1]Wiegand T., Sullivan G., Bjφntegaard G., et al.Overview of the H.264/AVC video coding standard[J].IEEE Transactions on Circuits and Systems for Video Technology, 2003, 13 (7) :560-576.

[2]Iain E.G.Richardson.H.264 and MPEG-4 Video Compression:Video Coding for Next Generation Multimedia.U.S:Wiley Press, 2003.

H.264高清编码器 篇3

近年来,随着H.264和AVS等先进视频压缩编码标准的不断推广应用,高清度视频正在快速进入到人们的日常生活中,数字电视机顶盒、数码产品和音视频编解码系统等一系列视频设备正面临着从标清到高清的全面升级换代。复合视频信号(CVBS)、S端子、分量信号和DVI等早期采用的音视频接口,由于存在传输速率低、信号容易损失、接线太多和不支持数字内容等问题,正逐渐被新一代数字音视频接口所替代。

HDMI(高清晰度多媒体接口)是由飞利浦、索尼和Silicon Image等7家公司联合制定的专用于传输数字视频/音频的新标准。它通过一根连接线,即可同时传输未经压缩的高清视频信号和数字伴音信号,并可支持数字内容保护(HDCP)功能和RGB 4 ∶4 ∶4、YCbCr 4 ∶4 ∶4、YCbCr 4 ∶2 ∶2等视频格式[1]。HDMI 1.3v规范是当前大多数HDMI芯片采用的设计版本,支持高达340 MHz的像素时钟和10.2 Gbit/s的数据传输速率[2]。因此,HDMI接口在高清数字视频领域具有广泛的应用前景。本文将结合HDMI专用接收端芯片,分析HDMI的工作原理和技术特性,并给出其在H.264高清视频实时编码系统中的应用方案。

1 HDMI技术特性

1.1 HDMI规范

完整的HDMI系统包括发送器、中继器和接收器等3部分,而通常的应用系统没有中继部分。HDMI采用最小差分变换信号(TMDS)传输数据,其原理是通过特殊算法将通道上的8 bit数据变换成10 bit的直流平衡编码信号,以消弱传输电缆中的交叉电磁干扰(EMI)和提高长距离传输时的抖动误差容限。HDMI的传输结构如图1所示,它包含3个通道的数据TDMS链路和1个通道的时钟TMDS链路,每个数据通道在每个时钟周期内传输10 bit数据。

HDMI发送器根据信号类型的不同可分为视频信号、数据岛和控制信号3种传输周期。在视频信号周期内传送24 bit视频信号,每通道8 bit串行数据经DC平衡后变成10 bit。对于低于25 MHz的视频格式(例如,NTSC 480i),HDMI采用视频像素复制的方式,即每个像素传输两次,以保证接收端播放的流畅性;在数据岛周期内,HDMI将音频数据和辅助数据合成一个12 bit的数据包,每个通道4 bit。在TMDS传输前为了提高可靠性,分别使用BCH和TERC4两种编码方法,将4 bit的数据岛变换成10 bit数据;在控制信号周期内,HDMI传输包括VSYNC、HSYNC和下周期指示等6 bit的控制信号,传送前同样使用特殊的编码算法将每通道2 bit的数据变换成10 bit。

HDMI的另一个特点是带宽利用率高,主要原因是数据岛和控制数据的传输安排在视频数据传输的消隐期,故在不增加视频数据传输带宽的条件下节省了传输通道[3]。

CEC(消费电子控制)在HDMI系统中是可选的,能够用来控制用户可能使用的多种视听设备,例如单键播放、遥控或自动设置等。DDC(数据显示通道)使得HDMI发送端可以读取接收端的EDID(拓展显示识别数据),从而实现两者之间的配置以及状态信息的交换。EDID是由视频标准组织VESA为优化PC显示格式而专门设计的数据规范,包含了制造厂商、产品名称、最大场/行频和可支持分辨力等视频接收设备的基本参数,它被存储在专用的E2PROM中,是实现HDMI接口即插即用功能的配置数据。只有当发送端识别并正确配置后,TMDS传输链路才可能被激活。

1.2 HDCP技术规范

为了有效保护视频内容版权拥有者的合法权益,大多数HDMI设备都嵌入了HDCP(高带宽数字内容保护)模块。HDCP的本质是设备授权认证和数字信号的加解密过程。HDCP协议需要经过3步认证过程:第一步是设备合法性认证,它通过内容提供者和使用者之间交换密码选择向量后计算并验证完成,确保收发双方建立可信的物理连接;第二步是中继认证,如果发送端和接收端直接连接时,此步认证不进行;第三步是视频数据的加解密过程,此过程必须在设备认证工作完成后才开始进行。HDCP系统传输结构如图2所示。在HDMI发送端,HDCP加密机为每个视频像素随机产生24 bit的伪随机码,与原始24 bit视频数据按位异或后进入TMDS编码模块。在HDMI接收端,TMDS解码后的24 bit数据与HDCP解码机产生的24 bit随机码再次按位异或后输出原始的视频数据[4,5]。

2 HDMI专用接收芯片在H.264编码器的应用

2.1 H.264编码器的系统构成

H.264高清视频实时编码器的的总体结构如图3所示,主要由HDMI视音频接收接口、H.264高清实时编码模块、主控模块(MCU)和TS流输出接口等部分组成。HDMI接口负责高清视频信号的采集、色彩空间转换和上下采样等工作。H.264编码器采用超大规模专用实时编码芯片,主要负责对分辨力为1 920×1 080p、帧频为60的全高清视频和伴音信号进行实时压缩编码[6]。MCU主要用于控制整个系统的工作过程,包括完成HDMI芯片的初始化和编码芯片的功能配置等。ASI接口将编码芯片输出的并行TS数据流转换成高速串行输出。

2.2 HDMI专用接收芯片特性

HDMI接口采用专用芯片HDMI1300,该芯片具有灵活的电源管理、高达225 MHz的TMDS工作频率、提供最高安全级别的HDCP预编程技术、支持像素每个分量高达12 bit色深的视频信号和更高比特率音质等功能特性。其内部功能模块如图4所示,主要包括TMDS解码模块、HDCP解密模块、音视频处理模块和I2C从机模块等。

该芯片支持双链路的TMDS输入端口。TMDS信号可以同时到达,但同一时刻只能一个端口的内部电路被激活。通过热检测功能检测有信号输入的具体端口号,控制软件可以通过检测相关的寄存器并激活对应的TMDS解码模块和DDC通道。HDCP解密模块能够对TMDS模块解码后输出的音视频数据进行异或解密,整个解密过程的控制是发送端通过DDC通道发送一系列的读写数据来实现的。芯片的密钥存储在专用的串行存储器EEPROM中,这些密钥被编程后将不能被读出来,保证了HDCP密钥的最高安全性。I2C从机模块有DDC通道和本机I2C通道两种类型。DDC通道用于HDCP机制的鉴定;本机I2C则用于对芯片中功能寄存器的配置和状态读取。视频处理模块将RGB 4∶4∶4、YcbCr 4∶4∶4或者YcbCr 4∶2∶2的视频输入信号经过色彩空间转换或者上/下采样后输出符合编码器要求的视频格式。音频处理模块支持8通道高达24 bit精度的数字音频信号,并且提供标准的I2S和S/PIF输出接口。

2.3 接口电路设计

HDMI接口的的电路连接关系如图5所示。MCU采用S3C2440作为HDMI1300的控制模块,它通过I2C总线向HDMI1300的功能寄存器写入或者读取数据来实现其功能配置或者获取状态信息。当有中断产生时,寄存器中相应位被置1,INT引脚输出低电平信号向S3C2440请求中断处理。在HDMI1300中,当输入视频信号稳定后,SCDT输出高电平信号。S3C2440可以通过检测SCDT管脚电平的高低性来判断HDMI1300接收的视频信号是否有效、稳定。实时编码器与HDMI1300的连接电路主要用于音频部分和视频部分的数据传输。在实时编码器中,要求输入视频格式为8 bit色深的YCbCr 4∶2∶2,即仅有16只视频信号输入引脚,而HDMI1300支持高达12 bit色深的RGB 4∶4∶4和YCbCr 4∶4∶4视频输出格式,共有36只用于视频信号输出的引脚。因此,必须通过配置HDMI1300寄存器从中选择所需要的16只引脚作为视频信号的传输线。

在其他接口电路设计中,电源系统是保证芯片和系统正常工作的重要因素之一。HDMI1300所需提供的电压有模数3.3 V和1.8 V两对,而且要求输入电压的误差不能超过5%,否则将导致正常的音视频信号受到严重干扰。本系统采用5 V的输入电源,经电源转换芯片变换后得到3.3 V和1.8 V电压对。在DDC接口设计方面,采用了型号为24LCS22A的EEPROM存储EDID信息,其接口的高电平为3.3 V,而DDC通道的高电平为5 V。因此,为了保证DDC通道正常工作和顺利通过HDMI的兼容性测试,采用了CALMIRCO公司为HDMI接收端专门设计的CM2021作为两者之间的电平转换芯片。CM2021还具有8 kV的ESD保护能力,故还可简化ESD保护电路的设计。视频数据和视频时钟线是HDMI接收端最重要的输入信号,HDMI1300的TMDS信号时钟最高可支持到225 MHz,数据传输速度非常快。为了保证HDMI接口芯片能够正确采样到视频信号,必须将每对TMDS差分信号线设计得基本等长,并且尽可能短。

2.4 控制软件设计

HDMI接口控制软件的设计流程如图6所示,主要包括芯片初始化配置、端口选择、视频处理和音频处理等过程。

HDMI1300硬件复位后直接进入低功耗工作模式,芯片中除了与时钟相关的几个功能模块外,其他的都被停止。因此,复位后必须先通过软件置位系统控制寄存器的PD#位,才能使芯片内部各功能模块进入正常的工作状态。初始时需要配置的内容主要有全局变量、中断寄存器和音视频功能寄存器。全局变量用于记录芯片工作状态、系统工作模式、视频同步信号和音频数据等状态信息;中断寄存器用于监控像素时钟丢失、视频同步信号丢失、AVI数据改变、音频数据变化、CTS值丢失和HDMI线缆连接中断等重要中断源;音视频功能寄存器用于禁止音视频信号输出等。

初始化工作完成后,MCU发出热检测使能信号,芯片进入等待HDMI信号的工作状态。当有效的HDMI线缆接入时,软件通过检测相关寄存器识别有信号输入的TMDS通道口并使能相应的DDC通道。HDMI发送端在DDC通道使能后通过读取和解析EDID,选择一种能够被支持的音视频信号进行传输。随后软件进入等待HDCP认证步骤,这个过程大概需要100 ms。HDCP认证通过后,HDMI1300中相关的寄存器被置位,HDCP解密模块开始对TMDS的视频数据解码。如果接收到的视频信号是稳定并且是被支持的,软件开始通过AVI中的视频辅助信息包识别输入视频的格式和计算视频同步信息,并配置与色彩空间转换、上/下采样和信号输出相关的寄存器。当HDMI1300收到稳定的音频信号后,软件通过AVI中的音频辅助信息包计算音频采样率Fs和音频时钟MCLK,配置输出I2S/SPDIF音源、音频FiFo映射图和音频输出通道等。视音频模块配置完成后,启动相关的输出模块,输出符合要求的音视频信号到编码器模块进行压缩编码处理。

3 结束语

HDMI具有数据传输速率高、支持HDCP技术和单一电缆同时传输音视频信号等优异性能,是下一代高清数字视频设备必不可少的接口。目前专用的HDMI接口芯片主要是基于HDMI 1.3v规范进行设计,具有速度快、功耗低、可靠性高和安全性高等特点。本文根据HDMI接口的功能要求,结合H.264高清实时编码器系统,通过详细探讨HDMI接口硬件电路和控制软件的设计方法,给出了一种适合于H.264高清视频实时压缩编码系统中的HDMI接口设计方案。

参考文献

[1]HDMI Specification Version 1.3[S].2006.

[2]沈璐,郑善贤.用于数字电视的HDMI1.3接收芯片点评[J].电视技术,2007,31(10):41-43.

[3]林志贤,陈兆芳,郭太良.HDMI视频接口技术在彩色FED中的应用[J].液晶与显示,2008,23(2):241-245.

[4]Digital Content Protection LLC,High-bandwidth digital content protectionsystem revision 1.2 June[S].2006.

[5]魏涛.数字视频接口标准与高带宽数字内容保护规范[J].电视技术,2005,29(5):31-34.

H.264高清编码器 篇4

关键词:H.264,QFHD,流水线,去块滤波

1 引言

2009年好莱坞电影《阿凡达》的热映使得3D视频技术以及数字IMAX 4K影院播放重新获得了人们的关注, 可以预见这些能够向观众展现栩栩如生的影像将是未来下一代高清视频系统的主流, 高分辨率的3D影像将给观众带来身临其境的视觉体验。当今流行的数字视频编码标准H.264自从2007年11月以来陆续加入一些新的扩展特性, 例如可适性视频编码 (Scalable Video Coding, SVC) 、多视角视频编码 (Multiview Video Coding, MVC) 以及3D立体编码[1,2]等, 作为对既有标准的改良, 从而实现3D视频系统的大规模市场应用。这些新的特性支持多路分辨率为1920*1080的全高清视频图像的实时编解码, 也支持一路3840*2160或更高分辨率 (4K分辨率) 四倍全高清 (Quad FullHD, QFHD) 视频的编解码应用 (以下如无特别说明, 四倍全高清视频图像尺寸均指分辨率为4096*2160大小, 并简称QFHD) 。SVC编解码标准的重要特征视频码流 (Bitstream) 可包含一个或多个子码流 (Subset bitstream) 进行解码, 而其中子码流本身可使用既有H.264解码手段重复利用相同数据, 达到解码复杂或者重构视频质量的目的。MVC编解码特性利用多路摄像机捕获的多视角画面之间相关性冗余进行编码压缩, 适用于立体 (双画面) 视频、自由视角电视以及多视角3D电视。

文献[3,4]提出了一种支持一路全高清实时解码的SoC设计实现, 主要技术特性为:在典型0.18um工艺库基础上综合得到芯片时钟频率达到166MHz, 解码器工作指标为1920*1088@30fps, 面积0.38mm2。使用OpenRisc 1200作为嵌入式CPU IP核复用加半定制ASIC设计方式。

考察一个具有较高效率的支持QFHD视频图像处理解码器应达到的技术指标不难发现, 现有的全高清实时解码SoC设计在以下三方面不能满足应用期望:第一、QFHD解码对系统有较高的运算需求。例如以30fps速度处理QFHD中的一个子视角需要的运算量达到了66.2TOPS[1]。第二、SoC片内用于缓存与数据整理的SRAM存储器出于成本考虑, 通常会兼顾速度与容量设计合理尺寸, 不会留有过多余量。而QFHD的一帧图像数据包含16*16宏块数比全高清图像宏块数多约出265%, 再加上片内SRAM有关宏块属性与宏块内block数据等估算, 现有设计无法满足处理一帧QFHD图像所需的片上存储需要。最后, 至少达到电影级24fps显示输出的要求使视频图像数据吞吐率达到4096*2160*1.5*24=303.75Mb/s, 既有设计只能满足71.2Mb/s即QFHD设计要求的23.4%。为了支持QFHD以及立体多视角的H.264协议SVC与MVC扩展, 现有的全高清解码器必须要将解码性能提升一倍以上。针对以上三点, 本文提出了一种速度较快、片内SRAM扩充合理的支持QFHD实时解码设计改进方案。

2 现有全高清解码器工作流程

基于文献[3,4]的全高清H.264解码系统使用软硬件协同设计, 根据H.264协议将解码过程分解成软件与硬件两部分, 其接口通讯使用Wishbone总线实现数据传输。解码过程中前期的熵解码、反量化、反直流变换、运动补偿与去块滤波数据准备使用嵌入式RISC CPU执行部分软件程序处理图像级计算, 配合硬件前端的数字逻辑完成, 之后将数据送至片外大容量的SDRAM内。硬件部分后端由中央控制器根据视频显示需求, 从SDRAM中取出相应数据完成解码、重构图像并显示输出的过程。整体硬件系统采用宏块级的流水线设计, 第一部分负责处理宏块的熵解码和反量化、反变换过程, 第二部分完成宏块的运动补偿与去块环路滤波。两者之间使用高速SRAM实现数据交互。

解码器硬件前端的中心模块是前端数据处理单元 (Front Data Processing Unit, FDPU) , 主要功能是为解码流程中的熵解码、运动补偿以及环路滤波做数据准备, 此外还要维护片内SRAM, 负责调用熵解码、与解码图像缓存 (Decoded Picture Buffer, DPB) 通讯以及向CCIU传递数据送入硬件后端完成宏块解码。FDPU是前端的控制核心, 它的内部模块组成如图1。

3 QFHD硬件结构设计与改进

现有的解码系统如果添加QFHD支持, 为多路码流MVC解码与3D立体解码支持作准备, 则必须在处理速度、片上SRAM容量与数据吞吐率三点加以改良。考察解码系统内RISC CPU运算部分可以发现, 为了提高系统实时处理宏块解码速度, 必须将软件部分的工作量减小, 而RISC CPU能给系统设计带来灵活性, 所以进一步分离解码流程中图像级运算与宏块级运算, 将原先由软件实现的宏块地址与属性计算交给前端硬件实现, 仅保留每个新Slice到来时的Slice与Picture信息计算与传输, 大大减轻硬件等待CPU执行结果所消耗的时钟周期。达到提升硬件前端处理速度的目的。此外, 解码器各个模块涉及表达宏块位置与图像尺寸的信号位宽加以扩展以实现QFHD分辨率支持。

3.1 流水线架构

使用流水线设计能够提升解码器数据处理吞吐量, 有效缩短解码一帧所需要的时钟周期。QFHD每帧的宏块数为4096*2160/256=34560, 正是1080p图像的四倍。改良的设计对每一宏块内的解码过程不做大量变动, 若设计要求仍然维持24fps的帧率显示的话, 则使用宏块间的流水线处理, 将解码过程分解。

由于环路滤波具有边界自适应特性, 复杂度很高, 所以Deblock模块会占用宏块解码过程很大一部分时钟周期。进一步考察Deblock内部模块可知, 宏块在做去块滤波的过程有两个阶段, 一方面需要用到量化参数计算滤波所需的块边界滤波强度 (BS) 、Index等滤波参数, 另一方面需要读取4*4block边界的像素点, 并利用第一阶段得到的滤波参数执行滤波计算。第一阶段的硬件实现正是FDPU内部模块DBP, 去块滤波的自适应特性表现在DBP模块对块边界的滤波参数计算的判断。图2即为滤波强度BS的判断树, 体现了块边界的自适应。该判断树具有5级逻辑判断单元, 最差情况需要判断4次才可以得到BS的值。

另外对于像素级自适应, 对于边界滤波强度BS不为零的情况, 还需要区分虚假边界与真实边界, 用与量化有关的alpha与beta来检查图像像素, 决定边界是否需要滤波。这部分硬件会给出块边界的滤波阈值。总的来说, DBP模块存在较多判断, 所需的数据包括帧内或帧间预测模式、是否存在非零残差变换系数以及边界宏块运动矢量差值。相对于FDPU内其他模块在宏块解码的具体过程, 该模块占用宏块解码的时钟周期较长, 所需数据类型较多, 以及计算复杂度较高。作为流水线改进的一部分, 该模块可以从宏块解码其他过程中分离出来, 达到并行化处理的目的。

第2节介绍的FDPU内部模块组成均是与宏块信息的判断与数据处理相关, 因此可以按照既有模块分为两级流水线处理, 前一级包含interpret_mb_mode, MiscControl, ReadMotion与dpb, 作用于宏块解码开始时读取Slice与宏块类型、判断预测方式、读取Slice的cbp、计算预测的运动矢量与参考索引、管理DPB;后一级包含DBP和cciu_trans, 用于计算宏块去块滤波所需的边界Strength与index值。FDPU内两级流水线设计的宏块解码过程需要两套提供当前宏块数据的存储空间, 当第一级流水线完成从读取宏块类型到预测运动矢量的计算后, 不必等待DBP模块计算去块滤波的Strength与Index参数而继续处理下一个宏块;第二级流水线则完成去块滤波参数计算后, 与在第一级流水线前一个时刻得到的宏块数据一起打包, 发送到解码器后端, 供CCU模块完成最后的解码和输出工作。

在FDPU塦模块增加两级流水线的控制部分, 使用判断信号控制P0与P1流水线的使能与运行标志。此外协调两部分数据交互, P0与P1需要错开一个宏块处理, 因此去块滤波前端DBP与数据打包cciu_trans两模块的输入信号, 例如宏块信息、帧场信息以及指示宏块位置的坐标都需要按照流水线控制部分使P1相对P0延迟一个宏块。

3.2 片内SRAM规划

现有解码器设计中, FDPU维护了一片5KB大小的SRAM存储器共内部模块进行数据存储与共享。主要存储宏块解码处理过程产生的中间数据, 如运动矢量 (mv) 、参考帧索引 (ref_idx) 、宏块类型 (mb_type) 、滤波强度 (Strength) 与阈值 (IndexA, IndexB) 等等。使用片内SRAM避免了宏块处理过程中随时需要向片外DRAM的读写这些重复使用率很高的中间数据请求, 使用高速缓存小容量、高速度的存储体系减少系统延时。各个模块不会同一时间使用SRAM内的同一部分数据, 因此SRAM可以为各模块在不同时刻控制。此外为达到解一个宏块的数据吞吐率, SRAM的位宽设定为64bit;而SRAM内的数据也多是按照block为单位进行组织, 提高FDPU内部模块对存储器操作效率。

FDPU内部模块要实现流水线改进, 则维护的SRAM也需要做相应的改动确保各个模块存取数据不受影响。原有的SRAM存储数据主要有两部分:一是用作宏块解码参考数据, 当前宏块上一行1920/16=120个宏块边界以及左边一个宏块边界的ref_idx与mv信息、上一行宏块的ipredmode数据、ref_pic_id以及熵解码得到的一行宏块mb_type, QP和cbp值;另一部分是经过FDPU内模块计算处理得到的ref_idx与mv, 还有去块滤波计算得到的滤波参数, 此外还有供后端解码使用的DPB与POC数据。P0与P1流水线均涉及到SRAM的读取参考宏块数据与写入当前宏块数据的操作。为解决SRAM操作的读写冲突, 对片内SRAM的改进分为以下两个步骤:

(1) 参考宏块与当前宏块分离存储。使用另外开辟的SRAM存储用作模块计算的参考输入。这部分数据包含当前宏块之上一整行宏块最下面4个block外加当前左侧宏块最右4个block的ref_idx, mv, 整行宏块的ipredmode操作、熵解码mb_type, QP以及cbp值。QFHD图像一行宏块有4096/16=256个宏块, 因此这部分数据比原有SRAM对应的空间要增加两倍以上。参考宏块部分的SRAM特点是数据容量较多但访问频率不高, 另外由于P1级流水线用于宏块解码前端部分最后计算滤波参数, 则再开辟一块SRAM用于DBP模块数据存取, 其余处于P0级流水线的FDPU内模块存取参考宏块数据与DBP需要的参考宏块数据SRAM分离。

(2) 当前宏块SRAM采用“乒乓”双缓冲配合P0与P1两级流水线完成一个宏块解码的数据存取操作。P0与P1两级流水线各个模块都要在计算当前宏块完成以后写入SRAM, 这部分SRAM容量不大, 但访问频率很高。采用双缓冲的形式在一级流水线传数据给其中一个缓冲的时候, 另一级流水线能从另一个缓冲里面读取数据, 从而使传输和解码同时进行, 确保两级流水线提升数据吞吐率的目的, 示意如图3。

新的FDPU片内SRAM由4片SRAM组成, 位宽均为64bit。其中SRAM0与SRAM1容量为1KByte组成“乒乓”双缓冲结构、SRAM2容量12.5KBytes用于DBP、SRAM3容量8.5KBytes用于FDPU内其他模块。与原有FDPU片内SRAM设计相比容量增加了7倍之多, 一方面是由于QFHD图像尺寸扩展, 另外的原因则是流水线的采用以及“乒乓”双缓冲的机制, 使用面积增加换取硬件系统速度的提升。

此外, SRAM3内参考宏块数据也是由解码器在解码上一行宏块时得到的, 因此增加linebuf_main模块用于维护SRAM0&1向SRAM3写入每一个宏块最下面一行block数据 (因此称为LineBuffer) , 供解码器进行到下一行宏块解码时取用SRAM3内的数据。SRAM2内的参考宏块数据由DBP内控制器的有限状态机完成维护。

4 硬件实现

对上文所述针对QFHD设计改进使用Verilog HDL硬件描述语言进行实现, 并使用NCVerilog进行行为仿真, 最后经过综合在Xilinx Virtex 5 FPGA验证平台上进行硬件验证, 成功解码并向显示设备输出QFHD尺寸的视频图像。使用DC综合工具得到硬件设计的时序改进为175MHz, 去除独立的片内RAM面积达到23万门, 数据吞吐达到QFHD@24fps要求。

图4为从FDPU模块提取的流水线机制仿真波形, 图中可以看到第一级流水线宏块坐标计数已经从MB[0, 0]向MB[1, 0]过渡, 而第二级流水线宏块坐标刚刚从上一帧最后一个宏块向新一帧图像宏块MB[0, 0]变化。P0流水线里FDPU内子模块的使能信号依照宏块和Slice的类型依次激活, 完成从interpret_mb到dpb的操作;与此同时P1流水线处理上一个宏块的deblock操作, 并通过cciu_trans模块打包传输给解码器后端进行解码。

5 总结

本文提出了一种在现有全高清实时解码器硬件设计的基础上针对支持MVC的QFHD尺寸视频解码的设 (下转第18页) (上接第44页) 计改进方案, 利用硬件并行性、改良的存储系统与流水线机制使整个设计的解码速度满足QFHD解码需求, 并在最终FPGA上实现和验证了正确性与可用性。

参考文献

[1]ITU-T Rec.H.264-Advanced video coding for generic audiovisual services[M].2010.3.

[2]Pei-Kuei Tsung, Ping-Chih Lin, Kuan-Yu Chen, Tzu-Der Chuang, Hsin-Jung Yang, Shao-Yi Chien, Li-Fu Ding, Wei-Yin Chen, Chih-Chi Cheng, Tung-Chien Chen, Liang-Gee Chen., A 216fps 4096×2160p 3DTV Set-Top Box SoC for Free-Viewpoint 3DTV Applications[J].ISSCC Dig.Tech.Papers.pp124-126, Feb.2011.

[3]张力航.软硬件协同设计技术在H.264解码器设计中的应用[J].电子设计应用, 2006 (9) .

H.264视频编码标准学习工具 篇5

近年来, 随着流媒体技术、网络技术, 特别是多媒体技术和计算机技术的迅猛发展, 视频信息在人们的日常生活中占据的比重越来越大。新一代视频编码标准H.264已经发布, 就在视频编码领域得到的广泛关注。但是在很长一段时间中, 视频编码技术被认为只被视频编码研究领域的专家和学者所知。究其原因, 主要是因为视频编码技术所涉及的学科知识纷繁复杂, 研究者需要有丰富的图像处理知识和编码知识, 同时还需要学习JVT提供的带有源代码的参考软件。学者需要在读懂代码的基础上, 根据自己的理论研究成果修改源代码, 以进行实验, 验证学者提出或改进标准后编码算法的性能。而在实际实验中, 学习H.264视频编码标准的相关工具软件也不为一般学生所熟知, 这为研究者的实验带来了较多困难。本文将介绍四种学习H.264编码标准的必备软件。

1 代码阅读工具———source insight

众所周知, 在阅读代码时, 研究者需要经常查看变量、函数、宏等符号的定义、定义位置, 或者这些符号调用了何种符号或何处调用了这些符号。source insight就很好的展现了它在阅读代码方面的优越性。source insight是一个代码编辑器, 学者可以直接在source insight中修改需要修改的参考软件的部分代码。同时, source insight也是一个代码分析器, 在编辑源代码时, source insight会在后台动态维护符号数据库, 通过这个符号数据库, 就可以实现查找、替换符号, 跳转到符号定义处或者被引用处, 检查符号拼写、符号匹配的在常用编译软件中难以实现的功能。

source insight界面操作很简单, 不同种类的符号被赋予了不同的大小、图形和颜色, 比如数字赋为红色, 关键字赋为绿色, 注释赋为蓝色, 变量名函数名赋为蓝黑色, “#”号是包含的头文件, 中间带着写有M的绿框代表宏定义绿色椭圆代表全局变量等。这种区分能够让读者一目了然, 特别是将鼠标移到一个符号时, 界面的左下角的上下文窗口“context”会显示该符号的定义处, 单击定义处, 代码就会自动跳转到该处。source insight也不会简单的记录或者跟踪符号, source insight可以在“references”窗口和“calls”窗口分别显示索引关系树和调用关系树。从这两个窗口中, 学者可以清晰、有层次、有目的的阅读代码。

source insight最重要的、最常用的功能就是查找“lookup references”, 该功能会把该符号在代码中出现过的所有的位置以列表的形式向用户给出。在查找时, 可以设置查找的条件, 比如“case sensitive”代表是否区分大小写, “whole words only”代表是否只搜索整个字符串或者包含该字符串, “skip inactive codes”代表是否跳过无用代码, “skip comments”代表是否跳过注释等。

2 分析代码结构工具———doxygen

doxygen软件是一个强大, 使用方便且支持各种操作系统和编程语言的代码文档生成系统。doxygen是荷兰人Dimitri van Heesch开发, 在GNU公共许可证 (GPL) 下发布。最初, doxygen在linux下开发, 但现在已经被移植到多种操作系统平台下, 包括unix各种版本, MSWindows和Mac OS。

在学习H.264代码时, 可以用doxygen生成代码手册来辅助阅读H.264代码, 以增加对H.264代码整体框架的把握和加深数据流向的认识。在程序注释时, 只要按照一定的规范书写, 就能利用doxygen把注释和其它重要信息一并转换为说明文件, 保存为HTML、CHM或者PDF等格式的文档。利用doxygen生成的代码可以将针对函数或数据类别说明的注释形式化, 因此, 使用doxygen生成代码手册可以在相当程度上减少代码阅读负担。

3 方便的H.264播放与分析工具———elecard stream Eye tools

elecard stream Eye tools包括五个工具:elecard YUV Viewer、elecard Stream Eye、elecard stream Analyzer、elecard Buffer Analyzer和elecard Video Quality Estimator。

elecard YUV Viewer工具使用最多。elecard YUV Viewer能够查看视频文件的YUV数据序列, 可以将文件互相比较, 以找出YUV图像的差别。该软件还允许用户计算PSNR、NQI、VQM等视频质量评估指标。elecard YUV Viewer支持多种YUV格式, 如IYUV、YV12、YV16、UYVY等。

elecard stream Eye是用来查看视频码流的工具, 支持对MPEG-1、MPEG-2、MPEG-4和H.264格式。当利用更改H.264参考软件代码编码测试视频后, 就可以利用elecard stream Eye分析输出的H.264格式视频, 从而从结果分析中显示研究者改进算法的性能。elecard stream Eye可以播放H.264码流, 查看码流的平均值、峰值和最小值。同时, 该软件还可以查看片分割, 宏块类型、分割模式, 运动矢量大小, 运动矢量方向, 以及各种头信息。elecard stream Eye还提供了视频截图功能, 这点在研究者撰写论文时很重要。研究者可以利用elecard stream Eye对编码输出的H.264格式视频截图, 并与利用elecard YUV Viewer对所编码的YUV格式的原视频的截图进行对比, 以此说明采用研究者改进算法后的输出视频和原视频在视觉上的差异。

由于有了强大的H264visa软件, elecard stream Analyzer很少使用。elecard Buffer Analyzer是用来分析解码器缓冲区参数的软件, H.264研究者很少会使用。elecard Video Quality Estimator则是提供了更多的用于质量评估的指标, 除非进行专门的质量优化, 一般很少用到。因此, elecard stream Analyzer、elecard Buffer Analyzer和elecard Video Quality Estimator这三款工具软件的使用不是很多。

4 H.264码流分析利器———H264visa

H264visa是一款功能更加强大的码流分析工具, 该软件可以支持H.264字节流格式、RTP格式以及其它一些H.264码流的封装格式。

RTP协议 (real time transport protocol, 实时传输协议) 是用于internet上多媒体数据流的一种传输协议, H.264码流数据需要按照RTP协议打包后在internet传输。对于研究H.264视频编码标准的研究者来说, 需要分析的是H.264码流数据。H264visa除了包含elecard stream Eye tools能够提供的所有功能外, 还具有很多特性:

(1) 显示宏块编码数据, 预测块数据, 残差数据和变换系数;

(2) 可以同时打开原始YUV文件和H.264输出文件, 可同时显示原始文件与编解码后重建视频文件的差异, 并计算PSNR;

(3) 显示详细的宏块类型统计数据、宏块预测信息、边界强度信息和包含NAL的头信息等;

(4) 可以显示预测图像、残差图像、块效应滤波前图像;

(5) 可以直接打开加了封装的视频, 例如FLV、MP4等, 还可以分析封装可以, 对于学习视频封装格式也有很大帮助。

5 结论

随着视频编码技术的迅猛发展, 越来越多的学者将会从事视频编码领域的研究, 学习好代码阅读工具———source insight、分析代码结构工具———doxygen、方便的H.264播放与分析工具———elecard stream Eye tools、H.264码流分析利器———H264visa四款工具将提高研究人员的工作效率。

摘要:H.264视频编码标准发布后得到的广泛关注, 但是由于H.264代码量巨大, 给研究者带来了较多困难。本文介绍了四款H.264视频编码标准的学习工具软件, 以方便广大学者对于H.264编码标准的学习。

关键词:H.264,代码阅读,码流分析

参考文献

[1]陈靖, 刘京.深入理解视频编解码技术:基于H.264/AVC标准及参考模型[M].北京:北京航空航天大学出版社, 2012.

H.264高清编码器 篇6

H.264的编码是目前最流行、压缩效率最高的视频标准之一, 但H.264编码算法较为复杂, 通常采用软硬件协同设计, 宏块级及以下级别的编码运算量和数据量很大而且有序, 所以适用于用硬件实现;而宏块级以上的编码运算量较小, 且要求有较高的应用灵活度, 所以适合于软件实现。目前, 绝大部分嵌入式SOC的H264编码器都采取该设计思路。尽管硬件解决了大部分的运算问题, 但视频数据仍然非常庞大, 比如, 存储一帧1280x720的视频画面, 需要1.4MByte的缓存, 加上H.2644编码过程中的其他缓冲, 最终需要读写的数据量可能几倍于单帧视频的大小, 所以通过SDRAM/DDR等片外DRAM来做数据交换是最直接的选择, 然而, 因为DRAM是SOC的数据中枢, 数据通过DRAM交换, 就可能会产生带宽不足或者延迟过大等问题, 最终表现为系统性能不足或者时序错乱。

2 典型的H.264编码过程

典型的H.264编码过程, 包括场景评价, 帧/宏块类型决策, 运动估计, 帧内/帧间编码, , 去方块滤波, 墒编码, 参考帧回写, 码流输出等模块;笔者用一款商用H.264编码器进行带宽评估, 统计编码器需要与DDR交换的数据总量, 得到如图1所示的比例关系。

可以看到, 几乎每一个编码步骤都会与DRAM作数据交换, 其中以运动估计最甚, 对于每个运动预测块, 需要在参考帧某个邻域中做最优匹配, 而且, 对于H.264标准, 存在多参考帧的情况, 带宽需求将更加巨大。所以, , 针对带宽的优化必不可少。

3 常用的带宽优化手段

3.1 简化编码过程

省去对应的DRAM访问操作, 达到减少带宽占用的目的。对于嵌入式h.264编码器, 多参考帧技术、二次扫描编码、扫描画面纹理确认帧类型等技术都可以考虑简化, 毕竟这些技术对于资源有限的嵌入式环境, 不仅仅是带宽, 成本/面积/性能这些指标都会大幅度下降。在编码器设计的时候, 可以优先对这些功能做剪裁。另外, 当带宽紧张的时候, 可以强制取消帧间编码的功能, 也是一种补救的方法。总之, 简化编码过程是最直接的节省带宽的方式, 但该方法最终影响到了编码器的压缩效率, 所以需要谨慎使用。

3.2 利用较小的片内RAM做缓存, 适当调整编码模块的顺序

使得多个编码步骤可以在片内RAM上完成, 而不需要通过DRAM做数据交换。如:

(1) 缓存已编码宏块行的最后一行像素值, 作为下一个宏块行帧内预测时使用。

(2) 缓存已编码宏块行的运动矢量、块类型信息, 作为下一个宏块行运动估计时使用。

(3) 调整子块去方块滤波的执行顺序, 在做完去方块后, 再统一将数据回写到DRAM中;这些方法是最常用的带宽优化方法, 但仍然无法优化如运动估计这种带宽占用大户。

3.3 减少参考帧的存储数据量

该方法要求从根本上减少实际的数据需求量, 同时保证了编码器的压缩效率。参考帧的大小是由分辨率和数据格式直接决定的, 如YUV420的1280x720的画面, 其数据即为1280x720x1.5Bytes (这里不考虑色深超过8b的特殊情况) 。所以, 必须对参考帧做压缩, 即在帧数据进入DRAM之前做一次压缩, 使得存放在DRAM的数据量变小, 做运动估计或者运动预测时再读取出来, 在片上RAM上做一次解压缩, 该方法目前被广泛使用于GPU, 同样可以在VPU上应用, 如图2。

通过选择合适的无损压缩算法, 增加对应编解码逻辑, 可以大幅度降低参考帧读取的产生的带宽。由于运动估计时, 访问的邻域是随机的, 所以该无损算法必须是在图像某些位置可重入的, 即允许选择参考帧的一部分数据进行解压缩, 如果无损算法压缩率达到50%, 那么对于整个编码器来说, 也是非常可观的。由于自然图象的纹理具有很大的局部相似性, 所以对纹理进行压缩的可能性很大, 产生的代价是逻辑面积增大。

3.4 减少访问参考帧的次数或者数据

这需要采用更加高效的运动搜索技术, 如: (1) 更精确的运动搜索, 如1/4像素运动搜索、全搜索技术, 那么在较小邻域中就容易搜索到较优的匹配值。

(2) 通过分析当前宏块周围的运动矢量的分布, 预测出最优匹配块的位置, 如划动窗口技术;可以减少因为搜索范围过大导致的带宽浪费;

3.5 利用DRAM的特性做相应的优化

由于DRAM的存储方式有其固定的规律, 编码器在与DRAM做数据交换时, 如果能否依据DRAM的特性做出相应的调整, 是可以大幅度提升DRAM的访问效率。打个比方, 同样在一个周期中, 位宽为16比特的DRAM可以搬运16个有效比特, 也可以只搬运8个有效比特, 如果要尽可能高的发挥DRAM的效率, 就必须以DRAM友好的方式组织和访问数据。比如:

(1) 按照DRAM的最大突发访问数据长度作为编码器与DRAM数据交换最小单元, 减少DRAM重整数据的可能;位宽为16b的DRAM, 那么访问时最小的单元不应小于16b, 若DRAM的最大突发访问数据长度为8, 则最好每次访问的数据大小是16bx8.这样可以最大效率的利用DRAM.

(2) 优化DRAM的访问优先级, 尽量避免在传输大块数据的时候, 被小而碎的数据打断;

(3) 尽量使得操作频繁的数据在DRAM的存放顺序与访问顺序一致, 比如将参考帧按照宏块的顺序进行存储, 而不是光栅的方式进行存储, 符合编码器的访问规律, 是可以大幅度提高DRAM访问效率。

3.6 系统级优化

H.264编码器在运行时, 很可能有多个模块在同时访问DRAM, 如显示模块, 视频信号采集模块, 图像信号处理模块等等。为了减少整体的带宽, SOC设计师必须对应用场景作深入的分析, 协调各模块访问DRAM的优先级以及模块间的数据依赖关系, 在保证最终效果的同时, 尽可能避免DRAM时而空闲, 时而紧张, 最终造成理论带宽足够, 但实际带宽不足的情况。

DRAM是整个SOC数据通信中枢, 而视频编解码一般是SOC较苛刻的应用场景, 所以, DRAM带宽有着巨大的应用价值。在DRAM数据吞吐量固定的情况下, 优化带宽不仅仅可以提升产品的性能, 还可以降低功耗;另一个维度, 终端产品也可以因为DRAM运行频率降低而选择更可靠的工艺和布线, 最终提升产品的良率。本文提到的技术, 即便是在非视频应用场景下, 也有很高的参考价值。

摘要:本文分析了H.264编码过程中的DRAM带宽占用情况;针对目前嵌入式设备的特点, 同时介绍了若干种DRAM带宽优化的手段, 其中每一种优化技术都具备有非常高的实用价值, 对H.264编码器设计人员, 尤其是移动消费类SOC设计师有很好的参考意义。

H.264高清编码器 篇7

关键词:H.264,视频水印技术,帧间预测,鲁棒性

随着网络和多媒体技术的发展, 数字视频[1]的应用越来越广泛, 视频作品遭到恶意攻击和非法侵权的问题也越来越严重。如何有效地对数字视频进行版权保护, 成为多媒体技术发展中迫切的现实问题。视频水印技术正是为解决这个问题而受到人们越来越多的关注, 成为当前学术领域研究的热点。H.264作为最新一代的视频编码标准, 迫切要求水印技术与其相融合, 提升和改进现有的视频水印算法, 以适应新的应用环境。

在对视频水印技术及H.264标准分析研究的基础上, 研究了一种针对H.264编码的鲁棒视频水印设计算法。

2 算法描述

该算法首先将二值水印图像扫描为序列[2], 然后在H.264帧间预测编码阶段根据水印序列选择不同的区块划分范围, H.264中帧间预测块的划分方式有4种, 分别是16×16、两个16×8、两个8×16、四个8×8[3], 其运动补偿也相应地有四种。在进行帧间预测时, 本算法首先跳过对16×8区块的预测, 如果预测算法所决定的区块划分大小为16×16, 算法将根据水印比特序列中的不同值决定是否将此16×16的区块划分成16×8的区块;如果预测算法所决定的区块划分大小不是16×16, 则直接进行熵编码和码流生成。此算法如图1所示。

2 算法实施步骤

2.1 水印图像二值化

水印图像先行进行二值处理[4], 使水印图像的数据中只包含0和1两种, 以方便进行嵌入处理。为了得到理想的二值图像, 一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阈值的像素被判定为属于特定物体, 其灰度值以255表示, 否则这些像素点被排除在物体区域以外, 灰度值为0, 表示背景或者例外的物体区域。如果某特定物体在内部有均匀一致的灰度值, 并且某处在一个具有其他等级灰度值的均匀背景下, 使用阈值法就可以得到比较好分割效果。如果物体同背景的差别表现不在灰度值上 (比如纹理不同) , 可以将这个差别特征转换为灰度的差别, 然后利用阈值选取技术来分割该图像。动态调节阈值实现图像的二值化可动态观察其分割图像的具体结果。其二值化处理的流程图如图2。

所采用的水印图像如图3

图3 (a) 中的图像经过二值变换后得到的16进制代码如下。

2.2 水印图像的Arnold置乱

Arnold置乱[5]是V.J.Arnold在遍历理论研究中提出的一种变换, 俗称猫脸变换, 其原意为 cat mapping。目前, Arnold变换多作为数字图像置乱的一种技巧。Arnold变换公式如下[1,2]:

(x'y') =[ (1112) (xy) ] (mod1)

置乱操作在MATLAB中实现。

Arnold变换具有周期性, 而且周期就是迭代到某一步时, 将重新得到原始图像的迭代次数。Dyson和Falk给出了离散Arnold变换的周期性, 对任意的N (N>2) , Arnold变换的周期为TNN2/2。图3 (b) 经过Arnold置乱后得到的图像如图4。

2.3 水印嵌入

算法通过在编码模式上的强行选择来进行信息的隐藏, 具体的实现如图5所示。

嵌入水印前, 残差帧宏块划分如图6。

可以发现在残差帧中图像变化平坦的区域, 宏块的选择都是16×16, 在嵌入水印后可以发现部分宏块被划分成了更小的块 (图7) , 这种嵌入算法对视频效果的影响可以忽略, 因为此算法不会修改任何帧像素的值, 可以达到更高的保真度。

图 (7) 中用粗线条框住的就是嵌入水印的位置, 按照上图所示, 嵌入的数据为:01010101100000000000000101。

根据上例, 定义水印与宏块划分的关系如下

{V (i) 16×16m[j]=0V (i) 16×8m[j]=1

3.4 水印提取

根据H.264压缩编码的语法标准[8], 16×16宏块在I片、P片、B片中都存在, 但是本算法使用到的16×16宏块, 仅仅为帧间预测中的16×16宏块, 所以在提取水印时首先要跳过对I片中宏块的检测, 然后对B片和P片中的16×16宏块及16×8宏块进行检测, 并得出水印序列 (图8) 。

m[j]={0, V (i) 16×161, V (i) 16×8

4 实验结果

本算法的实施环境为:CPU:奔腾E2160, 内存:3 G。为了对算法进行仿真和性能测试, 采用C语言和Matlab语言结合编程的方式, 运用VisualC-6.0和Matlab R2009a的编程平台, 对算法进行了程序上的实现。其中对水印图像的预处理方面由Matlab语言实现, 并将处理后的水印序列保存在一个图像文件中, 以便用C语言进行水印的嵌入。同样, 在水印提取时是将提取出的水印序列保存在一个图像文件中, 然后用Matlab语言对其进行后期处理, 并恢复为水印图像。H.264编解码模型采用的是H.264官方的参考软件JM86版, 实验所用QP=28[6]。

实验所用视频序列为标准视频序列, 如表1所示。

算法在JM代码中实现, 嵌入水印在encode_one_macroblock () 函数中实现, 提取水印在read_one_macroblock () 函数中实现, 水印添加后的码率的变化情况如表2。可以看到水印前后码率的变化并不大, 冗余率 ( (含水印视频码率一原视频码率) /原视频码率) 为2.4%~0.16%, 在保证图像清晰度的条件下可以忽略, 满足码率稳定的要求。

根据表3数据显示, I片的数据量在嵌入水印前后没有变化, B片的数据量在嵌入水印后变化较大, 例如在foreman视频中B片的数据量较大, 嵌入水印后所产生的冗余度在三次实验中也是最大的, 而P片在承担了大量的水印嵌入数据时也不会产生大量的冗余数据, 所以本算法在B片少量出现的情况下可以达到最佳的效果。

4.1 水印不可见性

不可见性[7]主要有主观和客观之分。主观性主要根据个人对视频图像的观察来判定, 效果如表4所示。

用客观数据PSNR[8]作为客观评价的标准, 图9是利用水印图像b经过置乱后嵌入akiyo视频素材, 提取后的PSNR值的对比情况。

从图9可以看出PSNR值的变化非常小, 基本上在0.1以内。说明本算法对图像质量的影响非常小。

水印的提取情况如表5。

4.2 抗噪声攻击

噪声攻击[9]是常见的数字水印攻击方式, 但噪声攻击的对象一般为视频中的亮度或者色彩分量, 本算法的水印嵌入位于控制域, 加入噪声攻击无法对其水印信息造成破坏。

4.3 帧截取攻击

由于H.264视频压缩标准中帧截取的攻击实现非常困难, 本次攻击采用的是在提取水印时放弃第二帧的水印信息提取, 攻击后水印图像的情况如表7。

总结:通过以上几种攻击方式可以看出:控制域水印嵌入对噪声攻击等面向图像的攻击手段不敏感, 但是在帧截取的攻击下对水印图像造成了一定的破坏。

4.4 实时性分析

实时性分析主要是针对编解码的时间是否增加, 对程序的实时性的测试, 本算法主要在帧间预测阶段实现水印嵌入, 对编码的时间影响非常小, 甚至能减少编码时间, 提高编码算法的实时性, 现将实验时各帧编码时所花费的时间进行对比, 就能分析出本算法对编码时间的影响。

表8是嵌入水印前后时间的比较, 可以看出, 由于水印算法跳过了对16×8模式的运算, 在大多数帧的编码时间比原编码程序的时间要短, 这说明了本算法在实时性上是明显的。

5 结束语

数字视频水印有健壮性、透明性、盲检测等基本要求, 如何使水印嵌入算法既有较好的透明性又能抵抗有意或无意的攻击, 是数字视频水印研究的主要课题之一。

探讨的主要是基于H.264标准的鲁棒视频水印技术, 主要工作如下。

1) 本算法对视频图像中的图像数据不做任何修改, 只针对宏块的划分模式做修改, 所以本水印算法对视频图像的质量没有影响, 只需要考虑压缩算法对图像的影响。

2) 本算法的水印提取算法相对简单, 有利于实时实现。

视频水印技术研究涉及众多科学领域, 内容繁多, 成熟实用的水印算法设计仍有较大的难度, 而H.264编解码过程又较为复杂, 更优的算法现仍在研究之中。

参考文献

[1]唐松生, 董颖.数字视频水印技术综述.计算机安全, 2007; (9) :31—33

[2]王向阳, 杨红颖, 赵红.一种新的自适应量化数字音频水印算法.声学技术, 2004;3:117—120

[3]毕厚杰, 新一代视频压缩编码标准H.264/AVC.北京:人民邮电出版社, 2005:84—91

[4]吴锐, 黄剑华, 唐降龙, 等.基于硬度直方图谱象类的文本图像二值化方法, 电子与信息学报, 2009; (10) :2460—2464

[5]冯茂岩, 冯波, 浓春林.基于分块DCT变换和Awod置乱的自适应图像水印算法.计算机应用, 2008; (1) :171—173

[6]余小军, 英玮, 范科峰, 等.一种抚H.264压缩的低比特率视频水印算法.计算机工程, 2008; (2) :171—173

[7]钟伟, 马希俊, 余松煌.一种使用Legendre阵列的图像水印.通信学报, 2001;22 (1) :1—63

[8]郑振东, 王沛, 陈胜.基于运动矢量区域特征的视频水印方案.中国图象图形学报2008, 10 (13) :1926—1929

[9]单承赣, 孙德辉.基于H.264/AVC低比特率视频流的双水印算法.计算机应用, 2007;27 (8) :1922—1925

上一篇:高职网络课程教学下一篇:安全生产标准化管理