AVS编码器

2024-10-18

AVS编码器(精选7篇)

AVS编码器 篇1

AVS(Audio Video coding Standard)标准[1]是《信息技术先进音视频编码》系列标准的简称,是我国具备自主知识产权的第二代信源编码标准。熵编码是AVS视频编码器中的关键技术,用于除去数据的统计冗余,熵编码器模块性能的好坏对整个AVS的编码十分重要。

本文目标是设计出支持1 080i(1 920×1 088,30 f/s),系统工作频率为100 MHz的实时高清编码器[2]。目前,国内外许多学者对H.264标准中的硬件设计做了研究,但由于算法的差异,不能直接用于AVS。本文提出了一种适合AVS的熵编码器硬件结构[3],满足AVS实施高清编码的要求。

1 AVS熵编码原理

利用信源的随机过程统计特性,进行码率压缩的编码方式称为熵编码。

熵编码可以是定长编码、变长编码或算术编码。变长编码对出现频率高的符号用短码字表示,对出现频率低的符号用长码字表示。算术编码是一种递推形式的连续编码,其思想是用0到1的区间上的1个数来表示1个字符输入流。

AVS采用上下文自适应可变长编码和指数哥伦布编码方案。指数哥伦布码的比特串分为“前缀”和“后缀”两部分。前缀有M个连续的“0”和1个“1”构成,后缀由M+k个比特构成。其逻辑结构为

对于输入数据为CodeNum的k阶指数哥伦布码,其编码码字中信息位的长度M和编码信息INFO关系为

2 关键部分的硬件设计

2.1 游程编码模块

本模块主要是对变换量化后的残差数据进行系数扫描[4],从而得出(run,level)数对。按照传统的方法,每个周期处理1个系数,则1个宏块至少要64×6=384个周期,再加上数据的输入和存储消耗的周期,很难满足1个宏块处理时间不能超过408个时钟周期的系统要求。因此,这里采用了一种系数并行扫描的方法,即量化后的8×8矩阵按Zig-Zag顺序扫描后,将子块量化系数按行输入寄存器组,该方法包括提供一输入寄存器、扫描控制器、计数器及输出寄存器,其实现框图如图1所示。

假设每行输入寄存器阵列为[A1,A2,…,An,…,A8],其中任意量化系数An。该并行扫描方法主要步骤如下:

1)将计数器cnt置零,扫描控制器开始对寄存器组的量化系数进行行扫描。

2)如果系数An=0,不输出(run,level)对;如果An非零,此时计数器值为cnt,则当An为本数组首个不为0的数时,其前面有n-1个0,则(run,level)=(cnt+n-1,An),同时将计数器的值置为0;当An为本数组的首个不为0的数时,设An是在An之前距An最近的一个不为0的数,则(run,level)=(An,n-u-1)。

3)从输出寄存器输出(run,level)对。

4)移动量化系数存储地址,重复步骤2)、步骤3),直到完成该子模块的扫描。

其扫描控制器结构图如图2所示。

2.2 码表存储模块

AVS视频编码中查找传输系数总共需要19个2D_VLC码表,这些码表都是以run和level为联合索引的二维码表[5],采用二维寻址查表方式一直是速度的一个瓶颈。本文采用分段寻址的方式提供系统的速度。举例如下:

1)假设原二维码表见表1,根据横坐标level和纵坐标的run查找相应的码值CodeNum。

2)将CodeNum索引地址改成由run和level分段构成的一维地址,见表2。

根据以上举例对19张二维码表存储为一维形式,大大提高了码表索引速度。

2.3 指数哥伦布编码模块

该模块完成对码值syn_dat的哥伦布码字的转换。根据对上文哥伦布码的研究,给出了指数哥伦布编码的硬件结构,本模块的输入为待编码码值syn_dat和其对应的阶次golomb_grad(下文以k代替);输出为哥伦布编码后的值element_o,如图3所示。

这里对上文k阶指数哥伦布码构成做了些变化,见式(4)

显然,只有求出哥伦布码前缀长度M和后缀的值IN-FO就能对待编码的CodeNum值进行编码。但是,发现以上式子比较复杂,硬件实现起来比较困难。这里采用了一些技巧:先得出[1][M位INFO]即INFO+2M=syn_dat+2k,然后前面补M个0便可得到所要的码字。在硬件上,这里先用temp存储Code Num+2k,然后取temp的低syn_len位,即为对应的哥伦布码字。本模块中2k的运算通过多路选择器实现;码长syn_len=2M-k+1通过首1检测单元得到后缀长度M然后左移1个单位,再做减(k-1)运算得到。

3 仿真与综合

3.1 仿真平台

本文采用Verilog硬件描述语言进行RTL设计,并用Mentor公司的ModelSim6.2进行仿真[6]。测试平台包括激励源、被测模块、比较器3个主要部分,如图4所示。

仿真主要步骤如下:

1)产生测试激励

从AVS标准参考代码rm52j建立C模型提取测试激励。通过C语言中的写文件指令将量化后的系数以16进制格式存入文本中。

2)加载测试激励

使用verilog语言将激励文件读入RAM中,熵编码模块有序读取测试激励。

3)响应比较

熵编码模块输出响应值与C模型输出值进行比较。

经响应比较证实所设计模块功能正确,仿真波形如图5所示。

3.2 综合结果

本设计采用ISE10.1综合工具进行综合,目标器件是Xilinx公司的Virtex4系列中的xc4vfx12。综合结果最高频率为145.7 MHz,满足实时高清编码的100 MHz的频率要求,并高于文献[7]的最高频率135 MHz。

4 结语

本文在介绍AVS视频熵编码原理基础上,给出了熵编码器关键部分的硬件结构,提出了并行扫描的游程编码结构和分段寻址的码表查表方式,大大提高了系统的流水速度,使整个硬件达到高清实时编码的要求。

参考文献

[1]中国国家标准化管理委员会.信息技术先进音视频编码第2部分:视频[S].2006.

[2]藤勇.中国网通:AVS IPTV产业化的实践与创新[J].中国数字电视,2007,11(39):68-69.

[3]刘宇,田晓华.AVS视频标准中块变换系数熵编码器的优化设计[J].微电子学与计算机,2004,21(10):27-35.

[4]田晓华.AVS视频编码中整数变换与熵编码研究[D].武汉:华中科技大学,2004.

[5]WANG Qiang,ZHAO Debin,GAO Wen.Context based 2D-VLC en tropy coder in AVS video coding standard[J].Computer Sci ence&Technology,2006,21(3):315-322.

[6]Cadence Inc&Mentor.Open verification methodology user guide Ver sion 2.0.1[EB/OL].[2012-08-02].http://camlet.googlecode.com/svn/trunk/ovm-2.0.1/OVM_UserGuide.pdf.

[7]刘锦阳.基于FPGA的AVS实时高清视频编码器的研究与实现[D].上海:上海大学,2009.

AVS编码算法全搜索方案优化 篇2

1 传统全搜索算法

传统全搜索算法先分别计算目标宏块与mvp和 (0, 0) 点所对应的参考宏块的代价值, 选二者中较小代价值的为搜索对象, 在扩展range=32个像素范围内搜索。在搜索范围内先以16×16模式在前两个恢复帧中搜索出代价值较小的一帧做为整个宏块的参考帧, 然后在确定的参考帧中搜索其余模式 (顺序为8×8, 16×8, 8×16以及帧内模式) 。在确定8×8模式代价值后与16×16模式代价值比较, 若高于16×16模式代价值则结束搜索;否则抛弃16×16模式继续搜索16×8和8×16模式, 根据最小代价值原则确定该宏块最佳搜索模式。

一般在码率相同情况下全搜索方案可以获得最好的信噪比, 但是计算复杂性太高导致帧率降低。一些改进的搜索算法不做全搜索, 针对特定情况设计特殊搜索路径以便缩小搜索范围, 但是不具有通用性。降低全搜索方案计算复杂性主要采用两种措施:只搜索16×16模式或缩小各个搜索区域尺寸, 对于大多视频序列这种全搜索的改进方案将会导致信噪比下降和码率增高的现象。事实上, 基于块匹配原理的各种不同搜索模式所包含的相关性信息有着紧密的关联性, 但是传统全搜索方案没有充分利用不同模式搜索结果中蕴含的图像相似性信息来降低计算复杂性。本文提出一种新的全搜索方案, 其信噪比和码率与传统全搜索方案具有相同的水平, 但计算复杂性仅略高于16×16搜索模式。

2 SMS全搜索方案

本论文提出一种新的基于子模式拼接 (Sub-Model Stitching, SMS) 的高效运动矢量全搜索方案, 充分利用既有搜索模式的代价值和位置信息, 通过子模式拼接来确定后续搜索模式和缩小搜索范围, 把全搜索的计算量降低到相当于只作16×16模式搜索。由于SMS算法包括了所有模式的更加精细搜索, 在处理运动剧烈的视频序列时有较好效果。SMS基本流程如图1所示。

2.1 SMS方案的搜索流程

SMS的基本流程是:先在两个恢复帧中搜索8×8模式得到4个最佳匹配子宏块和相应的mv={mv0 (i0) , ..., mv3 (i3) }, 其中ik=0或ik=1, k=0, 1, 2, 3是参考的恢复帧索引值, 并用它们指导后续模式的搜索。若相应的4个恢复帧索引值有3个以上相同, 则将其定为唯一的参考帧, 否则确定2个参考帧。确定参考帧后, 若是唯一的参考帧且含有3个以上相邻mv, 则将这4个子宏块直接拼接生成一个16×16的最佳模式, 并且不进行其余模式的搜索;若不存在3个以上相邻的mv或者参考帧不唯一, 则在一个参考帧或两个参考帧中进行判断:是否有2个相邻的8×8子宏块可以拼接组合成为一个16×8 (或8×16) 块;如果有则完成拼接并且只在包含该块的小范围内进行相应16×16最佳模式的搜索;如果没有则在4个8×8块的mv周围扩展进行小范围16×16最佳模式的搜索。将搜索的16×16最佳模式代价值与综合后的8×8最佳模式代价值进行比较并确定16×16最佳模式是否为最终模式, 若是则搜索过程结束;否则进行16×8 (或8×16) 模式搜索, 此时若在4个mv中可以进行拼接组合则实现拼接并作如下判别, 如果存在一组16×8拼接, 判断是否存在另一组16×8拼接;如存在另一组16×8拼接则实现拼接并终止搜索, 以16×8为候选模式;否则不存在另一组16×8拼接, 在余下的2个8×8块周围扩展成16×8块进行搜索, 并且不进行8×16模式搜索。如果不存在一组16×8拼接则按上述原则进行8×16模式的处理。若不存在任何可以拼接的情况, 4个8×8块的mv周围扩展分别进行16×8模式和8×16模式的搜索, 最后比较它们的代价值确定此宏块的最佳模式。

当存在可拼接模式时, 前期搜索结果蕴含了图像之间的相关性, 表明当前搜索的图像块成为最佳模式的概率大大提升, 在此周围扩展搜索的范围可以大大减少。有关搜索范围的讨论将在下文涉及。

2.2 模式的可拼接性

传统全搜索方案中所有宏块必需经过8×8模式和16×16模式的搜索, 大部分模块要经过16×8模式或8×16模式搜索。所以若能不经搜索便直接确定这些模式的mv和参考索引, 则可以大量节约搜索时间。表1是对新的全搜索方案拼接组合成功比率的测试结果, 选取AVS官网提供的5个视频序列, 其中cif格式有Foreman, Children和Football, D1格式有Ice和Soccer。

表1的每个模式项下, 总数是经过该模式搜索的宏块数目, 命中数目指的是可以进行拼接的宏块数目。由表1可知经过8×8模式搜索之后, 除了运动较为剧烈的Football码流之外, 其余序列可以直接拼接组合生成16×16模式的宏块占比超过60%以上, 剩余的宏块中有48%~70%可以经过组合拼接成为16×8块或8×16块, 不经搜索直接与其他模式代价值比较。由此可知, 新算法主要通过拼接组合而不是搜索获得最佳模式, 可以大大降低计算复杂性。

2.3 确定搜索范围

进行8×8模式搜索后, SMS的mv值所对应的像素块最有可能包含在最佳模式中, 因此在其周围区域搜索其余模式, 搜索范围可以相应地缩小。在传统全搜索算法中加入测试语句, 记录各模式最佳搜索结果的mv与8×8模式mv之间的距离, 以其距8×8模式的4个mv中最小者为准。以8×8模式的mv为中心作圆使其覆盖其他各个模式的mv, 半径分别取 进行统计, 考查不同半径覆盖圆的覆盖效率。取5个cif格式的视频序列, 测试结果如表2所示。

矩形搜索的覆盖率并没有大幅降低, 权衡处理速度和搜索精度后将16×16模式、16×8模式、8×16模式的搜索范围定为在8×8模式的mv上下左右扩展8像素比较合理。

确定8×8模式的搜索范围是range=32和range=16, 即对原始数据上下左右都扩展16和32, 主要考察其对PSNR、码率和帧率3个参数的影响。表4是新的全搜索方案对搜索范围的测试结果, 其中范围 (1) 和 (2) 分别是range=16和range=32, 在进行其余模式搜索时均采用上下左右扩展8像素。

由表4的实验数据可知, 对于新的全搜索算法, 搜索范围 (1) 比范围 (2) 的PSNR和帧率都高且码率小, 因此将全搜索新算法的8×8模式搜索范围定为上下左右扩展16个像素。

3 实验与结果

测试的4个全搜索方案分别是原全搜索方案、原方案1 (上下左右扩展32像素, 仅16×16搜索) 、原方案2 (上下左右扩展16像素, 仅16×16搜索) 和SMS搜索方案。新的全搜索方案中8×8模式的搜索范围为扩展16像素。实验程序用pentium (R) Dull-wre cpu处理器, 型号是E5500, 主频2.80 GHz, 内存2 Gbyte。测试序列采用IPPPP…结构, 测试结果列在表5~表8中。

d B

f/s

kbit/s

%

由表5~表7可知, 新搜索方案的PSNR与原搜索方案基本保持一致, 表明图像质量保持不变;仅16×16搜索的两个原方案出现PSNR下降的现象, 尤其是对运动剧烈的视频序列PSNR下降尤为明显, 原因是仅作16×16搜索对图像细节描述粗糙。在帧率方面, 原全搜索方案由于搜索模式多、范围大所以搜索时间长、帧率低;新全搜索方案通增加模式拼接, 比较原全搜索算法帧率大大提升, 几乎能够达到仅16×16搜索的原方案水平。新全搜索与原全搜索两种算法的PSNR和码率基本相同, 而仅作16×16搜索的原方案, 对运动剧烈的视频序列码率相对较低, 而对运动稍微平缓的视频序列码率反而要高, 原因是缺少16×8、8×16和8×8模式的精细描述, 导致帧内模式比例提高, 详见表8。

由上述各表可知, 新的全搜索方案与原方案比较, 码率基本没有变化, PSNR基本保持不变, 帧率提升300%左右, 与原方案2的处理速度相当。可见新的全搜索方案码率得到提升, 对cif序列和D1序列都有效。

4 结束语

本文将AVS帧间运动矢量搜索算法采用模式拼接新的理念在C语言程序实现。新全搜索方案可以处理cif (352×288) 、D1 (704×576) 的4∶2∶0的视频图像, 对视频序列的处理在帧率有大幅提升。本论文的研究内容对AVS帧间运动矢量搜索算法的实现有着实际的参考价值。

参考文献

[1]毕厚杰.视频压缩编码标准——H.264/AVC[M].北京:人民邮电出版社, 2005.

[2]肖敏连.一种快速整像素运动估计算法研究[J].湖南人文科技学院学报, 2011 (10) :129-141.

[3]张子敬, 张志华, 霍家道.基于运动矢量分散度的增强型MVFAST搜索算法[J].科学技术与工程, 2012 (12) :9216-9220.

[4]王荃, 鲍卫兵, 张永智.搜索模式自适应快速运动估计算法[J].电视技术, 2009, 33 (7) :16-17.

[5]包国兴, 谌德荣, 胡宏华, 等.一种快速H.264帧间模式选择算法[J].博士论坛, 2010 (26) :1-2.

[6]刘海华, 雷奕, 谢长生.基于块匹配的运动估计搜索算法研究与实现[J].计算机应用, 2006 (6) :1354-1356.

AVS编码器 篇3

AVS视频编码标准是国内具备自主知识产权的视频编码标准,应用范围包括高清晰度和高质量数字电视广播、网络电视、移动电视、视频通信、数字存储媒体等,其一般包括变换、量化、熵编码、帧内预测、帧间预测、环路滤波等技术模块[1,2]。

高效的视频编码器是AVS视频编码标准推广及应用的关键。纯软件的实现方案难以满足大尺度实时编码的巨大的计算量需求,而基于ASIC的纯硬件实现方案虽然在速度和功耗上更占优势,但在复杂控制、功能灵活性上存在缺陷。为了最大限度地综合利用软件方法和硬件方法两者的优势,需要将软硬件设计两者密切结合起来,软硬件协同设计方法已经引起了人们广泛的关注,并在嵌入式系统中得到了应用[3,4,5,6]。软硬件协同设计方法的关键是如何合理地进行软硬件划分,划分没有统一的标准,需要根据应用需求以及算法的复杂度等进行具体分析和设计。

2 AVS视频编码器体系结构

AVS的码流结构语法层次从高到低,依次是序列、图像(帧/场)、条带、宏块、块。通常基于AVS视频编码标准的编码器以宏块作为编码流程中的基本单位。块是宏块的进一步划分,作为预测、变换的基本单位。

考虑到编码流程中数据结构的一致性,笔者提到的AVS视频编码器在进行系统级的软硬件划分时,根据数据结构的层次关系,以宏块为界,将宏块级的数据处理交给专用的VLSI硬件结构来实现,而宏块级以上的任务交给可编程的RISC核(MicroBlaze)来完成。

如图1所示,底层的专用VLSI硬件结构处理并行度较高的数据,进行复杂的计算,包括整像素运动搜索、亚像素运动搜索、帧内预测、变换、量化以及熵编码。顶层的RISC核(MicroBlaze)主要完成的任务可以细分为两个层次,由于两个层次的任务具有并发性,无法用单独的RISC核来完成,所以采用了两个独立的RISC核。上层RISC核,称PicRisc,完成图像级的编码过程控制及参数设置、传递;下层RISC核,称为MbRisc,完成宏块级的编码过程控制及参数设置、传递。

除了在系统级进行软硬件划分外,还对熵编码模块进行了软硬件划分。视频编码中需要进行熵编码的内容有两大类,一类是预测残差块的信息,另一类是其他语法元素的信息。在熵编码模块,残差块的熵编码是由底层的专用VLSI硬件结构完成的,其他的语法元素由于符号率相对残差块较低,且熵编码的方法细节与残差块的编码细节不完全一致,因此用PicRisc对它们进行熵编码,可以在不影响效率的同时简化熵编码模块专用VLSI的硬件结构。

3 MicroBlaze的设计与实现

MicroBlaze[7]是Xilinx公司推出的32位RISC软处理器核,它通过使用通用逻辑基元,而非FPGA中的硬专用模块来实现。它在Virtex-4 FPGA中的工作频率可达160 MHz,处理速度超过184 DMIPS(Dhrystone测试方法下的每秒百万条指令),适合针对网络、电信、数据通信、嵌入式和消费等市场的产品。基于MicroBlaze所能提供的良好性能,笔者所提到的软硬件协同设计的AVS视频编码器选用MicroBlaze作为RISC核。

开发MicroBlaze处理器,使用的开发工具主要是Embedded Development Kit工具,包括XPS工具和SDK工具。XPS工具完成主要硬件设计调试工作,SDK工具用于设计和调试应用软件。

3.1 MicroBlaze硬件设计

可以利用EDK工具提供的BSB(Base System Builder)Wizard帮助用户较快地构建硬件平台。构建了基本的硬件结构以后,还需要通过总线接口、端口以及地址分配等对各个组件进行有效连接。

除了设计两层MicroBlaze外,还需要添加额外的硬件来完成两层MicroBlaze间的通信以及两层MicroB-laze与底层专用VLSI硬件结构的通信。笔者采用了相对总线机制控制更加简单的读写存储器方式来完成上述通信任务,如图2所示。

为了完成通信,需要添加额外的硬件模块包括:

1)外部存储器访问控制器

exd_lmb_cntlr_Mb和exd_lmb_cntlr_Pic这两个控制单元分别对应MbRisc和PicRisc,均可直接通过实例化lmb_bram_if_cntlr的IP核来实现。

2)块存储器的接口

customBRAMIF_Mb和customBRAMIF_Pic这两个接口单元分别对应MbRisc和PicRisc,需要自定制IP核customBlockRAM interface,并实例化此IP核。最终形成的顶层MbRisc和PicRisc的硬件结构分别如图3和图4所示。

3.2 MicroBlaze软件设计

顶层RISC核(MicroBlaze)的硬件部分设计完成后,使用高级语言C编写代码,开发完成相应的软件部分。两层MicroBlaze的任务不同。PicRisc的软件所需要完成的任务包括:

1)初始化和更新编码参数

如图像类型、图像尺寸、量化参数、图像编码类型(I帧、P帧、B帧)更新编码参数。

2)部分语法元素的熵编码以及码流合成

按照AVS标准文档里所规定的码流结构[1]来进行控制,如图5所示。图5中的block编码的任务是由底层VLSI的熵编码模块完成的,此模块将残差块熵编码形成的比特流存储在图2所示的Block RAM中,最后PicRisc把残差块的比特流与其他语法元素的比特流合成为最终视频编码输出的比特流。

MbRisc软件所需要完成的任务主要是更新宏块级的编码参数,如宏块计数,宏块的量化参数等。

4 仿真及综合结果

对软硬件协同设计的编码器进行仿真验证时,除了需要将底层的VLSI结构以及顶层的两个MicroBlaze实例化外,还需要将编写好的软件初始化写入MicroBlaze的指令存储器中,最终的仿真结果表明MicroBlaze工作正常,功能正确。

设计中采用的硬件平台是Xilinx公司的virtex4-xc4vlx200-ff1513-10,整个设计在ISE 9.2i和EDK 9.2i环境下进行。综合后,两个MicroBlaze共使用了1 932个Slice,最高时钟频率可达147.435 MHz。

5 小结

介绍了MicroBlaze嵌入式RISC核在AVS视频编码器软硬件协同设计中的应用。利用MicroBlaze嵌入式RISC核以及基于MicroBlaze开发的软件可以高效地完成相关处理任务,使本文所提到的AVS视频编码器兼顾了高效性和灵活性,为其对高清视频源进行实时编码提供了强有力的支持。

参考文献

[1]GB/T20090.2-2006,信息技术先进音视频编码第二部分:视频[S].2004.

[2]虞露,胡倩,易峰.AVS视频的技术特征[J].电视技术,2005,29(7):8-11.

[3]PAULIN P G,LIEM C,CORNERA M,et al.Embedded software in real-time signal processing systems,application and architecture trends[J].Proceedings of the IEEE,1997,85(3):419-435.

[4]CHEN Towei,HUANG Yuwen,CHEN Tungchien,et al.Architecture design of H.264/AVC decoder with hybrid task pipelining for high definition videos[C]//Proc.ISCAS 2005.[S.l.]:IEEE Press,2005:2931-2934.

[5]JANG S K,LEE J,CHOI G Y,et al.Hardware-software coimplementation of a H.263 video codec[J].IEEE Transactions on Consumer Electronics,2000,46(1):191-200.

[6]CHIMIENTIA A,FANUCCI L,LOCATELLIC R,et al.VLSI architecture for a low-power video codec system[J].Microelectronics Journal,2002,33(5-6):417-427.

AVS编码器 篇4

1 音视频编码标准简述

20年来, 不论是全球标准MPEG-2还是现在更为成熟的H.264, 专利费用都成为我国电视行业发展的一大阻碍。

MPEG-2是第一代信号源编码标准, H.264则是第二代信号源编码标准, 这些标准都是由ITU-T和ISO共同制定的。AVS是我国具有自主知识产权制定的, 也属于第二代编码标准, 效率与H.264不相上下, 比第一代编码效率高出两倍之多。虽然具有自主知识产权的标准为电视行业的发展带了诸多便利, 但是AVS与H.264还存在着一定的差距, 因此在AVS的基础上, 不断优化和提高编码质量, 形成了全新的AVS+。AVS+与AVS相比增加了许多新技术, 比如高级熵编码、增强场编码等, AVS+向下兼容了AVS的全部内容, 同时相比较于H.264也更加简单, 节约了大量的专利费用, 软件的使用成本也大大降低。

2 AVS+与H.264的对比分析

为比较AVS+和H.264的编码效率和图像质量, 我们利用图像质量分析仪器对两种编码质量进行对比, 主要关注视频的损伤和失真。图像分析仪器基于人眼视觉, 对电视视频质量以PQR值判断其损伤程度, PQR值越小, 则代表损伤越少, 图像质量越好。当测试图像相对静止、颜色比较亮丽时, H.264采用High Profie编码, AVS+采用默认编码, 我们发现AVS+的图像质量与H.264差不多, 8M序列下AVS+更是超越了H.264。

3 AVS+的基本框架说明

AVS+编码的基本框架属于混合编码框架, 与传统视频标准相同。AVS+在技术细节上, 采用了更加实用的复杂度和压缩比, 质量和压缩比有良好的平衡关系。与H.264相比, 压缩编码与H.264相近, 传输复杂度低于H.264, 从而可以更好地进行高质量传输。

下面介绍AVS+编码的基本流程。

首先确定编码帧的类型, 一般我们对整个视频帧序列的第一帧, 以及场景切换帧进行分析, 也有进行随机读取视频帧以I帧编码的方法, 对空间的冗余信息进行有效的压缩。除此之外, 其他帧类型采用帧间编码模式, 对时间轴上的冗余信息进行有效的压缩。

接下来, 将要传输的视频序列的每一帧进行划分, 变成标准大小块, 比如在YUV420序列中16×16像素亮度和两个8×8像素色度, 主要是为了将编码的基本单位转换成宏块。

在上一步的基础上, 对划分好的宏块进行编码, 编码主要是利用帧内或帧间已经过编码的像素, 对该宏块内的内容进行预测, 然后用这个预测值与原始值进行求差, 作为预测残差。预测残差可以进行变化和量化, 通过熵编码组成编码流。量化后的系数要进行反量化, 也就是反变换回归到残差, 将残差与预测值相加, 得到滤波后解码重构图像。

AVS+解码的框架要比编码的原理更加简单, 融合在编码框架之中。解码的过程和编码过程的第三个步骤类似, 也是对熵编码流进行反量化反变换, 求其预测残差然后求和获得重构图像。

4 AVS+数字电视工作原理

AVS+编码是在AVS的基础上优化提升的, AVS+的编码效率和H.264基本相同。

AVS+编码, 信源采用了统一压缩和复用方式, 制定了统一的信道服务协议, 加扰和条件解扰也相对应, 完成数字信号的调制和解调等多种应用解析。信源在进入电视网络之前, 已经完成了音视频信号信源封装TS流和传输编码工作, 也就是说将电视节目分成音频、视频和其他数据进行AVS压缩, 各自形成ES流, 整体加入包头形成PES流, 之后再加入其他的信息, 比如节目信息等进行复用形成TS流。

进入传输网络之前, 不同的节目形成的TS流回进入复用器, 也就是第二级复用, 在这个环节加入节目专有的信息, 通过电视网络传输后, 在接收端从运输层接受编码信号, 然后对信号进行解调还原成压缩编码信号, 恢复成对应的音频和视频流, 再根据相关的数据业务进行解析。

AVS+系统由数字调谐器、信道调解器、解复用器、AVS解码器和解扰器等组成。模拟高频接头接入解码器, 与数字接口等进行去隔行、OSD等处理;数字协调器和解调器对TS流进行加扰, 用户端解扰器在进行条件解扰, 一般是IC卡识别, 解扰TS流后通过解复用和AVS解码最终进行显示。其中数字解调器主要完成对数字信号的接受, 解调器对数字信号进行解码, 从载波中分离包括音频、视频和其他数据的TS流, 这些流包括多个音视频信息和数据。对于一些付费的节目来说, 条件解扰保证了有条件观看和使用, 解扰后的TS流进入解复用器分理不同的节目信息, AVS解码器对分离开的节目进行解析, 最终执行去隔行等操作输出显示。

AVS+高清数字电视的软件框架是有Linux嵌入式数字接受系统, 结合Bootloader、硬件驱动、文件系统和中间件组成的。用户应用层包括EPG、HDTV和GAME等内容, 通过一系列公共的系统API与软件框架结合。在嵌入式Linux内核的基础上, 由JAVA、HTML等提供表述和执行虚拟机, 联合机卡分离系统作为服务层。用户的应用层与服务层由交叉的调试工具和编译工具进行信息的交互, 整个系统最底层在AVS+硬件系统的基础上, 通过Linux底层的驱动和Bootloader来实现具体的硬件功能。Bootloader初始化整个硬件系统, 是嵌入式Linux操作系统的基础, 启动Linux内核后提供相关的操作功能。用户的应用层是数字电视系统中的重要一环, 也是数字电视与用户直接沟通的接口, 大量的用户功能都在应用层完成, 比如OSD显示和EPG处理等。

整个AVS+系统的使用除了硬件和软件的支持外, 还要考虑许多实际的安装因素, 比如电源功率和稳定性等。在系统测试时, 我们可以将用户端接入电视结构, 使用AVS+编码来测试数字电视信号质量, 采用一系列不同的测试图像, 以人眼的视觉效果作为评判观察实验电视结构的图像清晰度和色彩情况。除此之外, 还要对整个观看过程的流畅度以及信号的抗干扰能力进行评判, 适当调整系统结构和相关编码算法, 提高抗干扰能力, 满足性能和系统功能要求, 达到实际应用的需求水平。

5 AVS+技术应用前景

信息化技术应用越来越广泛, 广播电视传播技术也越来越完善, AVS技术在我国有更好的应用市场, 相比较于H.264专利负担也更小, 更简单高效, 大大提高了我国广播电视行业的发展实力。AVS+技术在AVS的基础上进行优化和完善, 随着不断的进步和研究, 势必成为未来广播电视行业的技术主流。

AVS+发展从城市开始, 逐步地将第一代编码MPEG-2用AVS+进行替代, 提高编码质量和视频质量, 配合相关专业设备的使用重新建立数字网络, 首选AVS+技术模式来提高电视网络的整体质量。

在3D数字电视频道中也应用AVS+技术, 将重点放在编码的准确度, 降低视频画面的损伤。

将AVS+技术应用到高清卫星传输当中去, 卫星传输高清信号是未来主要的电视信号传播途径, 有很开阔的应用前景, 而且要在未来推广高清业务, 就必须提高高清业务的质量, 同时提高业务效率, 因此也需要AVS+技术来提升编码效率, 降低传输带宽的压力, 更好地开展高清电视业务。

电视节目从标准清晰度向高清方向发展, 与用户的联系从单向到互联进行转变, 传统电视节目和服务也更加智能化, 广播电视行业正在不断壮大。随着人们对精神享受的要求不断提高, 3D产品的兴起也让AVS+技术的应用变得更加必要, 利用AVS+技术不但能够满足高清电视传输的硬件需求, 也让3D电视业务能够迅速上线, 带动了数字化电视的发展。所以, 各地方无线和有线电视网络都要善于使用AVS+技术发展节目产品, 进一步降低产业投入, 缓和带宽和其他硬件设备的压力。

6 结束语

随着时代的发展, 人们对电视及相关产品的要求也在不断提升, 电视节目的清晰度、流畅度越来越高, 电视节目的形式也更加丰富多样, 高清电视服务和3D电视服务让AVS+技术变得越来越重要, 对广播电视行业的发展也有更加深远的意义。虽然目前AVS+技术还不够完善, 但是已经可以和世界水平H.264相媲美, 今后的发展过程中, 我们要继续发挥自主研发的精神, 进一步提升技术水平, 加快我国现代化信息化建设的步伐。

摘要:随着技术的发展, 高清电视节目逐渐成为主流, 3D电视频道也将得以实现, 传输带宽的压力越来越大, 提高视频的压缩效率成为加快传输速率的迫切需要。AVS+技术是目前我国自主研发的全新视频编码技术, 编码效率更高, 与国际标准的H.264/AVC相比有明显的优势, 可以有效缓解电视行业传输带宽所面临的压力。

AVS编码器 篇5

关键词:AVS,SAD,运动估计,子像素

0 引 言

AVS (Audio Video Coding Standard) 是由我国自主制定, 拥有自主知识产权的音视频编码技术标准。其与H.264/AVC视频编码标准相比, 在保持性能的前提下, 大大降低了运算复杂度。AVS技术标准包括系统、视频、音频, 数字版权管理等4个主要技术标准和一致性测试等支撑标准。视频编码部分使用的主要技术包括帧间预测、帧内预测、变换和量化、熵编码、环路滤波器、缓冲区管理等。其中, 帧间预测的作用是在参考帧中搜索与当前编码块最匹配的块, 尽可能多地消除帧间冗余, 使得需要编码的信息量达到最少, 从而提高编码效率。帧间预测的核心是运动估计, 其运算性能直接决定了视频编码器的性能, 所以一直以来都是一个研究热点。

为了提高运动估计的精度, 在AVS的帧间预测方案中, 对于亮度块在整像素运动估计的基础上还提供了1/4像素精度的运动估计。由于帧图像中只存在整像素点的值, 所以AVS要先对子像素点进行插值, 然后, 再对子像素点进行运动搜索, 查找最匹配的块。这部分运算量较大, 运行时间长, 有进一步改进的必要。本文通过对AVS视频编码标准中子像素运动估计算法的分析, 针对子像素运动估计算法运算量较大的问题, 提出了一种新的基于整像素SAD的快速子像素运动估计算法, 它对现有的AVS技术标准子像素运动估计算法进行了较大的改进与优化。实验结果证明该方法在保持相同性能的前提下, 较大程度地降低了AVS技术标准运动估计算法的复杂度。

1 AVS中的运动估计算法

AVS视频编码的运动估计算法主要由3个部分组成:宏块划分模式, 各种块模式下的整像素运动估计, 精确到1/4像素的子像素运动估计。在4∶2∶0视频格式下, 一个宏块包括一个16×16的亮度块与2个8×8的色度块 (1个Cb, 1个Cr) , 这里仅考虑亮度块。

1.1 宏块的划分

AVS视频编码运动估计算法可以将一个16×16宏块分成16×16, 16×8, 8×16与8×8共4种模式, 如图1所示。它摒弃了H.264中所采用的4×8, 8×4和4×4宏块划分模式。通过精简宏块划分方式, 使其能更好地刻画物体运动, 提高运动估计的准确性。

1.2 子像素运动估计

AVS和H.264都采用了精确到1/4像素精度的运动补偿技术。子像素的内插值, H.264采用6抽头滤波器得到, 而AVS通过4抽头滤波器得到。在保持性能的前提下, AVS减少了插值所需要的参考像素点, 减小了数据存取的带宽要求[2]。

1.3 AVS中运动估计的流程

与H.264类似, 在AVS视频编码的运动估计中, 将一帧图像划分为若干宏块, 分别对每个宏块作运动估计。整像素运动估计是对每种宏块划分模式, 首先在参考帧中搜索与当前块最匹配的块。这里的匹配准则选用绝对误差和SAD (Sum of Absolute Difference) , 其定义如下:

SAD (i, j) =m=1Μn=1Ν|Ρk (m, n) -Ρk-1 (m+i, n+j) | (1)

其中:Pk (m, n) , Pk-1 (m+i, n+j) 可看成是当前数据块和参考数据块中相应点的像素值。然后, 比较每种宏块划分模式下整个宏块的总SAD值, 最小的那个模式, 作为最佳宏块划分模式, 其对应的运动矢量作为整像素运动搜索最佳运动矢量。接着再进行1/2像素精度的运动估计, 寻找1/2像素精度的运动矢量。然后在1/2像素精度的运动估计的基础上做1/4像素精度的运动估计, 在1/4像素精度上选择最优的匹配块, 得到最终的运动矢量。

1.4 现有算法的不足

采用精确至1/4像素精度的运动估计和使用4种不同大小的块匹配模式, 使得AVS具有极好的压缩性能。但是, 复杂的编码模式也增加了算法的复杂度, 大大增加了计算时间。我们运用Intel Vtune性能分析软件对AVS参考代码进行了分析, 发现采用多种块模式进行匹配、做1/2和1/4像素精度运动估计是AVS视频编码过程中耗时较大的环节。对于每一种块匹配模式, 依次进行整像素精度、1/2和1/4像素精度的运动估计, 这需要进行大量的计算。而采用4种不同尺寸的数据块进行块匹配, 更使运动估计所需要的计算量成倍增加。因此, 必须进行优化, 以减少计算量, 而其中的关键就是对运动估计算法的优化。

2 AVS中的运动估计算法优化

2.1 整数像素运动估计的优化

在AVS公布的参考代码 (RM5.2) 中, 整数像素运动估计采用全搜索算法, 全搜索法对搜索范围内的搜索点进行遍历, 寻找使得SAD最小的匹配块, 过程简单可靠。然而, 全搜索法运算量太大, 我们在对H.264参考代码的优化中发现, 类似DS (钻石法) , 4SS (四步法) , NTSS (新三步法) 等快速搜索算法都能在保持性能或性能下降在可接受范围内的情况下大幅度减少编码时间。其中, DS算法针对高清或标清序列的编码效果都要优于其他一些算法。另外考虑到我们下节对于子像素运动估计算法改进的需要, 我们对整像素运动估计的优化中采用DS算法。DS算法的两种搜索模式如图2所示 (实心点为搜索点) 。在搜索时采用了大菱形搜索模式 (LDSP) 和小菱形搜索模式 (SDSP) 。大菱形搜索模式有9个搜索点 (中心点及周围按菱形分布的8个围绕点) , 小菱形搜索模式有5个点 (中心点及与中心点垂直, 水平相邻的4个点) 。DS方式搜索时, 先以预测到的搜索中心为中心, 进行大菱形搜索, 计算9个点, 如果9个点中的最优点不在大菱形的中心, 则将大菱形的中心移至该点, 重复大菱形搜索, 直到最优点处于大菱形中心为止。然后在该点切换到小菱形搜索模式, 搜索5个点得到最终的搜索结果作为运动估计的最优匹配点[3]。

2.2 子像素运动估计算法的改进与优化

如何利用整像素运动估计中已得的SAD来简化子像素SAD的计算方法并预先排除某些子像素点成为最佳匹配点的可能性从而减少计算量, 是我们进行改进和优化的出发点。在此, 我们提出了利用已得整像素SAD值来估算1/2和1/4像素点SAD的方法。子像素运动估计的传统流程首先是利用整像素点的像素值对子像素点进行插值, 得到子像素点像素的基础上再与待编码图像相减得到SAD。但是, 在实际的计算中, 对于如图3中内插1/2像素点k的SAD, 可以表示为下式:

d (k) =i=1mj=1n|ΡijA+ΡijB+ΡijC+ΡijD) /4-Sij| (2)

其中:Sij表示当前待编码数据块的像素值;Pij是与A点相邻的整像素点像素值;m, n代表数据块的纵向和横向尺寸。从式 (2) 可以看出, 由于整像素值和1/2像素点像素值之间的相关性, 可以由整像素点已知的SAD值来估算相邻1/2像素点的SAD值。同样, 对于1/4精度像素点的SAD的计算, 也可以采用整像素点已知的SAD值来估算。通过对视频序列进行统计, 可以看到内插像素点的SAD与周围整像素点的已知SAD值具有如下关系:

d (a) =0.970× (3/4×d (A) +1/4×d (B) ) d (c) =0.970× (1/4×d (A) +3/4×d (B) ) d (b) =0.960× (1/2×d (A) +1/2×d (B) ) (3)

类似地, 像素d, h, l的SAD具有相似的表达式, 如式 (4) 所示:

d (e) =0.925× (9/16×d (A) +3/16×d (B) +3/16×d (C) +1/16×d (D) ) d (f) =0.925× (3/8×d (A) +3/8×d (B) +1/8×d (C) +1/8×d (D) ) d (j) =0.925× (3/8×d (A) +1/8×d (B) +3/8×d (C) +1/8×d (D) ) (4)

同样地, 中间像素g, i, k, m, n, o的SAD也可以用相似的表达式由点A, B, C, D进行预测。

对于上述子像素SAD的计算来说, 需要知道子像素点周围全部4个整像素点, 为了进一步简化算法, 我们通过对各匹配点的权值进行调整, 利用周围3个已知整像素点的SAD值来简单地计算子像素点的SAD值。这样在整像素运动估计采用DS算法时, 我们就能很方便地通过相邻3个整像素点SAD来预测其内插子像素点SAD, 对视频序列foreman, Akiyo, mother_daughter等进行统计[4], 得到如下公式:

d (e) =0.945× (10/16×d (A) +3/16×d (B) +3/16×d (C) ) d (f) =0.950× (7/16×d (A) +7/16×d (B) +2/16×d (C) ) d (g) =0.975× (4/16×d (A) +11/16×d (B) +1/16×d (C) ) d (j) =0.960× (1/3×d (A) +1/3×d (B) +1/3×d (C) ) d (k) =0.990× (1/4×d (A) +1/2×d (B) +1/4×d (C) ) d (b) =0.945× (2/16×d (A) +7/16×d (B) +7/16×d (C) ) (5)

利用已知的整像素点SAD值对子像素点的SAD值进行估算, 省略了子像素的运动估计和内插, 有助于提高计算速度。但是在有些情况下, 估算寻找到的SAD最优点可能并不是真正最优匹配点, 这将会导致重建的图像质量变差。

以上我们简化了子像素点SAD的获取方法, 接着我们利用整像素点的已得SAD值来预排除某些子像素点成为最优匹配点的可能性。如图4所示, 中心点和周围4个邻点的SAD值 (SADC, SADH1, SADH2, SADV1, SADV2) 已知。计算步骤如下:

1) 步骤1:通过比较, 先找出V1, V2, H1, H2中SAD值最小的点 (如H1) , 它与C点之间的1/2像素点作为一个候选1/2像素最优匹配点, 记为P1;

2) 步骤2:找出剩余3个SAD中值最小的点, 如与步骤1中的候选点在同一个方向上 (如H2) , 则直接进入步骤4;如在垂直方向上 (如V1) , 进入步骤3;

3) 步骤3:选择与上两步中的两个方向 (C-H1和C-V1) 夹角为45°的1/2像素点作为另一个候选像素点, 记为P2, 运用上边介绍的基于整像素SAD的1/2像素SAD插值算法得到P2点的SAD;

4) 步骤4:比较P1, P2点的SAD, SAD较小的即为1/2像素的最优匹配点。如只有P1点, 则P1点即为最优点。

对于1/4像素点的估计, 则以找到的1/2像素的最优匹配点为基础, 运用上面我们介绍的基于整数SAD的1/2像素SAD插值算法, 对最优匹配点和周围4个1/2像素相邻点的SAD值进行计算, 然后通过上述的4步, 运用比较方法, 得到最佳1/4像素匹配点。在文献[5]中, 也有类似的子像素运动估计快速算法。但是, 本文在计算子像素SAD的算法上又做了进一步的改进, 减少了计算复杂度, 与整像素DS算法配合得到更好的性能。另外, 文献[5]的算法在确定子像素最优点时, 要计算P1和P2点的SAD来判定最优匹配点, 这和其算法采用传统的先像素插值后计算SAD的方法有关。我们通过改进, 提出了简化的判断条件 (步骤2) , 通过观察相邻整像素点的SAD来判断P1和P2点的最优匹配性。

3 实现与验证

我们的改进和优化基于AVS组织公布的参考软件RM5.1。实验验证时, 帧率为30帧, 编码50帧, 除第一帧是I帧, 其他都是P帧, 参考帧为1帧, 进行RD优化, 熵编码采用CAVLC。量化因子QP分别取22, 28, 32。我们分别对qcif序列glassgow和salesman以及cif序列mobile和claire做了验证。对于qcif序列和cif序列, 运动搜索范围分别设为16和24。验证环境:Pentium-M 1.4 GHz, 512 MB, VC++6.0。验证结果见表1。

注:表中FS代表整像素和子像素均采用全搜索算法 (Full Search) ;DS代表整像素采用菱形算法 (Diamond Search) , 子像素仍采用原参考软件的全搜索算法;DS+NSS代表整像素采用菱形算法, 而子像素采用我们改进后的快速子像素运动估计算法NSS (Novel Sub-pixel Search) 。

4 结束语

通过实验验证, 我们看到本文提出的改进的子像素运动估计快速算法配合整像素运动估计的DS算法, 运用到AVS视频编码中, 比起子像素采用全搜索算法, 较大程度地降低了运动估计的处理复杂度, 减少了编码时间, 而平均SNR (Y分量) 只有微小的降低, 基本保持了原算法的性能, 从而保证了编码图像的质量。

参考文献

[1]虞露.AVS-视频技术概述[J].中国多媒体视讯, 2004, 12 (2) :34-35.

[2]数字视音频编解码技术标准化工作组.GB/T 200090.2[S].北京:中国标准出版社, 2006.

[3]智西湖, 智艾娣.基于H.264编码的运动估计快速搜索算法[J].计算机应用, 2004, 24 (4) :72-74.

[4]EROL B, KOSSENTINI F, ALNUWEIRI H.Efficient codingand mapping algorithms for software-only real-time video cod-ing at low bit rates[J].IEEE Transactions on Circuits andSystems for Video Technology, 2000, 10 (6) :843-856.

AVS编码器 篇6

在AVS视频编码标准中,分像素内插是提高运动估计中图像压缩比的主要方法之一。它通过提高运动矢量位移的精度,使帧间剩余误差变小,从而提高压缩比。分像素插值是以块为基本单位的,运算量大,因此在视频编码中如何设计高效的分像素插值算法对提高程序运行速度等编码性能具有十分重要的意义[1]。

以往的单指令单数据(SISD)同时只能执行一次计算,如需完成一些并行操作,就要连续执行多次计算。使用SSE2指令(Streaming SIMD Extensions 2,Intel官方称为SIMD流技术扩展2或数据流单指令多数据扩展指令集2)可以一次处理多个进行相似操作的数据,从而可以得到更高的性能[2]。SSE2使用了144个新增指令,扩展了MMX和SSE技术,有效地提高了程序运行速度。

通过分析算法原理和SSE2指令并行处理数据的特点,合理使用SSE2指令来优化程序,可以实现对代码的极大优化。由于计算过程中的像素点值均为整数,而SSE2可以对128位数据同时操作,这样就可以同时对8个16位整型数据进行存取和运算,处理数据如果不足8个则补0值。

文献[3]简要介绍了分像素插值原理,但没有提出对程序的优化;文献[4]在介绍分像素插值原理的基础上,对分像素插值算法部分进行了优化,并在优化过程中通过使用MMX指令集,使速率得到了提高。笔者研究利用SSE2指令集实现AVS分像素内插算法优化的方法。

2 分像素内插原理

AVS视频标准定义了2个4抽头的FIR滤波器:水平方向上F1(-1,5,5,-1)和竖直方向上F2(1,7,7,1),进行1/2和1/4亮度样本插值(如图1所示)[3,5]。插值时首先计算1/2像素点,然后计算1/4像素点。

图1中的大写字母标记的为整数像素点位置,均为已知,黑色小写字母标记的灰色块为二分之一像素点位置,白色小写字母标记的深灰色块为四分之一像素点位置。根据不同类型的像素点位置,计算过程如下:

1)二分之一像素位置处的b,s,h,m,可以通过其周围水平或是竖直方向上的4个整数点进行滤波求取中间值,最终得到预测值:

b1=(-C+5D+5E-F),b=max(0,min(255,(b1+16)>>5));

s1=(-G+5H+5I-J),s=max(0,min(255,(s1+16)>>5));

h1=(A+7D+7H+K),h=max(0,min(255,(h1+16)>>5));

m1=(B+7E+7I+L),m=max(0,min(255,(m1+16)>>5))。

其中x=max(0,min(255,(x1+16)>>5)作用为将x的取值限制在0~255之间;(x1+16)>>5是将x1右移5位,即除以32,选择右移方式来代替除法可以降低程序的运算量;加上16是为了实现四舍五入,提高算法的准确度。

2)二分之一像素位置处的j点:首先用F1对bb,h,m,cc滤波,得到中间值j1=(-bb+5h+5m-cc),最终的预测值j=max(0,min(255,(j1+16)>>5))。

3)四分之一像素位置处的a,c,d点:可以通过对其周围最近的整数像素和二分之一像素位置处的像素进行滤波求取中间值,最终得到预测值:

a1=(ee+7D′+7b+E′),a=max(0,min(255,(a1+64)>>7));

c1=(D′+7b+7E′+u),c=max(0,min(255,(c1+64)>>7));

d1=(ff+7D′+7h+H′),d=max(0,min(255,(d1+64)>>7))。

其中D′,E′,H′是相应位置放大8倍的值。

4)四分之一像素位置处的i:首先用F2对gg,h,j和m滤波,得到中间值i1=(gg+7h′+7j+m′),最终的预测值i=max(0,min(255,(i1+512)>>10));其中h′和m′是相应位置二分之一像素点值放大8倍的值。类似有:

k1=(h′+7j+7m′+jj),k=max(0,min(255,(k1+512)>>10));

f1=(hh+7b′+7j+s′),f=max(0,min(255,(f1+512)>>10))。

5)对四分之一像素位置处的e,g,p,r点有:

e=max(0,min(255,(D″+j+64)>>7));

g=max(0,min(255,(E″+j+64)>>7));

p=max(0,min(255,(H″+j+64)>>7));

r=max(0,min(255,(I″+j+64)>>7))。

其中D″,E″,H″和I″是相应像素点值放大64倍的值。

从上面的算法过程可以看出,对于相同位置的像素或是分像素点,所采用的算法思想是相似的,因此可以利用SSE2指令一次读入8个字来并行处理数据。在并行处理中,只要求进行操作的各数进行同种类型的计算,而不需要数据间的相关性。

同时在优化过程中,由于像素点值为由8位转为16位的整型数据,因此,操作过程中不需要考虑溢出问题。

3 优化算法的实现

3.1 数据重排

在优化过程中,SSE2指令可以实现对数据的并行处理。为实现多路数据的并行处理,应将各路数据中进行相同操作的数据放在同一个寄存器中的不同位置,使得单一指令可对多路数据并行操作。

在并行操作的实现过程中,如果数据的原始排序不能满足并行操作对寄存器中数据的位置要求,就必须对原始数据进行重新排序。

以图像处理中像素插值为例。128位寄存器可同时读取8个16 bit的整型数据,这些数据应是同组数据的不同项,而不是不同组数据的同一项,这样才可以实现对同类型的像素点采用相同或相似的运算。表1所示为重排前后的数据。

实际计算中对data0~data3中相同位置的数据进行相同类型的运算,因此为了利用SSE2的并行运算,可以使用_mm_set_epi16()指令一次读入data0′~data3′中相同位置的数据到8个寄存器中。这样,就可以充分使用SIMD指令操作,提高该模块运行效率。该优化方法就是首先将每个宏块(8×8)重新读入,以进行并行数据处理。

考虑到求1个分像素点时需相邻的4点的加和,笔者采用竖向取值,这样可实现加和过程中使用SSE2指令一次求出所需数据,避免横向取值中存在的多次加和问题。

3.2 去循环

尽量去掉程序中的循环次数[6,7]。原先的程序使用了大量的嵌套循环来实现对分像素点值的求取,这样每次执行都会耗费大量的时间来运行这些循环函数,通过使用SSE2指令,可以实现并行运算,这样就可以很大程度地减少循环级数,笔者提出的算法可以实现去除两级嵌套循环,极大地缩短了模块运行时间。

3.3 定义全局变量

把程序中需要多次使用的变量作为全局变量定义,来减少对数据重复定义所耗用的时间。优化程序中有些变量会多次使用,而且值不会发生变化(如程序中需要多次用到的滤波系数),通过全局变量的定义,可以避免每次使用时均需对这些变量重复定义的麻烦,同时也可以缩短程序所需的运行时间。

3.4 数据运算

本优化程序中,考虑到对分像素点的求法,用4个适当位置上的像素点可以求取1个分像素点,利用SSE2并行处理的特点,将垂直方向上的8个像素点设为1个_m128i的数据,同时将原来的滤波系数F改设为4组_m128i数据,其中每组内数据均相同(如对F1(-1,5,5,-1)改设,得到4组分别为F1:_mm_set1_epi(-1),F2:_mm_set1_epi(5),F3:_mm_set1_epi(5)和F4:_mm_set1_epi(-1)。然后用像素点乘对应系数,再将得到的相邻的4个乘积进行相加,将加和通过裁减函数,即可得到所要的结果。类似计算下去,可以得到最终所需宏块的像素值。

举例对上述过程进行说明:

1)将M、C、G、O以及其垂直下面4个整数点设为一个_m128的数c1,然后类似得到A,B,N各自竖直方向的4组数c2,c3,c4,这样就可以得到中间值d0′=(c1×F1+c2×F2+c3×F3+c4×F4),d0=Clip1((d0′+4)>>3)。d0中8个数据就分别为aa,b,s,dd等8个二分之一像素点的最终的预测值。求h,m点时类似。

2)现在设置bb及其竖直方向上的8个二分之一点为一组m128数据c1′,同样得到h,m,cc各自竖直方向的8个二分之一点为c2′,c3′,c4′。得到中间值d0′=(c1′×F1+c2′×F2+c3′×F3+c4′×F4),d1=Clip1((d0′+4)>>3)。d1中8个数据就分别为hh,j等8个二分之一像素点的最终的预测值。其余类似位置求法相同。

3)当得到ee,gg等二分之一点预测值之后,就可以利用该算法思想来求取a,c等四分之一位置点的预测值,最后可以得到需要的1个8×8宏块。

4 实验测试

为验证SSE2优化方法的有效性,实验从一致性测试码流中选取了数组不同编码码流,分别测试优化前后该模块所需运行时间,来对优化之后的性能进行评估。

4.1 测试平台

测试平台:Intel Pentium Dual CPU E2160@1.79 GHz;0.98 Gbyte的内存;Windows XP professional操作系统。程序在Visio Studio 2008下编译优化。用Intel VTune Performance Analyzer 9.0进行测试。

4.2 测试序列

本测试对AVS工作组rm52k_r1进行。测试序列为标准组提供的12_zju_0_0_4.0.avs(352×288),04_broadcom_1_0_4.0.avs(704×480),02_cesi_0_0_6.0_frame.avs(1 920×1 088),07_longjing_2_2_6.0.avs(720×576),格式为4∶2∶0。

4.3 测试过程说明

使用VTune提供的Call Graph功能对程序进行测试。VTune要求在编译程序时,需要链接器参数/fixed:no(/profile)。VTune会给出程序中各函数的执行情况与调用情况。而对于各功能模块的时间复杂度就以其对应函数占用时间的总和来进行衡量。

4.4 测试结果比较

表2中列出了4组测试序列在程序优化前后函数的调用次数以及耗费的总时间。

由此可见,对于不同的测试序列码流,均可以使用SSE2指令集来实现对程序的优化,而且均可以实现执行时间节省2/3以上。

在实现过程中,根据以下代码设计原则可以实现程序效率的提高:1)把需要执行的数据进行重排,以实现并行运算需求。2)尽量去掉程序中的循环次数。3)把程序中需要多次用到的变量作为全局变量来定义,从而减少对数据重复定义所耗用的时间。

摘要:视频编码中分像素插值是运动补偿中比较复杂的算法,耗时较长。利用SSE2指令系统并行处理的特性,针对AVS视频编码的分像素插值部分提出一种优化算法。实验结果表明,该算法可使该模块的平均执行时间缩短为原来的1/3。

关键词:分像素插值,运动补偿,AVS标准,视频编码,SSE2

参考文献

[1]董志平,陈水仙,艾浩军.视频编码中环路滤波的SSE2优化方法研究[J].计算机工程与应用,2006(8):34-36.

[2]钱金法,赵力.基于SSE2的AVS-M视频编码器优化[J].电视技术,2007,31(12):28-30.

[3]严明,胡国荣.AVS视频标准中的分像素插值算法设计[J].中国传媒大学学报:自然科学版,2006,13(4):44-48..

[4]林琳.AVS视频编码标准中的分像素插值算法优化[D].吉林:吉林大学,2007.

[5]SUH J W,JEONG J.Fast sub-pixel motion estimation techniqueshaving lower computational complexity[J].IEEE Trans.ConsumerElectronics,2004,50(3):968-973.

[6]GB/T 2000902-2006,信息技术先进音视频编码第2部分:视频[S].2006.

AVS编码器 篇7

AVS[1]是我国具备自主知识产权的第二代信源编码标准, 包含九个部分, 其中第二部分 (AVS-P2) 为视频编码标准。AVS视频编码标准具有四大特点[2]: (1) 性能高, 编码效率比MPEG-2[3]高两倍以上, 与H.264[4]的编码效率相当; (2) 算法复杂度比H.264 低; (3) 软硬件实现成本都低于H.264; (4) 专利授权模式简单, 费用明显低于同类标准。

AVS rm_52j参考代码是目前比较完善的AVS开源解码器版本。其在主流配置PC上解码QCIF图像的速率为12帧/秒, 在性能明显低于PC的XSBase270平台上更是无法达到实时解码, 因此移植后需要进行大量优化。

和H.264等视频标准一样, AVS也采用了分像素插值来提高运动估计中运动矢量位移的精度。作为数字视频技术中非常关键的部分, 分像素插值是解码器中复杂度最高的部分, 在软件实现时占用了大约三分之一[5]的运算量。使用Intel Vtune7.1 对rm_52j参考代码分析得到亚像素插值部分占用了37.88%的解码时间, 也证明了文献[5]的观点。可见, 提高亚像素插值速度对提高AVS软件解码器的效率颇为关键。

对亚像素插值的研究一直在进行中。H.264的插值实现已有相当多的研究及成果[6,7]。AVS标准的亚像素插值研究多集中在硬件实现[8], 而针对AVS软件解码器的亚像素插值研究相对较少。

1 AVS亚像素插值算法介绍

1.1 AVS亮度插值算法

AVS标准的亮度插值为1/4像素精度, 亚像素点分为1/2亚像素点与1/4亚像素点, 位置如图1所示。图1中大写字母标识的为整像素点样本, 有色圈内小写字母标识的为1/2亚像素点, 白色圈内小写字母标识的为1/4亚像素点。

二分之一样本的预测值通过4抽头滤波器F (-1, 5, 5, -1 ) 计算得到。1/2亚像素点b、h分别由水平、垂直方向的四个整像素点通过滤波器F, (-1, 5, 5, -1 ) 得到;1/2亚像素点j由水平或垂直方向上最近的四个二分之一样本中间值进行滤波计算后得到, 采用水平或垂直方向滤波得到的值相同。

四分之一样本的预测值通过4抽头滤波器F (1, 7, 7 , 1 ) 计算得到。1/4亚像素点a、c、d、n由水平、垂直方向上四个最近整、半像素点中间值滤波计算得到;对水平、垂直方向上四个最近半像素点中间值滤波计算得到1/4亚像素点i、k、f、q;1/4亚像素点e、g 、p和r由j点像素中间值及对应的对角整像素点 (D、E、H、I) 经双线性滤波器F3 (1/2, l/2) 滤波即进行四舍五入求平均得到。

1.2 AVS色度插值算法

AVS标准中, 色度插值为1/8像素精度。色度样本没有独立的运动矢量, 插值中直接由对应亮度块的运动矢量导出色度运动矢量。当图像格式为4:2:0 时, 色度运动矢量与亮度完全相同, 当图像格式为4:2:2时, 水平运动矢量相同, 色度垂直方向的运动矢量为亮度垂直方向运动矢量的两倍。

色度插值时采用距离加权, 如图2所示。图中dx、dy为相对左上角整像素点A的水平、垂直距离, dx等于mvC_x & 7, dy等于mvC_y & 7。根据式 (1) 计算可得到预测样本:

2 亚像素插值优化方法

2.1 图像扩展

亮度亚像素插值过程中, 插值所需的整像素点坐标存在超过图像边界的可能性, 而读取图像边界外的像素点值可能会造成读取非法地址、读入值错误等问题, 所以读取参考样本时要限制整像素点的横、纵坐标的范围, 使其不超出图像边界, 当像素点坐标超出图像边界时取最近的图像边界上像素点来替代参与计算。为限制整像素点的横、纵坐标的范围, 每读取一个像素点需进行二次max及两次min计算。在获取一个8×8子块的参考样本过程中, 若参考块为整像素块, 则直接读取64个整像素点, 需进行256次max/min计算, 这是耗费计算量最少的情况。而在需要进行1/4亚像素点插值时, 计算e、g、p、r位置亚像素样本块需要读取416个 (次) 整像素, 进行1664次max/min计算。获取每个子块的样本都需要耗费上述计算量, 那么在解码整个视频序列的过程中这项计算必然耗费大量时间。

基本上所有采用运动补偿的视频解码器都会碰到计算量巨大的问题, 特别是采用1/4精度插值的视频标准。在H.264解码器的设计中已运用图像扩展进行简化计算处理, 如文献[9]中就采用了该方法并取得了良好的效果, 在本文中也将这一方法应用于AVS解码器来减少为限制像素点坐标而带来的计算量, 也可以使流水线不必由于等待 max/min计算的结果而中断, 以此来提高解码速率。

借鉴文献[10]在H.26L解码器中图像边界扩展的方法在AVS解码器中进行图像扩展, 参考图像向四周扩展 (具体扩展方向如图3所示) 。

向左扩展时, 扩展区域中一行内像素值相同, 取同一行图像左边界上像素点的值, 向右扩展时取图像同一行中右边界上的像素值。同样地, 向上、下两个方向扩展时, 取同一列中图像上、下边界的值。这样扩展完之后, 图像的四个角上还有四块空白区域, 这四个方块区域内的所有像素点值均取图像相应顶角上的像素值, 例如左上角方块区域中像素点都取图像未扩展前左上顶点像素点的值。

下面将讨论边界向外扩展的宽度。该解码器应用于手持终端, 解码的图像大小一般为352×288, 相当于AVS基准档次2.0对应的图像大小。基准档次2.0中规定最大垂直运动矢量范围 (帧编码) 为[-128, 127.75], 按这个标准, 扩展宽度需要为128个像素。显然进行128个像素的边界扩展会使存储图像空间变成原来的四倍左右, 且事实证明完全没有必要进行如此大宽度的扩展。因为即使扩展得再宽, 扩展出来的像素值都是相同的。在编码时, 同样的样本, 出于码率的考虑一定会选择较小运动矢量, 所以运动矢量最多超出图像边界一个宏块的宽度, 此时整个样本宏块中的像素均为边界上的像素值, 所以取扩展宽度为一个宏块的宽度, 即16个像素。

在实现图像边界扩展的过程中, 以下几点也值得注意。首先, 扩展的像素点均为图像边界像素点值, 可以采用memcpy等批量处理函数或指令, 使优化效果更明显。其次, I、P帧之间的B帧越多, 优化效果越好。只有被参考的图像即I、P帧需要扩展, 可见在B帧越多的序列中, 需扩展的图像所占比例越小, 扩展耗时越少, 而且B帧主要采用帧间预测, 需要获取的样本多, 优化效果好, 所以B帧所占比例越高的视频序列, 优化效果自然也越明显。另外, 扩展的像素点个数与图像宽、高之和呈线性关系, 而所需插值的样本一般与图像大小即长宽之积接近, 所以图像越大, 边界扩展所消耗的时间解码时间中占的比例越小, 优化性能越好。例如采用720P图像, 图像扩展时间不会超过解码时间的0.1%[11]。

2.2 色度插值优化

上文已经介绍过AVS色度插值的过程, 其色度的插值计算如式 (1) 所示。根据该式可以看到, 并不是所有情况下都需要完整地按照式 (1) 进行插值计算。当dx、dy均为0时, B、C、D点像素前的系数均为0, 插值样本即为A点整像素点样本, 可以直接从参考帧中得到A点位置的样本宏块, 省去了读取B、C、D点样本块及计算的时间, 可以节省3/4以上的耗时;当dx为0而dy不为0时, B、D像素点系数为0, 只需读取A、C整像素点进行计算, 计算公式也可省略为式 (2) :

同样当dy为0而dx不为0时, C、D像素点系数为0, 只需读取A、B整像素点进行插值计算, 计算公式可省略为式 (3) :

以上两种情况只读取两个像素点进行计算, 可节省50%读取整像素点时间及计算量。只有当dx、dy均不为0时, 才需要读取A、B、C、D四个点, 按原插值计算式进行计算。

以上优化方法的效果与dx、dy为0的概率有关。dx、dy为0的比例越大, 则优化效果越好。下面将推导一般情况下上述方法的优化效率。

假设dx、dy的值均匀分布在0~7之间, 则dx为0的概率为12.5%, dy为0的概率亦为12.5%, 两者都为0的概率为1.5625%。上述优化方法的理论耗时为未优化前耗时的84%, 可以得到16%的优化效果。具体计算见式 (4) :

根据上述方法, 分四种情况对色度亚像素进行插值, 可以在完全不影响插值结果或降低精确度的同时减少计算量, 并且减少了整像素点的读取量。优化过程中常使用到SIMD指令, 而使用SIMD指令时, 不仅需要读取整像素点, 还需要根据指令要求排放数据, 否则就无法发挥SIMD指令的优势。采用SIMD指令后, 运行的瓶颈往往不再是计算耗时, 而是数据读取及排放消耗了大量时间。所以上述插值优化更重要的意义在于减少了数据读取及排放的时间。

2.3 分支跳转的查表实现

亮度亚像素插值中, 亚像素点相对整像素点有16种不同的位置, 这16个位置为:整像素点D, 二分之一像素点 b、h、j以及四分之一像素点a、c、d、e、f、g、i、k、n、p、q、r。前面已经介绍过了AVS的亮度插值算法, 可以看到, 这16个不同位置的亚像素点需要按16种不同的计算进行插值, 根据mv_x、mv_y二进制值的末两位来判断需要调用哪个位置像素点的插值函数。

最简单直接的实现方式就用判断选择语句, 依次比较, 如用if-else语句先比较mv_y再比较mv_x来实现。用if-else语句实现的程序流程如图4所示, 其中Mc_D~Mc_r为插值D~r这16个位置上亚像素的函数。最坏情况, 所需调用的插值函数为流程的最后一个分支, 如在图4流程中需调用Mc_r, 需要经过8次比较及跳转, 执行时需要经过16条汇编指令;最好情况下, 所需调用函数为第一个分支, 如图4流程中的Mc_D, 需要进行2次判断跳转, 经过4条汇编指令完成执行过程。假设各个位置亚像素插值的概率相同, 则平均需要经过10条汇编指令完成调用相应的插值函数。

上述if-else实现中, 多个分支使实现跳转时需要经过平均10条指令实现, 而且分支会使流水线中断, 存在较多分支将不利于流水线的顺利执行, 使得流水线的作用减弱。针对这种情况, 嵌入式软件实现时常用查表来提高跳转速度。图4为采用查表方式来实现这段分支程序。

建立一个函数指针4×4的二维函数指针数组, 每个数组元素指向实现对应位置分像素插值的函数, 如表1所示。

以x、y方向运动矢量mv_x、mv_y的末两位作为索引, 调用相应的函数进行插值, 得到所需的亚像素样本。如当mv_x为01、mv_y为10时, 即调用Mc_f插值f位置的亚像素子块。

用查表方式实现所需函数的调用, 可通过一次查表即跳转到相应函数程序入口, 每次跳转耗费的时间为固定值。查表一次所需的时间为两次偏移计算以及跳转时间, 明显少于if-else语句最坏情况的消耗时间, 也少于平均情况下耗费的时间。

色度亚像素插值中的优化对dx、dy是否为0进行判断, 分四种情况进行插值计算, 所以也引入了跳转分支。现在建立一维函数指针数组, 数据成员为Mc_00~Mc_11分别针对dx非0/dy非0、dx非0/dy为0、dx为0/dy非0、dx为0/dy为0四种情况的色度插值函数。以运动矢量的mv_y==0的结果左移一位加上mv_x==0的判断结果作为索引 (Index) 查表跳转至调用所需函数的程序入口, 对应关系如表2所示。

一般来讲, 存在三个分支时, 用一维查表方式实现跳转分支与if-else语句实现耗时相同, 当存在更多分支时, 查表实现跳转的速度会更快。现在亮度插值过程中存在16个分支, 色度插值存在4个分支, 所以用查表方式实现在色度插值中会有一定的优化效果, 但效果更明显的还是在亮度插值中的应用。

3 性能测试及分析

3.1 测试环境

以下亚像素插值优化性能均为在XSBase270平台上运行的测试数据。XSBase270开发板是基于PXA270处理器的开发平台, 主要硬件资源:Intel Xscale PXA270 (520MHz) 、SDRAM 64M、Intel Strata FLASH 32M、Sharp 8”TFT 6403 480液晶屏、以太网LAN91C113 [12] 。

本文优化的解码器已经过针对XSBase27平台的移植, 主要面向移动终端, 所以解码的视频序列分辨率较低, 一般为QCIF大小, 并考虑到对不同图像大小序列的适应, 测试视频序列图像大小选为352×240及352×288。同时, 为对比优化方法在解码不同特性视频序列时的效果, 找出各优化方法最适用的视频序列类型, 根据视频序列变化速度的不同选择了表3中所列的四个常用测试视频序列。所有测试序列均由rm_52j版本参考代码编码生成。

3.2 图像扩展

图5为边界扩展的优化效果。no_opt一栏为未优化前完成一个8×8子块亚像素插值耗费的时间, 单位为us, opt一栏为优化后的耗时。在考虑图像扩展的优化性能时, 必须将用于扩展的时间考虑在内。图5中的数据已经将整个视频序列中图像扩展耗费的时间除以进行亚像素插值的次数加到了子块插值耗费的时间上。

从图5的优化性能数据中可以看到foreman、football两个视频的优化效果更明显, 可达到20%以上, 其中foreman这一视频序列的优化效果尤为突出, 为34.23%。Garden与Coastguard两个视频序列的优化效果相对较低, 分别为17.88%与11.54%。

未为优化前, football与foreman两个视频插值耗时也明显比Garden及Coastguard长, 插值过程复杂, 说明预测样本中1/4亚像素样本占的比例更大, 因此插值过程中滤波计算次数多, 滤波计算时间占程序执行时间比例大。滤波计算中更多的时间消耗在读取整像素点样本而不是乘加计算的时间。图像边界扩展后, 读取整像素点消耗的时间减少了即滤波计算速度得到提高, 插值过程中滤波计算比例大的视频序列优化效果也就更明显。

3.3 色度亚像素插值优化

色度亚像素插值优化性能测试选用了Garden、mobile、football三个视频序列。图6为优化前后对一个宏块进行色度亚像素插值所耗时间的对比。no_opt一栏为未优化前完成一个8×8色度块亚像素插值耗费的时间, 单位为us, opt一栏为优化后的耗时。

从图6中的数据可以看到, 三个视频序列的优化效果相近, 均为10%~16%, 与前文估算的16%的理论值基本吻合。

实测结果与理论估算的少许偏差是由于测试的三个序列中dx、dy为0的概率比平均概率低。色度插值过程优化是省去了距离加权计算时, 权重为0的整像素的读取及计算, 效果的好坏取决于该视频序列色度运动矢量dx、dy为0的比例即预测样本为整像素点的比例。当这一比例偏低时, 优化性能有所下降。

3.4 查表方式优化

图7为查表方式的优化效果。no_opt一栏为用if-else结构语句描述的一个8×8子块亚像素插值函数执行时耗费的时间, 单位为us, opt一栏为改为查表方式实现分支程序后的耗时。

从图7的数据中可以看到, 解码Garden、foreman两个视频序列时优化效果比较好, 分别为15.51%与20.43%, 比football的9.37%与coastguard 6.23%的优化性能要高出许多。

通过查表方式调用函数消耗的时间为固定值, 各视频序列优化效果不尽相同, 是由于未优化前跳转耗费的时间不同。if-else结构语句的执行时间取决于经过几次判断才找到正确的分支, 所以需调用函数是第几个分支决定了跳转耗时, 需调用函数的所在的分支越靠后则消耗时间越长, 与查表消耗的固定时间之差越大, 在与查表方式的对比过程中优化性能也就越明显。

4 结 论

本文所列的三种优化方法能分别对某一特点的视频序列具有良好的优化效果。图像边界扩展适合需要1/4亚像素样本多, 插值过程复杂的视频序列, 效果最好的foreman序列插值效率可得到34.23%的提高。查表方式对于选择插值函数跳转时, 分支靠后, 跳转耗时长的视频序列比较有效, 测试序列中的最佳优化效果可以使插值耗时减20.43%, 即测试foreman时得到的数据。色度插值简化实现的优化性能取决于运动矢量mv_x、mv_y末三位为0的概率, 测试中几个视频序列得到的结果比较平均, 可以减少10%~16%插值所耗费的时间, 基本符合了理论估计的优化性能。

这三种优化方法很重要的一个优点在于没有改变插值算法也完全不会降低图像解码质量与精确度。结合这三种优化方法, 能有效地提高亚像素插值这一解码过程中最耗时的部分, 对在XSBase270平台上实现AVS软件解码器的实时解码很有意义。

摘要:亚像素样本插值是视频解码器中计算量最大、耗时最长的部分, 在我国第二代信源编码标准AVS的解码器中也不例外。通过图像扩展避免了获取整像素样本时的边界判断;根据运动矢量判断是否需要进行水平、垂直方向的色度分像素插值, 据此对色度插值分四种情况分别实现;并且以查表方式实现了亮、色度插值时的分支跳转, 减少跳转耗时。结合上述三种方法, 提高了XS-Base270平台上AVS解码器的亚像素插值部分的性能, 在完全不影响解码质量的情况下, 减少了20%到30%亚像素插值耗费的时间。

关键词:AVS,运动补偿,亚像素插值,优化,XSBase270

参考文献

[1]数字音视频编解码技术标准工作组.AVS ICC65J2005信息技术先进音视频编码 (第二部分:视频) 报批最终稿[S].

[2]高文, 黄铁军.信源编码标准AVS及其在数字电视中的应用[J].电视技术, 2003 (11) :4-6.

[3]ISO/IEC 13818-2-2000 Generic Coding of Moving Pictures and As-sociated Audio Information Part 2:Video.2000.[S]

[4]Draft ITUrecommendation and final draft international standard of jointvideo specification (ITU-T Rec.H.264/ISO/IEC 14496-10 AVC) [S].JVTof ISO/IEC MREG dnd ITV-TVCEC, JVT-C050, 2003.

[5]严明, 胡国荣.AVS视频标准中的分像素插值算法设计[J].中国传媒大学学报:自然科学版, 2006, 13 (4) :44-48.

[6]郑保重.H.264在嵌入式多核处理器上的解码优化研究[D].大连:大连理工大学, 2005.

[7]Fang Wei, Xueming Li.Performance Lossless Optimization of Image In-terpolation in H.264/AVC[C]//ICSP2006 Proceedings.

[8]胡倩, 虞露.AVS插值算法的一种搞笑的硬件结构设计与实现[J].电路与系统学报, 2008, 13 (3) :148-152.

[9]刘羽楠, 国澄明.基于TMS320DM642的H.264解码器的实现与优化[J].电子测量技术, 2007, 30 (6) :96-99.

[10]Lappalainen V, Hallapuro A, Hamalainen TD.Complexity of optimizedH.26L video decoder implementation[J].IEEE Trans Circuits Syst.Video Technol, 2003, 13:717-725.

[11]董斌, 姜昱明.AVS软件解码器的优化[J].计算机工程与设计, 2006, 27 (4) :618-621.

上一篇:在水产无脊椎动物中下一篇:优势与约束条件