CN1870748A - 因特网协议电视 - Google Patents
因特网协议电视 Download PDFInfo
- Publication number
- CN1870748A CN1870748A CN 200510066767 CN200510066767A CN1870748A CN 1870748 A CN1870748 A CN 1870748A CN 200510066767 CN200510066767 CN 200510066767 CN 200510066767 A CN200510066767 A CN 200510066767A CN 1870748 A CN1870748 A CN 1870748A
- Authority
- CN
- China
- Prior art keywords
- video
- standard
- avc
- coding
- frame
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明公开一种提供视频节目的***,包括:节目中心,用于接收视频源节目并将所述视频源节目转换成适于在因特网上进行流传输的媒体信号;内容传送中心,用于从所述节目中心接收所述媒体信号并使用所述媒体信号通过在因特网上进行流传输来传送所请求的节目;以及订户设备,用于从内容传送中心请求节目。
Description
技术领域
本发明一般地涉及因特网协议电视和视频节目提供***,更具体地说,本发明涉及能够提高编码和解码速度的H.264/AVC基本档次编解码器的优化技术。
背景技术
H.264/AVC是由ITU-T VCEG和ISO/IEC MPEG两个组织联合开发并制订的视频编码国际标准,于2003年5月正式发布。H.264/AVC采用了大量先进的视频编码技术以提高编码效率以及保障网络应用的灵活性。在相同视觉质量的前提下,H.264/AVC的比特率相比于早期的标准大约降低50%。对于高时延的应用,H.264/AVC的优势更加明显。
本发明致力于H.264/AVC基本档次编解码器的优化研究,通过算法优化以及多媒体指令优化来达到尽可能高的编码和解码速度,主要内容如下。
发明人详尽对比了H.264/AVC与先前的视频编码标准,归纳了H.264/AVC在提高编码性能以及信道适应性方面的特色技术。H.264/AVC对编码性能的提高主要来自于以下四方面:增强的运动预测能力、小块精确DCT变换、自适应环内去马赛克滤波、以及增强的熵编码方式。在保障数据传输的鲁棒性以及在不同网络环境下操作的灵活性方面,H.264/AVC采用的新技术包括:参数集结构、NAL单元结构、灵活的条带使用、条带数据分区、冗余编码图像等等。
针对H.264/AVC基本档次解码器的优化,发明人首先对解码器的主要功能模块进行了复杂度分析,确定了H.264/AVC基本档次解码器中最耗时的几个模块。然后有的放矢,分别提出了运动补偿快速算法、熵解码快速算法、IDCT快速算法、以及针对Intel CPU的MMX/SSE/SSE2多媒体指令优化技术。实验表明,纯C优化工作使得解码器速度提高到原来的七倍左右,多媒体指令优化工作使得最终的基本档次解码器的解码速度是未优化版本的九倍左右。
对于H.264/AVC基本档次编码器的优化,发明人提出了改进的率失真优化算法、新颖的“跳过”宏块快速检测法、以及快速运动搜索算法。实验表明,所采用的优化策略以较小的失真换取了编码速度29~47倍的提高。
最后,发明人还归纳了H.264/AVC的热点研究方向以及相关产业链,希望提供后续研究者一些可迹的线索。
发明内容
基于上述情形和发明人的研究,本发明提供一种提供视频节目的***,其特征在于包括:节目中心,用于接收视频源节目并将所述视频源节目转换成适于在因特网上进行流传输的媒体信号;内容传送中心,用于从所述节目中心接收所述媒体信号并使用所述媒体信号通过在因特网上进行流传输来传送所请求的节目;以及订户设备,用于从内容传送中心请求节目。
附图说明
本发明的细节、关于其结构和操作,可以参考附图来最好地理解,其中相似的参考数字指的是相似部分,并且其中:
图1示出ITU-T与MPEG视频标准的发展历程;
图2示出视频编码器图解;
图3示出视频解码器图解;
图4示出视频标准范围;
图5示出H.264/AVC视频编码器结构;
图6示出存取单元结构;
图7示出H.264/AVC宏块编码结构;
图8示出不使用FMO将图像划分为条带的一个实例;
图9示出QCIF图像采用FMO的两个实例;
图10示出Intra_4×4预测模式,其中(a)示出a-p的值由A-Q求得,(b)为Intra_4×4模式的八种预测方向;
图11示出宏块的划分;
图12示出多帧运动补偿;
图13示出去马赛克滤波器原理;
图14示出去马赛克滤波器的性能,其中左边为未采用去马赛克滤波器,右边为采用去马赛克滤波器;
图15示出H.264/AVC的演化进程;
图16示出视频标准序列,其中(a)为flowergarden 250帧,(b)为foreman 300帧,(c)为tempete 260帧,(d)为mobile 300帧,(e)为highway 2000帧,(f)为paris 1065帧;
图17示出1/4像素精度的亮度块插值图解,其中整数点用带阴影的大写字母表示,分数点用不带阴影的小写字母表示;
图18示出1/8像素位置的色度块插值图解;
图19示出参考帧填充图解,其中(a)为原始参考帧,(b)为填充实例,(c)为填充后的参考帧,(d)为填充草图;
图20示出相邻块选取图解,其中(a)示出当前块与邻近块相同大小的情形,(b)示出当前块与邻近块不同大小的情形;
图21示出完全搜索方法;
图22示出六边形搜索,其中①为大六边形,②为小六边形;
图23示出分数点完全运动搜索方法;
图24示出不同码率下的主观质量比较,其中(a)为原图,(b)为400K的情形,(c)为600K的情形,(d)为800K的情形;
图25示出H.264/AVC媒体产业链;
图26示出制作平台示例;以及
图27示出播放示例。
具体实施方式
H.264是目前最新的视频编码国际标准,2003年5月正式发布。该标准由负责通信技术标准化的ITU-T(国际电信联盟电信标准化部门)与ISO(国际标准化组织)联合制定,H.264又名“MPEG4 AVC(Advanced Video Coding)”。H.264/AVC的数据压缩率是MPEG2的2倍以上、MPEG4的1.5倍以上。H.264/AVC不仅压缩比高,而且对网络传输具有更好的支持功能。它引入了面向IP包的编码机制,有利于网络中的分组传输,支持网络中视频的流媒体传输。H.264/AVC具有较强的抗误码特性,可适应丢包率高、干扰严重的无线信道中的视频传输。H.264/AVC支持不同网络资源下的分级编码传输,从而获得平稳的图像质量。由于H.264/AVC更高的压缩比、更好的IP和无线网络信道适应性,所以该标准必将在数字视频通信和存储领域得到越来越广泛的应用。
同时也要注意,H.264/AVC获得优越性能的代价是计算复杂度的增加。据估计,编码的计算复杂度大约相当于H.263的三倍,解码复杂度大约相当于H.263的两倍。因而H.264/AVC的实用化研究是现阶段视频领域的一个研究热点。本发明即致力于H.264/AVC基本档次编解码器的优化研究,通过算法优化以及多媒体指令优化来达到尽可能高的编码和解码速度。本说明书的内容安排如下。
第1部分概述国际电信联盟(ITU-T)的H.26X系列视频标准以及国际标准化组织(ISO)的MPEG系列视频标准,并对视频国际标准中普遍采用的档次和级别做了简要介绍。
第2部分对H.264/AVC视频标准的网络提取层(NAL)和视频编码层(VCL)做了比较详尽的阐述,并将H.264/AVC与先前的视频编码标准相比,归纳了H.264/AVC提高编码性能以及信道适应性的特色技术。
第3部分致力于H.264/AVC基本档次解码器优化技术。首先对参考代码进行裁减得到H.264/AVC基本档次解码器,然后通过复杂度分析确定了H.264/AVC基本档次解码器中最耗时的几个模块:运动补偿、熵解码、IDCT、去马赛克滤波、以及缓冲区管理。然后针对这些模块的具体特性分别提出了与平台无关的纯C优化技术以及针对IntelCPU的MMX/SSE/SSE2多媒体指令优化技术。实验结果表明,纯C优化工作使得解码速度提高到原来的七倍左右,多媒体指令优化工作使得最终的基本档次解码器的解码速度是未优化版本的九倍左右。
第4部分给出了完整的H.264/AVC基本档次编码器的算法优化策略,提出了改进的率失真优化算法、新颖的“跳过”宏块快速检测法、以及快速运动搜索算法。实验结果表明,所采用的优化策略以较小的失真(最高为0.16db)换取了编码速度29~47倍的提高。
第5部分发明人就目前H.264/AVC的热点研究方向以及相关产业链进行了一定的归纳,希望提供后续研究者一些可迹的线索。
1.视频标准概述
数字存储媒体、电视广播以及通信等应用领域对于运动图像及其伴音图像的通用编码方法的要求日益增大,视频标准即应这种要求而产生。它的用途在于可以使运动视频数据作为一种计算机可处理的数据形式,可以存储在各种存储媒体上,可以在现存或未来的网络上发送、接收,也可以在现存或未来的广播信道上传播。
1.1视频标准简介
标准对于通讯而言是至关重要的。没有发送者和接收者所共同理解的通用语言,通讯就不可能实现。对于需要传输视频数据的多媒体通讯,标准就显得更加重要了。视频编码标准不仅要制定一种通用的语言(即我们常说的比特流语法,bitstream syntax),而且这种语言必须非常有效。这种有效性包含两个方面:一方面,标准必须依托于一种优秀的压缩算法,这种算法能够降低传输视频数据时的带宽需求;另一方面,编码器和解码器的实现要尽量简单,也就是说压缩算法的复杂度要尽量低。
有两种类型的标准。一种是由一些公司达成共识而制定的工业或商业标准。有时这种标准会深受市场欢迎,从而变成事实标准,并被其他公司所广为接受。另外一种是由开放式委员会的志愿者们所定义的志愿标准(voluntary standards)。这种标准由市场需求所驱动,同时这种标准超前于技术发展的现状。因为如果产品开发商已经利用其专有技术开发出了产品,就很难再让其接受新的标准。本说明书中所讨论的标准属于第二种类型。
在多媒体通讯领域,有两个主要的标准化组织:国际电信联盟(International Telecommunication Union-TelecommunicationStandardization Sector,ITU-T)和国际标准化组织(InternationalOrganization for Standardization,ISO)。这两个标准化组织所研发的视频标准的历史与现状如图1所示。
就编码算法而言,所有视频标准遵循同样的框架结构,差异仅仅在于参数的取值范围以及一些特定的编码模式。这些标准间的本质差异在于所使用的比特率区间不同:MPEG-1、MPEG-2适用于高带宽、高质量、以及低延迟的视频和音频应用;而H.261、H.263、MPEG-4以及正在发展的H.264则适用于低带宽的对图象质量和延迟要求不高的应用。
理解视频编码标准有两种途径:一种侧重于比特流语法(bitstreamsyntax),需要理解语法的每一个层面以及位流的每一个比特表示什么。这种方法对于需要制造遵从标准的设备的生产商来讲是非常重要的。另外一种侧重于生成标准码流的编码算法,需要理解每个模块的功能以及各种算法的优缺点。严格说来,标准中没有制定任何编码算法。采用后一种途径能从整体上更好地理解视频编码技术,而不是局限于标准比特流语法。
1.2H.26X简介
本节介绍国际电信联盟——电信标准化部门(InternationalTelecommunication Union-Telecommunication StandardizationSector,ITU-T)开发的视频标准。ITU-T的前身是国际电话与电报顾问委员会(Consultative Committee of the International telephone andTelegraph,CCITT)。ITU-T的视频标准包括H.261,H.263,以及H.263+。
1.2.1H.261
H.261是ITU-T SG15为视频电话和视频会议而定义的视频国际标准,该标准强调低比特率和低编码延迟。H.261标准从1984年开始研究,当时的目标比特率为m×384kbits/s,其中m的取值范围为1到5之间。1988年开始,研制目标发生了变化,比特率改为p×64kbits/s,其中,p的取值范围是1到30。因此,H.261的非正式名称为p×64。1990年12月H.261正式发布。H.261的编码算法采用运动补偿(motioncompensation)来去除时间域冗余,离散余弦变换(DCT)编码来去除空间域冗余。后续开发的视频编码标准都是基于这种编码框架的。因此,H.261对于其他现有的和正在制定的视频编码标准具有非常深远的影响。
H.261规定的帧率是30000/1001(近似为29.97)帧/秒(p/s),图像格式为CIF(common intermediate format)和QCIF(quarterCIF)。用计算机工业的术语来讲,CIF接近于计算机显示中使用的CGA格式。在这种分辨率下,图像质量不高,接近于磁带录像机的质量,远远低于广播电视的质量。这是因为H.261是为视频电话和视频会议设计的,在这种应用中,视频序列主要由说话的人物构成,而通常的电视节目包含大量的运动和场景变化。
H.261采用的编码算法如图2和图3所示。在编码器端,将输入图像的块在解码后的参考帧中进行运动搜索,然后对残差进行DCT变换以及量化处理,再对量化后的系数进行熵编码并传输。在解码器端,进行DCT反变换以及运动补偿以复原原始图像。
由于当前帧各个块的预测样本块由位于参考帧中不同位置的样本块所组成,因此,预测帧中含有编码噪声以及块效应。为减少预测误差,需要将预测帧首先做低通滤波处理,然后再做为当前帧的参考帧。由于这个滤波器位于运动补偿环路内,所以称为环路滤波器。
图4给出了标准的范围,以及典型的视频编码/解码链(去除了视频信号的传输和存储部分)。与其他所有的ITU-T和ISO/IEC视频编码标准相同,H.261仅仅规定了比特流语法以及解码器如何解释码流并进行解码。也就是说,标准仅规定了解码器,具体来讲给出了比特流语法和各个语法元素的解码过程,而没有说明应如何进行编码。
这样对于任意给定的编码后的码流,所有遵从标准的解码器都会产生相同的输出。标准范围的这种限定使得各个公司在实现编码器时比较自由,能够根据具体的应用在压缩质量、实现代价、以及商用时间之间求得平衡点。但是,另一方面,这样定义的标准不能保证编码的质量:假设运动矢量都为零,所有像素都用变换来进行编码,那么生成的码流也是符合标准的,但是压缩性能非常差。
因此,为了展示视频编码标准的有效性,定义标准的小组通常会提供参考模型(reference model,RM)。参考模型实现了运动估计、量化、帧间/帧内编码决策、运动补偿、缓冲、码率控制的全部参考代码。
H.261是为不同网络环境而制定的几种ITU-T H系列终端标准的组成部分。例如,H.320(为窄带ISDN终端定义的协议)采用H.261作为视频信号编解码标准,采用H.221作为多路复用标准,采用H.242作为控制信令标准,采用G.711、G.722和G.728作为音频信号编解码标准。H.261也用于其他终端标准,如H.321,H.322,H.323,和H.324等等。
1.2.2H.263
H.263由开发H.261的ITU-T SG15所定义。H.263标准的定义起始于1993年11月,1996年被正式采纳。该视频编码标准是为比特率低于64kbits/s的应用(甚低比特率应用)设计的,例如,视频比特率典型范围为10到24kbits/s的移动网络或公共开关电话网络(publicswitched telephone network,PSTN)。从本质上来讲,H.263综合了H.261和MPEG的特征,并针对甚低比特率做了许多优化。从信噪比(signal to noise ratio,SNR)的角度来讲,在低于64kbits/s的码率下H.263比H.261要好3到4个dB。事实上,在所***率下,H.263的编码性能都要优于H.261。与MPEG-1相比,H.263的比特率要低30%。
由于H.263是基于H.261构造的,所以这两个标准的主体结构是相同的。两个标准的差异如下:
(1)H.263支持更多的图像格式,并使用不同的GOB结构。
(2)H.263使用半像素运动补偿,没有像H.261那样使用环路滤波器。
(3)H.263使用3D VLC来编码DCT系数。
(4)除了基本的编码算法外,编码器和解码器间有四个可协商的增强选项:
·不受限运动矢量模式——运动矢量可以超出图像边界
·基于语法的算术编码模式——算术编码的压缩效率要高于变长编码
·先进预测模式——除使用16×16的块进行运动搜索以外,还可以使用8×8的块
·PB-帧模式——PB-帧中的B帧不采用传统的双向运动矢量,而是将P帧的运动矢量做伸缩后作为前向运动矢量,以减少比特率。
(5)H.263允许每个宏块改变量化步长。
与H.261一样,ITU-T SG15也提供了参考编解码器,即测试模型。TMN6给出了四个可协商选项的所有参考代码。
与H.261相似,H.263是为不同网络环境而制定的几种ITU-T H系列终端标准的组成部分。例如,H.324(为PSDN终端定义的协议)采用H.263作为视频信号编解码标准,采用H.223作为多路复用标准,采用H.245作为控制信令标准,采用G.723作为音频信号编解码标准。H.263也用于其他终端标准,例如为不保证服务质量(QoS)的局域网而定义的H.323终端。
1.2.3H.263+
H.263+由ITU-T SG16开发,是对H.263的增强。这些增强性技术被分组到12个关键技术领域(Key Technical Areas,KTAs),并于1997年正式发布。这些增强性技术归纳为以下六大类:
●扩展源格式:Higher Picture Clock Frequency(PCF)、CustomPicture Formats、Custom Pixel Aspect Ratios(PAR)
●提高编码效率的新编码模式:Advanced Intra Coding Mod、Alternate Inter VLC Mod、Modified Quantization Mod、DeblockingFilter Mode、Improved PB-frame Mode
●提高错误鲁棒性的增强模式:Slice Structured Mode、ReferencePicture Selection Mode、Independent Segment Decoding Mode
●伸缩性增强模式:Temporal scalability、SNR scalability、andspatial scalability mode
●其它增强模式:Reference Picture Resampling Mode、Reduced-Resolution Update Mode
●补充增强信息(supplemental enhancement information)
1.3MPEG简介
MPEG标准一直是许多科研机构和大学关注的热点,也是工业界数字视频终端产品开发的热点。活动图像专家组(Moving Picture ExpertGroup,MPEG)是在1988年由国际标准化组织(InternationalOrganization for Standardization,ISO)和国际电工委员会(International Electrotechnical Commission,IEC)联合成立的专家组,负责开发电视图像数据和声音数据的编码、解码和它们的同步等标准。这个专家组开发的标准称为MPEG标准,到目前为止,已经开发和正在开发的MPEG标准有:
MPEG-1:数字电视标准,1992年正式发布。
MPEG-2:数字电视标准。
MPEG-3:已于1992年7月合并到高清晰度电视(HDTV)工作组。
MPEG-4:多媒体应用标准,1999年发布。
MPEG-5:直至1998年9月还没有见到定义。
MPEG-6:直至1998年9月还没有见到定义。
MPEG-7:多媒体内容描述接口标准(正在研究)。
MPEG标准阐明了声音和电视图像的编码和解码过程,严格规定了声音和图像数据编码后组成位数据流的句法,提供了解码器的测试方法等。但没有对所有内容都作严格规定,尤其是对压缩和解压缩的算法。这样既保证了解码器能对符合MPEG标准的声音数据和电视图像数据进行正确解码,又给MPEG标准的具体实现留有很大余地。人们可以不断改进编码和解码算法,提高声音和电视图像的质量以及编码效率。
与其他ISO标准文件一样,MPEG标准文件的创建过程分为4个阶段:
(1)工作文件(Working Draft,WD):工作组准备的工作文件。
(2)委员会草案(Committee Draft,CD):从工作组准备好的
工作 文件中提升出来的文件。这是ISO文档的最初形式,它由ISO内部正式调查研究和投票表决。
(3)国际标准草案(Draft International Standard,DIS):投票成员国对
委员会草案的内容和说明满意之后由
委员会草案提升上来的文件。
(4)国际标准(International Standard,IS):由投票成员国、ISO的其他部门和其他委员会投票通过之后出版发布的文件。
1.3.1MPEG-1数字电视标准
MPEG-1处理的是标准图像交换格式(Standard InterchangeFormat,SIF)或者称为源输入格式(Source Input Format,SIF)的电视,即NTSC制为352像素×240行/帧×30帧/秒,PAL制为352像素×288行/帧×25帧/秒,压缩的输出速率定义在1.5Mb/s以下。这个标准主要是针对当时具有这种数据传输率的CD-ROM和网络而开发的,用于在CD-ROM上存储数字影视和在网络上传输数字影视。
MPEG-1的标准号为ISO/IEC11172,标准名称为“信息技术——用于数据速率大约高达1.5Mb/s的数字存储媒体的电视图像和伴音编码(Information technology-Coding of moving pictures and associatedaudio for digital storage media at up to about 1.5Mb/s)”。它已于1991年底被ISO/IEC采纳,由5个部分组成:
①MPEG-1***,写成MPEG-1 Systems,规定电视图像数据、声音数据及其他相关数据的同步,简称ISO/IEC 11172-1。
②MPEG-1电视图像,写成MPEG-1 Video,规定电视数据的编码和解码,简称ISO/IEC 11172-2。
③MPEG-1声音,写成MPEG-1 Audio,规定声音数据的编码和解码,简称ISO/IEC 11172-3。
④MPEG-1一致性测试,写成MPEG-1 Conformance testing,简称ISO/IEC 11172-4。这个标准详细说明如何测试位数据流和解码器是否满足MPEG-1前三个部分中所规定的要求。这些测试可由厂商和用户实施。
⑤MPEG-1软件模拟,写成MPEG-1 Software simulation,简称ISO/IEC 11172-5。实际上,这部分的内容不是一个标准,而是一个技术报告,给出了用软件执行MPEG-1标准前三个部分的结果。
1.3.2MPEG-2数字电视标准
MPEG-2标准从1990年开始研究,1994年发布DIS。它是一个直接与数字电视广播有关的高质量图像和声音编码标准。MPEG-2可以说是MPEG-1的扩充,因为它们的基本编码算法都相同,但MPEG-2增加了许多MPEG-1所没有的功能。例如,增加了隔行扫描电视的编码,提供了位速率的可变性(scalability)功能。MPEG-2在速率方面的最基本目标是:位速率为4~9Mb/s,最高达15Mb/s。
MPEG-2的标准号为ISO/IEC 13818,标准名称为“信息技术——电视图像和伴音信息的通用编码(Information technology-Genericcoding of moving pictures and associated audio information)”。MPEG-2包含10个部分:
①MPEG-2***,写成MPEG-2 Systems,规定电视图像数据、声音数据及其他相关数据的同步,简称ISO/IEC 13818-1。这个标准主要是用来定义电视图像数据、声音数据和其他数据的组合,把这些数据组合成一个或者多个适用于存储或者传输的基本数据流。数据流有两种形式,一种称为程序数据流(Program Stream,PS),另外一种称为传输数据流(Transport Stream,TS)。程序数据流是通过组合一个或者多个规格化的包化基本数据流(Packetised Elementary Streams,PES)而生成的一种数据流,用在出现错误相对比较少的环境下,适合于使用软件处理的应用;传输数据流也是组合一个或多个PES而生成的一种数据流,它用在出现错误相对比较多的环境下,例如在有损失或者有噪声的传输***中。
②MPEG-2电视图像,写成MPEG-2 Video,规定电视数据的编码和解码,简称ISO/IEC 13818-2。
③MPEG-2声音,写成MPEG-2 Audio,规定声音数据的编码和解码,是MPEG-1 Audio的扩充,支持多个声道,简称ISO/IEC 13818-3。
④MPEG-2一致性测试,写成MPEG-2 Conformance testing,简称ISO/IEC 13818-4。
⑤MPEG-2软件模拟,写成MPEG-2 Software simulation,简称ISO/IEC 13818-5。
⑥MPEG-2数字存储媒体命令和控制扩展协议,写成MPEG-2Extensions for DSM-CC,简称ISO/IEC 13818-6。该协议用于管理MPEG-1和MPEG-2的数据流,使数据流既可在单机上运行,又可在异构网络(即用类似设备构造但运行不同协议的网络)环境下运行。
⑦MPEG-2先进声音编码,写成MPEG-2 AAC,是多声道声音编码算法标准。这个标准除后向兼容MPEG-1 Audio标准之外,还有非后向兼容的声音标准,简称ISO/IEC 13818-7。
⑧MPEG-2***解码器实时接口扩展标准,简称ISO/IEC 13818-8。这是与传输数据流的实时接口标准,它可以用来接收来自网络的传输数据流。
⑨MPEG-2 DSM-CC一致性扩展测试,简称ISO/IEC 13818-9。
⑩MPEG-2先进声音编码标准修正版。
1.3.3MPEG-4多媒体应用标准
MPEG-4从1994年开始研究,它是为视听数据的编码和交互播放而开发的算法和工具,是一个数据速率很低的多媒体通信标准。MPEG-4的目标是要在异构网络环境下能够高度可靠地工作,并且具有很强的交互功能。
为了达到这个目标,MPEG-4引入了对象基表达(object-basedrepresentation)的概念,用来表达视听对象(Audio/Visual Objects,AVO);MPEG-4扩充了编码的数据类型,由自然数据对象扩展到计算机生成的合成数据对象,采用合成对象/自然对象混合编码(Synthetic/Natural Hybrid Coding,SNHC)算法;在实现交互功能和重用对象中引入了组合、合成和编排等重要概念。
MPEG-4将应用在移动通信和公用电话交换网(Public SwitchedTelephone Network,PSTN)上,并支持可视电话(videophone)、电视邮件(video mail)、电子报纸(electronic newspapers)和其他低数据传输速率场合下的应用。
MPEG-4的标准名称是Very lowbitrate audio-visual coding(甚低速率视听编码)。MPEG-4的标准号为ISO/IEC 14496,包含以下10个部分:
①MPEG-4***,简称ISO/IEC 14496-1。
②MPEG-4电视图像,简称ISO/IEC 14496-2。
③MPEG-4声音,简称ISO/IEC 14496-3。
④MPEG-4一致性测试,简称ISO/IEC 14496-4。
⑤MPEG-4参考软件,简称ISO/IEC 14496-5。
⑥MPEG-4传输多媒体集成框架(Delivery Multimedia IntegrationFramework,DMIF),简称ISO/IEC 14496-6。该协议用来管理多媒体数据流,在原则上与文件传输协议(File Transfer Protocol,FTP)类似,其差别是:FTP返回的是数据,而DMIF返回的是指向到何处获取数据流的指针。DMIF覆盖了三种主要技术:广播技术,交互网络技术和光盘技术。
⑦MPEG-4工具的优化软件,简称ISO/IEC 14496-7。
⑧MPEG-4 IP框架,简称ISO/IEC 14496-8。
⑨MPEG-4参考硬件描述,简称ISO/IEC 14496-9。
⑩MPEG-4先进视频编码(Advanced Video Coding,AVC),简称ISO/IEC 14496-10。AVC为ISO的MPEG与ITU-T的VCEG联合开发的视频国际标准,在ITU-T的称号为H.264,该视频标准的编解码器优化工作即为本发明的研究重点。
1.3.4MPEG-7多媒体内容描述接口
1996年10月MPEG组织提出了一个新的解决方案,称之为多媒体内容描述接口(Multimedia Content Description Interface),也就是MPEG-7国际标准。MPEG-7的目标是建立一套视听特征的量化标准描述符及其结构以及它们之间的关系,称之为描述方案(DS,DescriptionSchemes)。同时MPEG-7也建立一套标准化的语言——描述定义语言(DDL,Description Definition Language),用以说明描述符和描述方案,保证其被广泛采用的扩展性和较长的生命周期。人们可以检索和索引与MPEG-7数据相联系的视听材料,这些材料可以是静态图片、图形、3D模型、声音、言语、视频和这些元素所组成的多媒体描述信息。MPEG-7力求能够快速且有效地搜索出用户所需的不同类型的多媒体材料。MPEG-7将对各种不同类型的多媒体信息进行标准化的描述,并将该描述与所描述的内容相联系,以实现快速有效的搜索。该标准不包括对描述特征的自动提取,它也没有规定利用描述进行搜索的工具或任何程序。
MPEG-7主要致力于视听数据的信息编码表达上,换句话说就是集中在对多媒体材料的描述的通用接口的标准化上(表达内容的信息而不是内容本身)。正因为如此,MPEG-7致力于数据资源的交互性与全球化以及数据管理的灵活性上。
MPEG-7可独立于其他MPEG标准使用,但MPEG-4中所定义的对音频、视频对象的描述也适用于MPEG-7,这种描述是分类的基础。另外可以利用MPEG-7的描述来增强其他MPEG标准的内容描述功能。MPEG-7与其他MPEG标准的最大不同之处在于MPEG-7更注重于对人的自然本性的考虑。MPEG-7必须将许多相关领域的特点和技术结合起来,比如:计算机视觉、数据库以及信号处理等。数据库人员注重于高层的描述,希望MPEG-7提供标准的结构和连接技术;信号处理人员更注重于对图像的分析和对内容的理解。
MPEG-7的应用领域包括:数字图书馆,例如图像目录、音乐词典等;多媒体目录服务(Multimedia Directory Services),例如黄页;广播媒体的选择,例如无线电频道,TV频道等;多媒体编辑,例如个人电子新闻服务,多媒体创作等等。潜在的应用领域包括:教育、娱乐、新闻、旅游、医疗、购物等。
1.3.5MPEG-21多媒体框架
随着多媒体应用技术的不断发展,有关多媒体的标准层出不穷,这些标准涉及到多媒体技术的各个方面。各种不同的多媒体信息分布式地存在于全球不同的设备上,要通过异构网络有效地传输这些多媒体信息,必然需要综合地利用不同层次的多媒体技术标准。但现有标准是否能真正做到配套衔接,以及在各个标准之间是否存在缺漏,还需要一个综合性的标准来加以协调。这正是“多媒体框架(MultimediaFramework)”这一概念被提出的初衷。
MPEG-21的目标是要为多媒体信息的用户提供透明而有效的电子交易和使用环境。
MPEG-21的范围可以描述成是一定关键技术的集成,这些技术可以通过访问全球网络和设备实现对多媒体资源的透明和增强使用。其功能包括:内容创建、内容产品、内容发布、内容消耗和使用、内容表示、知识产权管理和保护、内容识别和描述、财政管理、用户的隐私权、终端和网络资源抽取、事件报告等。
MPEG-21的基本框架要素包括数字项目说明(Digital ItemDeclaration)、内容表示(Content Representation)、数字项目的识别和描述(Digital Item Identification and Description)、内容管理与使用(Content Management and Usage)、知识产权管理和保护(IntellectualProperty Management and Protection)、终端和网络(Terminals andNetworks)、事件报告(Event Reporting)等。
1.4视频应用领域
视频可以应用于但不局限于如下领域:
BSS——卫星转播服务(家庭应用)
CATV——光纤网、铜轴电缆等上的有线电视转播
CDAD——有线数字音频转播
DAB——数字音频广播(地面和卫星广播)
DTTB——数字地面电视广播
EC——电子电影
ENG——电子化新闻采集(包括SNG——卫星新闻采集)
FSS——固定卫星服务
HTT——家庭电视剧场
IPC——人际通信(电视会议、视频电话等)
ISM——交互式存储媒体(光盘等)
MMM——多媒体邮件
NCA——新闻和快讯
NDB——网络数据库服务
RVS——远程视频监视
SSM——连续存储媒体(数字录像机VTR等)
1.5档次和级别
每一个视频标准都拟应用于较广范围的比特率、分辨率、质量和服务。在创建标准的过程中,根据各个典型领域的应用要求,制定必要的语法元素,并将其综合为一个单一的语法体系。考虑到实现一个标准的完整语法体系的实用性,通过“档次(profile)”和“级别(level)”的方式来约定有限数目的语法子集。
档次是一个标准所定义的完整比特流语法的一个子集。在给定某档次所规定的语法范围后,比特流参数的各种取值仍可使编码和解码过程有很大变化,例如,可以指定帧大小(近似)为214个像素点宽及214个像素点高。目前实现一个能处理任意大小的帧的解码器仍是不实用且不经济的。为了解决这个问题,在每个档次中又定义了“级别”。级别是一个对比特流各参数进行限定的集合。这些限定可能是一些简单的数字上的约束,也可能是以几个参数的算法组合的形式提出的(例如帧宽与帧高以及帧速的乘积的约束)。
1.6小结
本部分概述了国际电信联盟(ITU-T)的H.26X系列视频标准以及国际标准化组织(ISO)的MPEG系列视频标准,总结了视频的应用领域,并对视频国际标准中普遍采用的档次和级别做了简要介绍。对于本发明所重点研究的H.264/AVC视频标准的内容与特色技术将在下一部分阐述。
2.H.264/AVC视频标准概述
H.264/AVC是目前最新的视频编码国际标准。该标准由ITU-T和ISO/IEC联合开发,ITU-T称该标准为H.264,ISO/IEC将该标准列为MPEG-4的第十部分,代号为14496-10AVC(Advanced VideoCoding)。
早在1998年,视频编码专家组(Video Coding Experts Group,VCEG)ITU-T SG16 Q6就发出了征集H.26L工程提案的号召,H.26L的目标是使编码效率比所有其他现有视频标准提高一倍(这意味着在给定清晰度下码率降低一半),并且适用于所有的应用领域。该标准的第一个草案于1999年10月被采纳。2001年12月,VCEG和MPEGISO/IEC JTC 1/SC 29/WG 11成立了联合视频小组(Joint VideoTeam,JVT),2003年5月该小组正式发布H.264/AVC(JVT-G050)。与其他所有的ITU-T和ISO/IEC视频编码标准相同,H.264/AVC标准中仅规定了解码器,具体来讲给出了比特流语法和各个语法元素的解码过程。
H.264/AVC至少为下面的应用领域提供了技术解决方案:
●通过电缆、卫星、调制解调器、DSL等的广播
●在光盘或磁带设备上进行交互或连续存储,如DVD等
●通过ISDN、以太网、局域网、DSL、无线网、调制解调器等的对话服务
●通过ISDN、调制解调器、局域网、DSL、无线网等进行视频点播或流媒体服务
●通过ISDN、DSL、以太网、局域网、无线网等的多媒体信息服务(MMS)
此外,在现有的和未来的网络上还将有其他的新应用。那么,如何使一个视频编码标准能适用于各种各样的应用和网络呢?H.264/AVC的视频编码层(VCL)和网络提取层(NAL)保证了这种灵活性和可定制性。VCL层保证视频内容的有效编码;NAL层以适宜于各种传输层和存储介质的方式来封装VCL内容(图5)。
本部分组织如下:首先阐述网络提取层(Network AbstractionLayer,NAL)以及H.264/AVC编码后的视频数据结构;然后描述视频编码层(Video Coding Layer,VCL);最后概述H.264/AVC的技术特色。
2.1网络提取层
网络提取层(NAL)的主要功能在于提供网络友好性,即针对不同领域的应用能够简单有效地定制VCL的传输。
虽然H.264/AVC标准规定的范围内不包括根据特定应用定制视频内容,但是NAL的设计保证了这种视频定制的可行性。NAL中的关键概念包括:NAL单元、字节流格式和包格式、参数集(parametersets)、和存取单元(access units)等等。下面简要介绍这些概念,详细描述请见参考文献S.Wenger(2003)和T.Stockhammer etc.(2003)。
2.1.1NAL单元
编码后的视频数据被封装在NAL单元中,每一个NAL单元就是一个包含整数个字节的数据包。每一个NAL单元的第一个字节为头,指示该NAL单元中数据的类型,剩余的字节为头中指示的类型的实际数据,称为有效载荷(payload)。
必要时,NAL单元中的有效载荷数据要穿插“伪起始码防止字节(emulation prevention bytes)”,穿插该数据是为了防止有效载荷中出现“起始码前缀(start code prefix)”。
NAL单元的结构定义本身是一种通用的格式,既可以用于基于包的传输***,也可以用于基于字节流的传输***。编码器生成的一系列NAL单元称为NAL单元流(NAL unit stream)。
2.1.2字节流格式的NAL单元
某些***(例如,H.320和MPEG-2/H.222.0***)需要按照顺序传输完整的或部分NAL单元流。在这种***中,需要正确区分NAL单元的边界以及内部数据。对于这类应用,H.264/AVC标准定义了字节流格式(byte stream format)。在字节流格式中,每一个NAL单元都附加了三个字节的起始码前缀。这样,通过查找这个唯一的起始码前缀就可以确定NAL单元的边界。伪起始码防止字节的使用保证了起始码前缀是NAL单元起始的唯一标识。
码流中允许加入少量的附加数据(每帧一个字节)以帮助按照字节流格式工作的解码器进行字节对齐。字节流格式中也允许***附加数据,这样做一方面可以扩充发送的数据,另一方面对快速字节对齐有辅助作用。
2.1.3包格式的NAL单元
在其他***中(例如,IP/RTP***),编码后的数据由***传输协议来打包,因而包内NAL单元的边界不需要起始码前缀来界定。在这种***中,NAL单元可以不加起始码前缀。
2.1.4VCL和非VCL NAL单元
NAL单元可以分为两类:VCL NAL单元和非VCL NAL单元。VCL NAL单元中含有表示视频图像样本值的数据;而非VCL NAL单元中含有参数集(parameter sets)和补充增强信息(supplementalenhancement information)等附加信息。参数集中含有适用于大量VCL NAL单元的重要头数据。补充增强信息中含有时间信息,或其他的对于解码视频序列采样值并非必需的、但是又可以增强解码后视频信号可用性的增强性信息。
2.1.5参数集
参数集中含有适用于大量VCL NAL单元的头数据,这些头数据在整个解码过程中基本不变。有两种类型的参数集:
序列参数集,该参数集适用于一系列连续的编码后的视频帧;
图像参数集,该参数集适用于解码一个或几个视频帧。
序列和图像参数集机制使得极少变化的头数据的传输与视频图像采样值的编码后数据的传输分离开来。每一个VCL NAL单元含有一个指向某一图像参数集的标识,而每一个图像参数集又含有一个指向某一序列参数集的标识。这样,用少量的数据(标识)就可以指示大量的信息(参数集),从而避免了在每个VCL NAL单元中重复参数集信息。
序列参数集和图像参数集应在他们所应用的VCL NAL单元之前传输,也可以重复传输以免数据丢失。在某些应用中,参数集采用与VCL NAL单元相同的通道传输,称为“in-band”传输;在其他应用中,参数集采用比视频通道更可靠的机制来传输,称为“out-of-band”传输。
2.1.6存取单元
特定格式的NAL单元集合称为存取单元(access unit)。解码一个存取单元可以生成一个完整的帧。存取单元的格式如图6所示。
每个存取单元必然包含由若干VCL NAL单元构成的首要编码图像(primary coded picture)。存取单元前还可能含有用于定位其起始位置的存取单元分界符(access unit delimiter)。在首要编码图像之前还有可能含有诸如图像时间信息等的补充增强信息。
首要编码图像由一系列VCL NAL单元构成,这些VCL NAL单元中含有表示视频图像采样的条带(slices)或条带数据分区(slice datapartitions)。
首要编码图像之后可能会含有一些附加的称为冗余编码图像(redundant coded pictures)的VCL NAL单元,这些单元对同一视频图像区域进行冗余表示,这样做的好处是在首要编码图像数据传输丢失时能够恢复原图像。在冗余编码图像存在的情况下,解码器可以不解码冗余编码图像。
最后,如果编码帧为整个编码视频序列的最后一帧,那么可以采用序列结束(end of sequence)NAL单元来标识序列的结束;如果编码帧为整个NAL单元流中的最后一帧,那么可以采用流结束(end ofstream)NAL单元来标识流的结束。
2.1.7编码视频序列
编码视频序列(coded video sequence)由一系列存取单元组成,这些存取单元在码流中是连续的,并使用同一个序列参数集。只要相关的参数集信息都存在,一个编码视频序列就可以完全独立于其他的编码视频序列进行解码。每一个编码视频序列的起始存取单元都是IDR(instantaneous decoding refresh)存取单元。一个IDR存取单元包含一个帧内编码的帧。IDR存取单元的出现也表示码流中的后续帧不会以该IDR存取单元之前的帧作为参考帧。
一个NAL单元流可以包含一个或几个编码视频序列。
2.2视频编码层
自H.261以来的ITU-T和ISO/IEC视频标准都采用基于块的混合编码方式,H.264/AVC VCL也采用了相同的编码方法,图7给出了基于宏块的H.264/AVC编解码过程。H.264/AVC相比于其他视频标准在压缩性能上的大幅度提高并非来源于某一特定的功能模块,而是来源于很多小的改进的综合贡献。
2.2.1图像,帧,和场
H.264/AVC中的编码视频序列(coded video sequence)由一系列编码后的图像(coded picture)组成。与MPEG-2视频标准相同,H.264/AVC的图像(picture)即可以表示一个完整的帧(frame),又可以表示一个单独的场(field)。
一般来讲,视频的一帧可以认为是由两个相互交织的场组成,顶场(top field)和底场(bottom field)。顶场由偶数行组成,底场由奇数行组成。
2.2.2YCbCr颜色空间和4:2:0采样
人类视觉***通过亮度和色彩信息来感知场景,并且对亮度比色彩更敏感,视频编码***主要就是利用人类视觉***的这个特点。与以前的视频标准相同,H.264/AVC采用降低了Cb和Cr采样率的YCbCr颜色空间。Y表示亮度,Cb和Cr分别表示颜色从灰度向蓝色和红色的偏移量。
由于人类视觉***对亮度比色度要敏感得多,所以H.264/AVC采用的采样结构是色度块的采样率是亮度块的采样率的1/4。这种采样被称为是每像素8位精度的4:2:0采样。
2.2.3宏块(Macroblock)
H.264/AVC将图像分割成固定大小的宏块,每个宏块由一个16×16的亮度和两个8×8的色度块组成。宏块是H.264/AVC标准中所规定的解码的基本处理单元。宏块的基本编码算法将在解释完如何将宏块分组成条带后阐述。
2.2.4条带(Slice)和条带组(Slice Group)
在不使用FMO时,条带由一系列按照
栅格扫描顺序连续的宏块组成。如图8所示,一幅图像可以分解成一个或几个条带。这样,一幅图像就是一个或几个条带的集合。只要有激活的序列参数集和图像参数集,解码器就可以仅仅根据该条带自身的码流正确解出该条带的像素数据,仅在最后去马赛克滤波时需要其他条带的信息来平滑条带的边界。
FMO采用条带组(slice group)的概念来将一幅图像灵活地分区成条带。每一个条带组包含由“宏块到条带组的映射(macroblock to slicegroup map)”指定的所有宏块,该映射由图像参数集和条带头的一些信息指定。每个条带组包含一个或多个条带,而每个条带由在该宏块组内按栅格扫描顺序连续的一系列宏块组成。在不使用FMO的情况下,可以把整个图像看成由一个单独的条带组组成。在使用FMO时,对图像的划分可以多种多样,例如图9所示的两种形式。左图的“宏块到条带组的映射”表示感兴趣区域类型的编码应用。右图的“宏块到条带组的映射”适合于视频会议应用中的错误隐藏(注:条带组#0和条带组#1用不同的包进行传输,并且其中一个包丢失了)。关于使用FMO的更多信息请查阅参考文献S.Wenger(2003)。
无论使用FMO与否,每一个条带都可以采用下面所列的编码类型之一进行编码:
I条带:该条带内的所有宏块均采用帧内预测的方式进行编码。
P条带:该条带内的宏块既可以采用帧内预测的方式进行编码,又可以采用帧间预测的方式进行编码。对于采用帧间预测的块,只允许有一个运动补偿预测信号。
B条带:除了P条带采用的编码类型外,B条带中的宏块还可以采用双向帧间预测的方式进行编码。采用双向帧间预测方式编码的块有两个运动补偿预测信号。
上面的这三种编码类型与先前的标准中采用的编码类型是相同的。此外,H.264/AVC中新增了下面两种编码类型:
SP条带:这种交换型P条带可以使得在无需***I条带的情况下,令解码器直接从一个视频序列的解码转换到另一个视频序列的解码。
SI条带:这种交换型I条带全部采用4×4帧内预测编码,用于完全没有相关性的两个视频序列间的切换。
2.2.5宏块的编码和解码过程
将输入视频信号分解成宏块,再将每个宏块映射到相应的条带组和条带,然后就可以对每个条带中的每一个宏块按照图7所示的流程进行编码。首先对一个宏块的亮度和色度采样进行空间域或时间域预测,然后对原始信号与预测值之间的差异进行4×4整数DCT变换,最后对预测信息以及量化后的变换系数进行熵编码。只要图像中有不同的条带,就可以对宏块进行有效的并行处理。
2.2.6自适应帧/场编码操作
如果原始场景中存在运动物体或者摄像镜头在移动,那么隔行扫描情况下的相邻行的相关性要明显低于逐行扫描情况下的相邻行的相关性。在这种情形下,更适宜于分别对每个场进行压缩。为提高编码效率,H.264/AVC允许编码器在编码一帧图像时做如下选择:
1)将两个场合并起来,按照单独的帧进行编码(帧模式)。
2)不合并两个场,对每个场单独编码(场模式)。
3)将两个场合并成单独的帧,对于竖直方向上相邻的宏块对(macroblock pairs),编码时可以选择将其分解成顶场和底场的两个宏块,或者分解成帧宏块对。
对于序列中的每一帧都可以在上述三种模式中自由选择其编码模式。前两种模式称为图像自适应帧/场(Picture-Adaptive Frame/Field,PAFF)编码。测试表明,对于标准序列“Canoa”和“Rugby”,PAFF编码相比于仅按帧模式的编码可以降低16%到20%的比特率。
如果一帧中某些区域运动而其余的区域都不运动,那么对非运动区域按帧编码、对运动区域按场编码会使压缩性能更好一些。因此,帧/场编码的选择也可以由每帧的宏块对(16×32的亮度区域)来独立选择。这种编码方式称为宏块自适应帧/场(MacroBlock-AdaptiveFrame/Field,MBAFF)编码。值得指出的是,MBAFF是在宏块对级而不是在宏块级来选择使用帧还是场编码。这样做的好处在于既保证了基本的宏块处理结构,又保证了运动补偿区域的块可以达到16×16。测试表明,对于标准序列“Mobile and Calendar”和“MPEG-4 WorldNews”,MBAFF编码相比于PAFF编码可以降低14%到16%的比特率。
2.2.7帧内预测
所有的条带编码类型都支持下面的宏块编码类型:Intra_4×4、Intra_16×16以及I_PCM预测模式。
Intra_4×4模式对每个4×4的亮度块进行独立预测,这种模式适合于对一幅图像中细节较多的部分进行编码。而Intra_16×16模式是对整个16×16亮度块进行预测,因而更适合于对图像中的平滑区域进行编码。采用这两种类型的亮度块预测模式时,相应的色度块也需要做帧内预测。除Intra_4×4和Intra_16×16以外,还有I_PCM模式,该模式直接发送原始图像当前宏块的采样值,无需进行预测和变换编码。
当采用Intra_4×4模式时,每一个4×4的块由图10(a)所示的空间相邻像素的值进行预测。4×4块的16个像素值(标号为a-p)由邻近块中解码后的像素值(标号为A-Q)预测得到。4×4块的预测模式总共有九种。除“DC”预测模式外,其余八种方向预测模式由图10(b)所示。这八种方向预测模式适宜于预测图象中的带有方向性的纹理,如不同方向的边缘。
当采用Intra_16×16模式时,直接对宏块的16×16亮度块进行预测。Intra_16×16共有四种预测模式:模式0为垂直预测(verticalprediction),模式1为水平预测(horizontal prediction),模式2为DC预测(DC prediction),模式4为平面预测(plane prediction)。
因为通常色度在大的范围内都是平滑的,所以色度块采用与Intra_16×16相似的预测模式。此外,为保证各个条带之间的独立性,不允许采用其他条带的像素值进行帧内预测。
2.2.8帧间预测
1.P条带的帧间预测
对于P条带中的宏块,既可以采用帧内预测的模式,也可以采用帧间预测的模式。每一个帧间预测的宏块都需要按照运动补偿预测的需求进行划分,标准中规定亮度块可以划分为16×16、16×8、8×16、或8×8的块;其中,8×8的块又可以进一步划分为8×4、4×8、或4×4的小块,如图11所示。
每一个预测编码的M×N亮度块的预测值取自于参考帧中的一块区域,这种运动预测由平移运动矢量和参考帧索引值来表示。在极限的情况下,假如一个宏块采用四个8×8的块,并且每个8×8的块又进而分解成四个4×4的块,那么一个宏块就要传输16个运动矢量。
运动补偿的精度为亮度分量采样间隔的四分之一。如果运动矢量指向整数点采样位置,那么预测信号为参考帧中对应的采样值。如果运动矢量指向非整数点采样位置,那么预测信号要通过插值计算求得。半像素位置的预测值通过水平或垂直方向上的一维6-tap FIR滤波器求得。四分之一像素位置的预测值为整像素点和半像素点采样值的平均值。
色度块的预测值通过双线性插值得到。因为色度块的采样分辨率比亮度块的采样分辨率低,所以色度块的位移精度为八分之一像素。
H.264/AVC采用了T.Wedi(2003)提出的四分之一像素精度的运动预测,这是H.264/AVC相比于其他早期标准的重要改进。H.264/AVC允许运动矢量超出图像边界,在这种情况下应使用距离运动矢量所指位置最近的图像内的像素进行边界扩展。码流中传送的运动矢量为当前运动矢量与预测运动矢量的差值,预测运动矢量为邻近块运动矢量的中值。此外,不可以跨越条带边界进行运动预测。
H.264/AVC支持T.Wiegand(1999,2001)提出的多帧运动补偿预测。也就是说,先前编码后的多个帧都可以作为运动补偿预测的参考帧,如图12所示。
多帧运动补偿预测要求编码器和解码器都要在多帧缓冲区(multi-picture buffer)中保存参考帧。解码器根据码流中指定的存储管理控制操作(Memory Management Control Operation,MMCO)来复制编码器的多帧缓冲区。除非多帧缓冲区的大小设为一帧,否则必须指定参考帧在多帧缓冲区中的索引值。对于每一个运动补偿的16×16、16×8、8×16、或8×8的亮度块都必须传输参考帧索引参数。8×8以内的运动补偿块必须采用相同的参考帧。
除了上面描述的运动补偿宏块模式外,P宏块也可以采用P_Skip模式编码。这种模式既不传输量化后的变换系数,也不传输运动矢量和参考帧索引值参数。P_Skip宏块默认使用16×16块,参考帧索引参数为0,运动矢量为预测值。P_Skip编码模式的用途在于可以用非常少的比特数表示没有变化或恒定运动的大块图像区域。
2.B条带的帧间预测
H.264/AVC采用了M.Flierl etc.(1998,2003)提出的B条带,并且B条带可以作为运动补偿预测的参考帧。这样,B条带与P条带间的本质差异在于B条带中的某些宏块或块可以使用两个不同的运动补偿预测的加权平均值作为当前块的预测值。B条带使用两个不同的参考图像列表(reference picture lists),分别为列表0(list 0)和列表1(list1)。
B条带支持四种不同的帧间预测类型:列表0,列表1,双向预测,和直接预测(direct prediction)。对于双向预测模式,预测信号为运动补偿列表0和列表1预测信号的加权平均。直接预测模式由先前传输的语法元素来推知,可以是列表0预测,或列表1预测,或双向预测。
B条带使用的宏块划分与P条带相似。除了P_16×16,P_16×8,P_8×16,P_8×8,和帧内编码类型外,B条带还支持双向预测和直接预测。对于每一个16×16,16×8,8×16,和8×8的块,可以单独选择预测方式(列表0,列表1,或双向预测)。B宏块中的8×8分区也可以用直接模式编码。如果一个直接编码的宏块没有量化后的变换系数需要传递,那么称这种模式为B_Skip模式,该模式采用与P条带中的P_Skip模式类似的方法进行编码。运动矢量的编码模式与P条带类似,因为邻近的块可能用不同的预测模式进行编码,所以需要做一些适当的调整。
2.2.9变换和量化
与早期的视频编码标准相似,H.264/AVC也要对预测残差进行变换编码。但是,与众不同的是,H.264/AVC采用的是4×4整数变换,该变换与4×4离散余弦变换(Discrete Cosine Transform,DCT)具有相似性质。变换矩阵如下:
由于采用精确的整数操作来定义反变换,所以避免了其它标准的正反变换不匹配现象。基本的变换编码过程与其它标准非常相似:在编码器端,进行DCT正变换、“之”字扫描、量化以及熵编码;在解码器端执行相反的过程。关于H.264/AVC变换的细节信息请见参考文献H.Malvar etc.(2003)。
前文提过,Intra_16×16预测模式和色度块模式是用来编码平滑区域的。对于Intra_16×16预测模式,DCT变换后的DC系数需要进行第二次4×4的Hadamard变换。对于每个色度块,其DCT变换后的DC系数需要进行第二次2×2的Hadamard变换。采用第二次变换是因为平滑区域的二维变换具有如下特性:平滑区域的重建精度与变换的一维尺寸成反比。因此,对于非常平滑的区域,相比于仅用4×4变换的情形,采用了二次变换可以使得重建误差减少很多。
选用小尺寸的DCT变换的理由如下:H.264/AVC的帧内和帧间预测模式使得残差的空间相关性较小。这就意味着在去除相关性方面对变换需求不大,因而,采用4×4的变换来消除统计相关性就已经足够了。
在相同的客观压缩能力下,4×4变换在视觉上具有减小边缘附近噪声(即通常所说的振铃失真)的作用。同时,小尺寸的变换在计算量和处理字长两方面的需求都较小。由于H.264/AVC的变换过程仅使用加法和移位操作,所以避免了编码器和解码器之间不精确匹配的问题(注:采用8×8DCT变换的标准都存在这个问题)。
H.264/AVC用量化参数来决定变换系数的量化过程。该量化参数的取值区间为0到51之间的任一整数。量化参数每增加1,表示量化步长增加大约12%(量化参数增加6,表示量化步长增加刚好一倍)。值得注意的是量化步长增加12%就意味着比特率大约减少12%。
量化后的变换系数通常采用“之”字型扫描,然后进行熵编码并传输。色度块的2×2DC系数用栅格方式扫描。用16位整数加法和移位操作就可以实现H.264/AVC的反变换。同样,编码器端也仅需要16位.操作即可实现正向变换和量化过程。
2.2.10熵编码
H.264/AVC支持两种熵编码方法。其中,变长编码方法采用单一的exp-Golomb码表来编码除量化后的变换系数以外的所有语法元素。这样做就避免了为每个语法元素设计不同的VLC表,仅仅根据统计数据定制到这个唯一的码表的映射就可以了。
在传输量化后的变换系数时,H.264/AVC使用了一种更有效的称为CAVLC(Context-Adaptive Variable Length Coding)的编码方式。在这种编码方式中,不同的语法元素使用不同的VLC码表。由于这些VLC码表是根据相应的语法元素的统计规律设计的,所以熵编码的性能要优于使用唯一VLC码表的情形。
如果采用D.Marpe等(2003)提出的CABAC(Context-AdaptiveBinary Arithmetic Coding)可以进一步提升熵编码的效率。首先,使用算术编码允许给每个符号分配非整数个数的比特数,这样非常有益于概率大于0.5的符号的编码。CABAC的另外一个重要特性是其上下文模型,即用已编码语法元素的统计信息来估计条件概率,这些条件概率用于在不同的概率模型间进行切换。H.264/AVC规定的算术编码核心引擎及其相关的概率估计都采用查表的方式,因而避免了乘法,降低了复杂度。与CAVLC相比,CABAC可以使比特率降低5%-15%。对于隔行扫描的电视信号,CABAC的优势最明显。
2.2.11环路去马赛克滤波
基于块的编码的一个共有特征就是解码后的图像中存在肉眼能够分辨出来的块结构。通常来讲,块的边缘的重建误差要大于块的内部的重建误差。目前编码技术中存在的最主要的视觉失真就是这种“马赛克”现象。H.264/AVC采用了P.List etc.(2003)提出的自适应环路去马赛克滤波器(adaptive in-loop deblocking filter)来对马赛克进行平滑处理。
去马赛克滤波的基本思想如下:如果块边界的样本值之间的绝对差异较大,那么就很有可能存在块失真,因此应该减少这种差异,即进行滤波。另一方面,如果块边界的样本值之间的绝对差异过大,以至于不能用量化导致的粗糙度来解释,那么这个边界很有可能是原始图像中的真实边界,不应做平滑处理。图13用一个一维边界来说明去马赛克滤波的原理。p0和q0仅在满足下列条件时做滤波处理:
|p0-q0|<α(QP)and|p1-p0|<β(QP)and|q1-q0|<β(QP),
其中,β(QP)小于α(QP)。p1和q1在满足下列条件时做滤波处理:
|p2-p0|<β(QP)or|q2q0|<β(QP)。
去马赛克滤波的整体思想是既保证减少块效应,又保证原图像的边界基本不动,因而可大大改进解码后的主观质量。在同样客观质量的前提下,使用滤波器相比于不使用滤波器的情形可以降低比特率5%-10%。图14展示了去马赛克滤波器的性能。
2.2.12假想参者解码器
一个视频标准必须确保符合标准的解码器都能够解码所有遵从标准的]码流。要做到这一点,仅描述编解码算法是不够的。在实时***中,还必须指定解码器如何获取码流以及何时可以删除解码后的图像。因而需要定义假想参考解码器(Hypothetical Reference Decoder,HRD)来指定输入输出缓冲区模型以及与实现无关的接收器模型。这样,只有编码器生成的码流能够被HRD解码,才认为编码器是合法的。那么,只要接收器的实现过程模仿了HRD的行为,就能够保证正确解码所有遵从标准的码流。
H.264/AVC HRD对下面两个缓冲区的操作做了规定:①码流缓冲区(Coded Picture Buffer,CPB)和②解码后图像缓冲区(DecodedPicture Buffer,DPB)。H.264/AVC HRD的设计理念与MPEG-2是相似的,但是在视频发送方面却异常灵活,充分保证了在一定时延内的可变比特率传输。
与MPEG-2不同的是,H.264/AVC采用了多帧参考,参考帧的排列顺序也与显示顺序不同。因此,H.264/AVC HRD还需指定解码后图像的缓冲区管理模型,确保使用适当的存储空间来存储解码器端的参考帧。
2.3H.264/AVC特色技术
与先前的视频编码标准相比,H.264/AVC在预测方面提高了编码性能的特色技术如下:
●运动补偿块尺寸灵活:H.264/AVC在运动补偿的块大小的选择方面比其他标准要灵活得多,最小的块大小为4×4。
●1/4像素精度运动补偿:多数先前的标准至多采用半像素运动矢量。H.264/AVC对此做了改进,采用1/4像素精度的运动矢量,这种思路起源于MPEG-4视频标准(part 2)的先进档次(advanced profile)。
●运动矢量允许超过图像边界:MPEG-2及其之前的标准都要求运动矢量必需指向参考帧的边界以内。H.264/AVC允许运动矢量指向参考帧的边界以外,边界以外像素的取值为边缘像素的向外插值。这种边界外插技术起源于H.263的可选项。
●多帧参考:MPEG-2及其之前的标准的预测编码帧(即“P”帧)仅使用紧邻的前一帧来预测当前帧的值。H.264/AVC扩展了H.263++的增强型参考帧选择技术,允许编码器在解码后的多个帧中选择匹配的块。H.264/AVC在双向预测的“B”帧中也允许使用多帧参考。而在MPEG-2中,B帧仅允许使用两个特定的帧,一个是按照显示顺序前向相邻的I帧或P帧,另一个是按照显示顺序后向相邻的I帧或P帧。
●参考帧顺序和显示顺序的无关性:在H.264/AVC之前的标准中,运动补偿参考帧的顺序与显示输出的顺序之间有严格的相关性。而在H.264/AVC中,去除了这种相关性限制,由编码器来灵活决定参考帧顺序和显示顺序,所受的唯一限制是解码器的存储容量。去除这种相关性的另一个好处是消除了双向预测帧在显示时的额外时延需求。
●图像表示方法和图像参考能力的无关性:在H.264/AVC之前的标准中,B帧不能作为参考帧。新标准去除了这个限制,从而使编码器更具有灵活性,在多数情况下能够使用与当前编码的帧更近似的帧作为参考帧。
●加权预测:H.264/AVC允许对运动补偿预测按照编码器的指定进行加权和偏移,这是H.264/AVC的一个创新,该技术大大提高了淡入淡出场景的编码效率。
●增强的“跳过”和“直接”运动宏块:在H.264/AVC之前的标准中,“跳过”预测编码的图像区域的运动矢量必须是零。这样的话,如果编码的当前帧与参考帧之间的关系为全局运动,就无法采用“跳过”模式来进行编码,所以不能很好地提高码率。而在H.264/AVC标准中,“跳过”模式改进为采用相邻块的运动矢量的预测值来作为当前宏块的运动矢量。对于双向预测区域(即B条带),H.264/AVC也采用了改进的“直接”运动补偿模式,从而相比于H.263+和MPEG-4(part 2)的“直接”模式更具有优势。
●帧内编码的方向性空间预测:H.264/AVC是第一个允许在P帧内使用帧内编码宏块的视频标准。对于帧内编码的块,当前块的值由当前帧内已解码块的样本值外插得到,这样做可以提高预测质量。
●环内去马赛克滤波:基于块的视频编码会产生块失真(blockingartifacts),这种失真来源于按照块的预测和变换。自适应去马赛克滤波器是提高视频质量的有效方法,如果设计合理,可以大大提高主观和客观视频质量。H.264/AVC中采用的去马赛克滤波器的思想来源于H.263+的可选项。H.264/AVC将其应用于运动补偿预测环路内,这样,采用提高了质量的帧作为后续帧间编码帧的参考帧,从而提高了预测的质量。
除了上面所总结的增强的预测方法外,H.264/AVC的其他部分采用的提高编码效率的设计列举如下:
●小块变换:所有H.264/AVC之前的视频编码标准都使用的8×8的DCT变换,而H.264/AVC主要采用4×4的DCT变换,这样就可以有效降低振铃(ringing)失真。同时,采用4×4的DCT变换也是适应4×4预测块的需要。
●分等级的块变换:虽然在多数情况下使用4×4DCT变换是有裨益的,但是有些信号更适合于采用大尺寸的DCT变换。在H.264/AVC标准中允许对低频色差块采用8×8变换,相应地,对于帧内编码的低频灰度块也可以采用16×16的DCT变换。
●短字长变换:H.264/AVC使用16-位DCT变换,而之前的标准都使用32位的DCT变换。
●精确的反变换:由于先前的视频编码标准都采用浮点DCT变换,因此,反变换是不精确的,对于同一压缩序列,不同的解码器的视频输出会稍有不同,从而降低了视频质量。而H.264/AVC采用整数变换,保证了所有的解码器能够产生完全相同的输出。
●算术熵编码:H.264/AVC采用了一种先进的熵编码方法——算术编码,算术编码是H.263的一个可选特征。在H.264/AVC中,使用增强型的算术编码,称为CABAC(Context-Adaptive Binary ArithmeticCoding)。
●上下文相关的熵编码:H.264/AVC中采用的两种熵编码方法分别称为CAVLC(Context-Adaptive Variable-Length Coding)和CABAC。将这两种熵编码方法与以前的标准相比,先进性在于基于上下文的自适应性。
H.264/AVC标准采纳了一些新技术,保证了对数据传输错误的鲁棒性以及在不同网络环境下操作的灵活性,这些新技术包括:
●参数集结构:在H.264/AVC之前的标准中,丢失序列头或帧头信息的几个关键比特就会导致解码器无法正常输出。H.264/AVC将这些参数信息分离出来,从而使其传输更灵活,保证了头信息的有效可靠传输。
●NAL单元语法结构:H.264/AVC中的每一个语法结构都被封装在一个称为NAL单元的逻辑数据包中,NAL单元语法结构使得视频数据可以以定制的方式传输到特定的网络。
●灵活的条带大小:与MPEG-2采用的固定条带(slice)结构不同,H.264/AVC标准允许灵活设定条带大小。条带的使用有利也有弊:一方面,使用条带会增加头数据,降低预测的有效性,因而会降低编码效率;另一方面,使用条带可以增加编码器的并行度,并有利于提升网络传输的鲁棒性。
●灵活的宏块排序(FMO):H.264/AVC中采用条带组(slicegroup)来对图像区域进行分区,这样每个条带都是条带组中可独立解码的一个子集。如果使用得当,通过管理每一条带包含的各区域的空间关系,FMO可以显著提高数据传输的鲁棒性。当然,FMO也可用于其他用途。
●任意的条带排序(ASO):由于一帧中的每一个条带都可以不依赖于当前帧中的其他条带而独立解码,所以H.264/AVC允许以任意顺序发送和接收一帧中的各个条带。这种能力能够减少实时应用中端到端的网络延迟,非常适用于诸如IP这样的无序网络协议。
●冗余编码图像:在H.264/AVC标准中,为了增强对数据丢失的鲁棒性,允许编码器对图像区域进行冗余传输。譬如,如果高分辨率图像已经丢失,那么可以再传输一个当前帧的低分辨率图像进行弥补。
●条带数据分区:由于某些编码信息(如运动矢量以及其他预测信息)比码流中的其他信息更重要,因此,H.264/AVC允许将每个条带的语法元素分成至多三个不同的分区来进行传输。
●SP/SI同步/交换帧:SP/SI是H.264/AVC标准中新增加的帧类型,使用SP/SI帧,不需要采用I帧就可以使解码器在不同序列间进行切换,或对丢失的数据进行恢复,并有效支持快进快退功能。
2.4H.264/AVC档次和级别
档次和级别提供了定义H.264/AVC标准的语法和语义子集的手段,因此也就定义了针对某一特定比特流的解码器能力。档次(profile)是H.264/AVC标准所定义的整个比特流语法的一个限定的子集。级别(level)是比特流中参数的限制集合。一致性检测将针对限定的档次以及限定的级别实现。
H.264/AVC标准中限定了档次和级别的约束部分,所有未被直接约束的语法元素和参数可以取任何H.264/AVC标准所允许的可能的值。如果一个解码器能对某个档次某个级别所规定的语法元素的所有允许值正确解码,则称这个解码器与这个给定的档次在给定的级别相一致。如果一个比特流不超过允许值的允许范围且不包括不允许的语法元素,则认为这个比特流与这个给定档次在给定级别上相一致。对于编码器来讲,不要求其使用给定的档次在给定的级别的全部语法元素,但是必须生成与该给定档次在给定级别相一致的码流。
H.264/AVC标准规定了三个档次:基本(Baseline),主(Main),和扩展(Extended)档次。
基本档次(Baseline profile)支持H.264/AVC标准中除下面两个特征集以外的所有特征:
●集合1:B条带,加权预测,CABAC,场编码,图像或宏块自适应帧/场编码。
●集合2:SP/SI条带,条带数据分区。
主档次支持集合1。但是,主档次不支持基本档次中所支持的FMO、ASO、以及冗余编码图像。这样,对于基本档次解码器所能解码的编码视频序列来讲,主档次解码器仅能解码其中的一个子集。在序列参数集中有标志位来指定什么档次的解码器能解码该编码视频序列。
扩展档次支持基本档次解码器所支持的全部特征,以及除CABAC外上面的两个集合中的全部特征。
在H.264/AVC标准中,对三个档次采用相同的级别定义。标准中总共定义了15个级别,这些级别规定的内容包括:图像尺寸的上限,解码器处理速度,多帧缓冲区的大小,视频比特率,视频缓冲区尺寸等等。一个具体的实现可以支持到一个档次的任一级别。
H.264/AVC的高压缩性能不仅可以增强现有的应用,而且必然会将视频应用拓展到一些新的领域当中。下面列出了H.264/AVC可能的应用领域:
●会话服务:这类服务要求的传输带宽低于1Mbps,并且要求低时延。短期内这类服务会使用基本档次,之后会逐渐向扩展档次过渡。该类的典型应用如下:
——采用电路交换ISDN的H.320会话视频服务
——3GPP会话H.324/M服务
——通过以太网采用IP/RTP协议的H.323会话服务
——以IP/RTP作为传输协议、SIP作为会晤层协议的3GPP会话服务
●娱乐视频应用:这类服务要求的带宽为1-8Mbps,时延为0.5到2秒。该类应用可能会使用主档次。典型应用如下:
——通过卫星、电缆、或DSL的广播
——标准清晰度或高清晰度的DVD
——通过各种通道的视频点播
●流媒体服务:这类服务的带宽要求为50-1500kbps,时延为2秒以上。该类服务可能采用基本档次或扩展档次。典型应用可按传输通道分为有线和无线两大类:
——以IP/RTP作为传输协议、SIP作为会晤层协议的3GPP流媒体服务,该服务一般会采用基本档次。
——基于以太网的,以IP/RTP作为传输协议、SIP作为会晤层协议的流媒体服务。该领域内的服务目前被私有解决方案所主导,该类服务应使用扩展档次,估计需要与未来的***设计相集成才能使用。
●其它服务:该类服务采用低比特率,并通过文件进行传输,因此对时延没有要求。该类服务应根据具体的应用选择使用三个档次中的某一个。应用实例包括:
——3GPP多媒体信息服务
——视频邮件
2.5小结
H.264/AVC视频编码标准是由ITU-T VCEG和ISO/IEC MPEG两个组织联合开发并标准化的。H.264/AVC采用了大量先进的视频编码技术以提高编码效率以及保障网络应用的灵活性。H.264/AVC视频编码层的设计采用了传统的基于块的运动补偿加变换的混合编码模式,但是与早期的标准相比又存在着一些重要差异。这些差异简要归纳如下:
●增强的运动预测能力;
●小块(4×4)精确DCT变换;
●自适应环内去马赛克滤波器;
●增强的熵编码方式。
在相同视觉质量的前提下,H.264/AVC的比特率相比于早期的标准大约降低50%。对于高时延的应用,H.264/AVC的优势更加明显。
3H.264/AVC解码器优化
H.264/AVC是通过电缆、卫星、电信网络传输广播质量的视频信息的理想标准。由于标准本身的复杂性,编解码过程所需的计算量比现有其它标准要大得多。因此,对H.264/AVC编解码程序的算法以及实现技术的优化是存储以及流媒体应用的迫切需求。
本部分致力于H.264/AVC基本档次解码器的优化实现技术。我们从参考代码JM61e开始着手,通过裁减参考代码得到H.264/AVC基本档次解码器。然后对基本档次解码器的各个重要模块进行了复杂度分析,确定了H.264/AVC基本档次解码器中最耗时的模块。之后提出了与平台无关的纯C版本优化技术,包括参考帧填充、自适应块大小运动补偿、以及快速IDCT变换等实现技术,该版本是进行基于特定处理器(CPU,或DSP)进一步的优化的基础。然后给出了针对Intel CPU的MMX/SSE/SSE2多媒体指令集进行优化的方法以及实验结果。最后为本部分总结。
3.1获取基本档次解码器
纯C版本的解码器优化工作可以分为两个步骤:第一步是在参考代码基础上通过裁减非基本档次部分得到基本档次解码器;第二步才是旨在提高速度的算法与程序级优化。裁减步骤相比于优化步骤要简单得多。本节讲述如何从参考代码着手获取基本档次解码器。
3.1.1H.264/AVC参者代码演化进程
表1 H.264/AVC的标准化进程
No. | TML/JM | Date | Location |
1 | TML-1 | Aug.1999 | Berlin,Germany |
2 | TML-2* | Oct.1999 | Red Bank,NJ,USA |
3 | TML-3 | Feb.2000 | Geneva,Switzerland |
4 | TML-4 | May,2000 | Osaka,Japan |
5 | TML-5 | Aug.2000 | Portland,OR,USA |
6 | TML-6 | Jan.2001 | Eibsee,Germany |
7 | TML-7* | Apr.2001 | Austin,TX,USA |
8 | TML-8 | May,2001 | Porto Seguro,Brazil |
9 | TML-9 | Sep.2001 | Santa Barbara,CA,USA |
10 | JM-1 | Dec.2001 | Pattaya,Thailand |
11 | JM-1 | Feb.2002 | Geneva,Switzerland |
12 | JM-2 | May,2002 | Fairfax,VA,USA |
13 | JM-3 | July 2002 | Klagenfurt,Austria |
14 | JM-4 | Oct.2002 | Geneva,Switzerland |
15 | JM-5 | Dec.2002 | Awaji,Japan |
16 | Final | Mar.2003 | Pattaya,Thailand |
H.264/AVC的发展过程可以概括为1999年8月到2003年3月之间的各个版本的逐步改善。表1给出了各版本的创建时间和地点,其中带“*”号的表示没有相应的参考代码。VCEG单独开发该标准时称文档和软件模型为TML(Test Model Long-term),之后,MPEG和VCEG的联合小组JVT称之为JM(Joint Model)。
VCEG在H.263收尾之时启动了H.264的研究,TML的第一个版本TML-1于1999年8月问世。图15显示了用QCIF尺寸的Foreman序列(帧率为10帧/秒)测试的各版本编码器性能,由该图可见,两个邻近参考代码版本间性能改善不大。TML-1的PSNR性能与H.263相似,并且稍低于MPEG-4 ASP。H.264/AVC的最终版本JM-6具有一些TML-1不包括的特征,诸如场编码、B图像、NAL等等。在相同比特率情况下,JM-6比TML-1的PSNR值提高了2-3个dB;或者说在相同PSNR值的情况下,JM-6比TML-1的比特率降低了40%-60%。
3.1.2如何获得基本档次解码器
本部分说明如何裁减参考代码以获得基本档次解码器。本工作启动时JM6.1e为参考代码最新版本,所以我们从JM6.1e开始裁减工作。虽然之后参考代码还有后续版本出现,但JM6.1e已经实现了基本档次编解码器的全部程序,所以选择JM6.1e对于基本档次编解码器的优化工作来讲是非常合适的。
符合某一档次的解码器必须能对该档次所规定的语法元素的所有允许值正确解码。这就要求在裁减前准备足够的基本档次码流,以在裁减过程中不断用所有的基本档次码流对当前状态的解码器进行测试,以保证裁减后版本在功能上的正确性与完备性。正确性是指在裁减过程中确保PSNR(peak signal-to-noise ratio)值保持不变;完备性是指能够解码所有基本档次码流。
如果说保证正确性是裁减过程的基本问题,那么,保证完备性是裁减基本档次解码器所要解决的首要问题。如何来保障完备性呢?这就要求对多个测试序列与基本档次编码器所规定的语法元素的所有允许值进行测试。
在参考代码编码器的配置文件中,共有75个参数,这些参数用来配合输入输出文件、编码参数、条带、B帧、SP帧、搜索范围、率失真优化、环路滤波器、以及CABAC上下文初始化信息等等。其中,基本档次解码器必须能够正确解码的参数及其取值范围列于表2中。
表2 基本档次解码器必须能够正确解码的参数列表
序号 | 参数名 | 含义 |
1 | IntraPeriod | Period of I-Frames(0=only first) |
2 | QPFirstFrame | Quant.Param.for first frame(intra)(0-51) |
3 | QPRemainingFrame | Quant.Param.for remaining frames(0-51) |
4 | UseHadamard | Hadamard transform(0=not used,1=used) |
5 | SearchRange | Max search range |
6 | NumberReferenceFrames | Number of previous frames used for inter motionsearch(1-5) |
7 | InterSearch16×16 | Inter block search 16×16(0=disable,1=enable) |
8 | InterSearch16×8 | Inter block search 16×8(0=disable,1=enable) |
9 | InterSearch8×16 | Inter block search 8×16(0=disable,1=enable) |
10 | InterSearch8×8 | Inter block search 8×8(0=disable,1=enable) |
11 | InterSearch8×4 | Inter block search 8×4(0=disable,1=enable) |
12 | InterSearch4×8 | Inter block search 4×8(0=disable,1=enable) |
13 | InterSearch4×4 | Inter block search 4×4(0=disable,1=enable) |
14 | SliceMode | Slice mode(0=off,1=fixed #mb in slice,2=fixed#bytes in slice,3=use callback,4=FMO) |
15 | SliceArgument | Arguments to modes 1 and 2 above |
16 | num_slice_groups_minus1 | Number of Slice Groups Minus 1,0=no FMO,1=two slice groups,etc. |
17 | FmoType | 0:Slice interleave,1:Scatter,2:fully flexible,datain FmoConfigFileName,3:rectangle defined byFmoTopLeftMB and FmoBottomRightMB,4-6:evolving slice groups. |
18 | RDOptimization | RD-Optimized mode decision(0:off,1:on,2:withlosses) |
19 | UseConstrainedIntraPred | If 1,Inter pixels are not used for Intra macroblockprediction. |
20 | PicOrderCntType | 0:POC mode 0,1:POC mode 1,2:POC mode 2 |
我们采用的测试序列为图16所示的六个标准测试序列,这些序列均为CIF尺寸,长度从250到2000帧不等。其中,flowergarden、tempete和mobile三个序列运动比较剧烈,foreman、highway和paris三个序列运动比较平缓。用这六个测试序列与表2中的各个参数进行组合编码,就生成了我们用于测试的基本档次码流数据库。
裁减过程如下:
(1)基本档次解码器只有I条带和P条带,因此,裁减过程的第一步是删除所有与B条带、BS条带、SP条带、和SI条带相关的程序。
(2)只保留一个分区(partition)来放置输入码流。
(3)在基本档次中,视频序列的每一个编码图像都是只包含帧宏块的编码帧,也就是说,基本档次不支持隔行扫描的帧。因此,第三步是删除所有与场相关的解码过程,该步骤很繁琐。
(4)由于基本档次的P条带不支持加权预测,所以第四步是删除与加权预测相关的程序。
(5)基本档次中采用的熵编码方式为CAVLC,删除CABAC解码程序。
(6)做最后的清理工作:删除冗余变量和函数,使用尽可能少的存储空间。
3.1.3基本档次解码器复杂度分析
要对裁减后的基本档次解码器进行优化,首先必须进行复杂度分析以确定计算瓶颈,然后针对耗时较多的模块进行优化。那么,如何进行复杂度分析呢?从完备性测试的角度来讲,应该使用基本档次码流数据库中的全部码流文件。但是,从解码器优化的角度来讲,无需考虑表2中所列的全部参数,因为表2中的很多参数(诸如UseHadamard、RDOptimization等等)主要影响编码器的性能,而与解码器无关。这样,要对基本档次解码器的复杂度进行分析,可以采用一些固定的、相对简单的配置,来对六个视频序列进行分析,这样就可以屏蔽掉复杂输入参数的影响,从而直接显露出对所有视频序列都耗时很多的功能模块。
我们采用的进行复杂度分析的编码器的配置如下:
(1)单帧参考(NumberReferenceFrames=1);
(2)每帧只有一个条带(SliceMode=0);
(3)每隔100帧使用一个I帧(IntraPeriod=100);
(4)量化参数为25(QPFirstFrame=QPRemainingFrame=25);
(5)不使用Hadamard变换(UseHadamard=0);
(6)最大搜索范围为16(SearchRange=16);
(7)不采用率失真优化(RDOptimization=0);
(8)使用所有从16×16到4×4的块类型(InterSearch16×16=1,InterSearch16×8=1,InterSearch8×16=1,InterSearch8×8=1,InterSearch8×4=1,InterSearch4×8=1,InterSearch4×4=1);
(9)不采用FMO(num_slice_groups_minus1=0);
(10)帧间编码的像素可用于帧内宏块预测(UseConstrainedIntraPred=0);
(11)POC模式为0(PicOrderCntType=0)。
采用上述配置,对六个序列进行编码,编码性能如表3所示。由表3可见,由于视频序列所含内容不同,在采用相同编码配置的情形下,重建序列的质量(SNR)也各不相同,比特率上的差异更是明显。基本上来讲,运动平缓的序列比特率较低,重建后客观质量也较好;运动剧烈的图像比特率较高,重建后客观质量稍差一些。
表3六个标准测试序列在相同配置下的编码性能
序列 | 编码帧数 | SNR Y | SNR U | SNR V | 比特率(Kbits/s)(设帧率为30Hz) | 编码总时间(s) |
flowergarden | 250 | 37.23 | 39.06 | 39.45 | 2618.73 | 200.982 |
foreman | 300 | 38.11 | 41.80 | 43.70 | 846.02 | 242.078 |
tempete | 260 | 37.02 | 38.79 | 40.12 | 2219.72 | 208.350 |
mobile | 300 | 36.29 | 37.80 | 37.72 | 2905.49 | 238.251 |
highway | 300 | 39.60 | 39.23 | 39.92 | 621.51 | 245.699 |
paris | 300 | 37.85 | 40.82 | 40.97 | 785.39 | 228.793 |
使用这六个序列的码流,对裁减后的基本档次解码器的性能进行分析,分析结果如表4所示。由该表可见,运动补偿和熵解码是最耗时的两个模块,仅这两个模块就占用了总解码时间的70%~85%。此外,IDCT、环路滤波、以及缓冲区管理模块也比较耗时。表中最后两列分别为以秒为单位计的解码时间以及解码帧率。
表4裁减后基本档次解码器各主要功能模块耗时分布
序列 | 运动补偿 | IDCT | 环路滤波 | 熵解码 | 缓冲区管理及其他 | 解码时间(秒) | 解码帧率 |
flowergarden | 24.8% | 5.0% | 4.4% | 58.0% | 7.8% | 11.375 | 21.978 |
foreman | 42.4% | 7.0% | 6.2% | 33.8% | 10.6% | 9.687 | 30.969 |
tempete | 30.1% | 5.0% | 5.1% | 53.0% | 6.8% | 12.156 | 21.389 |
mobile | 25.3% | 4.2% | 4.5% | 59.9% | 6.1% | 16.125 | 18.605 |
highway | 38.6% | 9.0% | 6.0% | 35.1% | 11.3% | 7.640 | 39.267 |
paris | 34.6% | 9.3% | 5.8% | 35.8% | 14.5% | 7.062 | 42.481 |
说明:本发明进行的所有测试都使用了相同的测试平台。CPU为Pentium IV处理器,主频为2.4GHz,内存为512Mbytes,操作***为Windows 2000 professional。
3.2算法级优化
参考代码的功能是用来验证标准中的各种概念,以及提供验证某种具体实现的优劣的工具。参考代码的主要目标是正确性以及与标准的一致性,速度问题没有放在首要位置。因此,有必要研究H.264编解码器中算法的优化方案。
本部分我们探讨与平台无关的解码器算法级优化技术。由上文可知,解码器中的最关键的五个模块分别为:运动补偿、熵解码、缓冲区管理、反变换、以及环路滤波。为加快解码器的速度,我们需要集中精力于这些最耗时模块的优化工作,下面依次阐述这些功能模块的快速算法。
3.2.1运动补偿模块快速算法
从算法的角度来讲,运动补偿模块又可细分为两个子模块,即亮度分量运动补偿模块和色度分量运动补偿模块。H.264/AVC采用1/4像素精度的运动矢量,亮度块和色度块运动补偿的计算图解分别如图17和图18所示。对于亮度块,1/2像素用6-tap FIR滤波器来插值得到,滤波器的权值分别为(1/32,-5/32,5/8,5/8,-5/32,1/32);1/4像素为相邻的整数点或1/2像素点的线性平均值。对于4:2:0采样的视频序列,1/4像素精度的亮度块运动矢量对应于1/8像素精度的色度块运动矢量,每一个1/8色度像素由相邻四个整数点线性插值得到。
H.264/AVC解码器的运动补偿插值计算的公式是标准中严格规定的,且编解码器采用相同的算法,所以要加快运动补偿模块的执行速度,只能从实现方法上着手。对于运动补偿模块,我们提出了“参考帧填充”和“自适应块大小MC”两种优化技术,下面将分别介绍。这两种优化技术即适用于亮度块运动补偿,又适用于色度块运动补偿。
I.参考帧填充
H.264/AVC标准允许运动矢量指向图像边界以外的位置,那么,计算P-宏块的帧间预测值时,使用的参考帧中的像素位置就有可能超出图像的高和宽。在超界情况下,采用参考帧中最邻近位置的像素值来进行替代。在参考代码中,但凡使用参考帧中的像素点(x_pos,y_pos)来进行运动补偿计算,都需要使用下式来计算实际使用的像素点(x_real,y_real):
x_real=max(0,min(img_width-1,x_pos))
y_real=max(0,min(img_height-1,y_pos))
为避免求取最大值最小值的计算,我们提出了图19所示的参考帧填充技术。
需要对参考帧的上、下、左、右四个条带进行填充,填充算法如下(参见图19(d)):
Region0:原始参考帧中的对应值
Region1:所有像素等于原始参考帧中左上角的像素值
Region2:所有像素等于原始参考帧中右上角的像素值
Region3:所有像素等于原始参考帧中左下角的像素值
Region4:所有像素等于原始参考帧中右下角的像素值
Region5:由原始参考帧中第一列像素水平外插得到
Region6:由原始参考帧中第一行像素垂直外插得到
Region7:由原始参考帧中最后一列像素水平外插得到
Region8:由原始参考帧中最后一行像素垂直外插得到
Y,U和V三个分量用同样的技术进行填充,唯一的差别在于U和V分量的填充宽度是Y分量填充宽度的一半。Y分量填充宽度取值公式为max(mv_x,mv_y)+8。如果运动搜索范围为16,并且视频对象运动平缓,可以设置填充宽度为24。对于运动比较剧烈的序列,需要设置较大的填充宽度值。值得指出的是这种参考帧填充技术的副作用是需要更多的存储空间以及额外的填充时间。
II.自适应块大小运动补偿
在参考代码中,所有亮度分量的运动补偿都按照4×4的块来做,而实际的运动补偿块大小为16×16、8×16、16×8、8×8、4×8、8×4或者4×4。如果一个宏块的预测模式为16×16,那么参考代码需要16次调用4×4运动补偿函数。考虑到函数调用开销、6-tap FIR滤波器的特性、以及数据缓存的影响,16次4×4块的运动补偿时间必然大于单次16×16块的运动补偿时间。另一方面,较大的块(16×16,8×16,16×8)相比于较小的块使用频率明显要高得多。X.S.Zhou(2003)通过大量测试指出:4×4、4×8和8×4块的使用频率仅占P帧中所有块的5%。因此,我们提出了自适应块大小运动补偿技术,也就是说,对于M×N的块(M和N的取值可以是16,8或4)直接进行M×N大小的插值操作,从而避免多次调用4×4的运动补偿函数。
色度分量运动补偿块大小应该为亮度分量运动补偿块大小的1/4,即8×8、4×8、8×4、4×4、2×4、4×2、和2×2。在参考代码中,色度块的运动补偿是逐点计算的,这样,对于色度块中的每一个点都要重新计算dx、dy、8-dx、8-dy、以及图18中所示的A、B、C、D位置。那么,采用我们所提出的自适应块大小运动补偿技术来计算色度块的运动补偿值,就能够大大减少计算量。
3.2.2熵解码快速算法
对比表3和表4可以看出,对于码率较高的序列,熵解码在解码器中所占的比重也较大(最高达60%),因此该模块的优化至关重要。熵解码部分主要是读取下列信息:帧头、宏块模式、参考帧索引、运动矢量、cbp、量化参数差值、帧内预测模式、以及残差。其中残差的读取是最耗时的,所以熵解码部分的优化重点在于残差的读取。
下面先简要介绍4×4残差的编码方式CAVLC(Context-basedAdaptive Variable Length Coding),以利于理解残差熵解码的瓶颈所在。
在CAVLC熵编码方式中,量化后的非零系数的个数(N)、系数的实际值以及位置都是分别编码的。CAVLC的设计利用了量化后4×4块的下列特性:
(1)预测、变换、以及量化后,4×4块通常是稀疏的(即包含很多零);
(2)“之”字扫描后出现次数最多的非零系数为+/-1;
(3)相邻块的非零系数的个数是相关的;
(4)非零系数的幅值从低频到高频方向有逐渐降低的趋势。
下面我们通过一个实例来阐述一个4×4的亮度块的量化后变换系数是如何编码的。设“之”字扫描实例为:
7,6,-2,0,-1,0,0,1,0,0,0,0,0,0,0,0
1)非零系数个数(N)和“(Trailing 1s)”:“Trailing 1s(T1s)”表示在扫描尾端绝对值为1的系数的个数。在本实例中T1s=2,系数个数为N=5。这两个值一起编码,并根据相邻块的系数个数选择使用4个VLC码表中的一个。
2)编码非零系数的值:由于T1s只能等于+1或-1,所以只需指定其符号。由于高频部分的系数的值比低频部分的系数的值要小,所以系数值按逆序进行编码。在本实例中,第一个待编码的系数为-2,该系数的编码采用初始码表。当编码下一个系数时(本例中值为6),如果刚刚编码的系数超过一个门限值,就使用新码表,否则使用原来的码表,这样就实现了VLC码表的自适应选取。编码非零系数共有六个exp-Golomb码表。
3)符号信息:对于T1s,符号位的传输仅需一个比特。对于其他系数,符号位的编码包含在包含在exp-Golomb码字中。
非零系数的位置信息通过指定最后一个非零系数前的零的位置来编码,可分解为下面两个步骤:
4)零的总个数(TotalZeros):这个码字指定在最后一个非零系数和起始位置之间的零的个数。在本实例中零的总个数为3。由于已知N=5,所以零的总个数一定在0到11区间内。由于N的取值范围为1到15,所以零的总个数总共有15个码表。如果N=16,没有为零的系数。
5)RunBefore:在本实例中需要继续指定零的分布。首先要编码最后一个系数之前的零的个数,本事例中个数为2。现在还剩下一个零,那么倒数第二个系数之前的零的个数应该为0或1,本例中个数为1。至此,全部信息编码完毕。
对于我们所采用的六个测试码流,熵解码部分的耗时详细分布如表5所示。表中百分比表示熵解码各部分与全部解码时间的比值。该表中第2列为步骤1耗时所占比例,第3列为步骤2耗时所占比例,第4列为步骤4耗时所占比例,第5列为步骤5耗时所占比例,第6列为解残差模块的其他部分(包括步骤3以及各种函数调用开销)耗时所占比例,第7列为解残差占全部解码时间的百分比。表中最后一列为除残差以外的其余码流信息进行熵解码所占时间比例。
表5熵解码部分耗时详细分布
由表5分析可知,解码步骤1(非零系数的总个数和高频部分+/-1的个数)、步骤4(最后一个非零系数之前的零的总个数)、以及步骤5(非零系数间零的行程)是非常耗时的。这三个步骤的共性在于都要试探性查表。参考代码的编码器与解码器对于残差的编码与解码采用相同的码表。由于编码器是正向查表,即根据已知的各维坐标从表格中取一个数值,所以对于编码器来讲,查表并不耗时。但是对于解码器来讲,是在不知具体取值的情况下(因为不知长度)去确定两维坐标值,这就有很大的不确定性。这样,对于解码器的残差解码模块来讲,对表格的改造就成了优化的关键。表格再造的目标是尽量减少查表次数以及读码流次数,表格的重改造也对应着程序流程的改动。
3.2.3快速IDCT
与其它标准采用的浮点DCT/IDCT不同的是,H.264/AVC标准采用4×4整数变换来进行空间域和频域的信号转换。在参考代码中,对所有的4×4块都要做二维IDCT变换。事实上,一个4×4块的变换且量化后的系数可能全为零,或者只有直流分量不为零。因此,我们可在实际IDCT变换前根据语法元素coded_block_pattern(cbp)对所需的变换维数进行判断。语法元素coded_block_pattern表明了哪一个8×8的块含有非零系数,只要宏块的预测模式不为Intra_16×16,那么码流中就含有coded_block_pattern这一项,并且通过该值可以计算CodedBlockPatternLuma和CodedBlockPatternChroma这两个变量,公式如下:
CodedBlockPatternLuma=coded_block_pattern%16,
CodedBlockPatternChroma=coded_block_pattern/16。
如果一个4×4块确实含有非零系数,才需进行DCT变换。如果非零系数只有一个,并且是直流分量,那么二维DCT变换可以作进一步的简化。
3.2.4其他优化措施
对于缓冲区管理模块,应使用尽量少的外存区域,尽量减少cache(高速缓存)与存储区之间的数据交换。
对于去马赛克滤波模块,由于算法是标准中严格规定的,所以优化幅度不大,仅仅是对每一条边的强度的计算可以做些精简。
除了以上所述的实现技术外,我们还采用了M.E.Lee介绍的如下优化方法:loop unrolling、loop distribution、loop interchange、以及cache优化。
3.2.5实验结果
对算法优化后的H.264/AVC基本档次解码器做性能测试,表6给出了优化后的基本档次解码器与未优化的基本档次解码器相比各部分的加速倍数。由该表可见,由于我们所提出算法的有效性,读残差、运动补偿和反变换模块都大大提高了执行速度。环路滤波模块速度提高不多,为原来的两倍左右。解码器整体速度提高到了原来的七倍左右。
表6算法优化后基本档次级解码器核心模块加速倍数
序列 | 运动补偿 | IDCT | 环路滤波 | 读残差 | 解码帧率 |
flowergarden | 8.97X | 4.30X | 1.90X | 10.17X | 6.87X |
foreman | 8.53X | 8.22X | 1.80X | 9.83X | 6.34X |
tempete | 8.33X | 4.40X | 1.68X | 10.27X | 6.34X |
mobile | 7.73X | 3.36X | 1.70X | 10.63X | 6.57X |
highway | 9.31X | 9.96X | 2.14X | 11.24X | 6.97X |
paris | 10.78X | 12.46X | 2.32X | 9.10X | 7.63X |
表7显示了优化后解码器的核心模块的耗时分布以及解码时间和解码帧率。将该表与表4对比可见,核心模块优化后,各核心模块在优化后解码器中所占的比例都有变化。整体来讲,运动补偿和读残差的比例下降很多,相比之下,环路滤波模块在优化后解码器中显得比重较大。
表7算法优化后基本档次解码器各主要功能模块耗时分布
序列 | 运动补偿 | IDCT | 环路滤波 | 读残差 | 解码时间(秒) | 解码帧率 |
flowergarden | 19.0% | 8.0% | 15.9% | 34.4% | 1.655 | 151.102 |
foreman | 31.5% | 5.4% | 21.8% | 16.9% | 1.528 | 196.289 |
tempete | 22.9% | 7.2% | 19.2% | 28.2% | 1.918 | 135.553 |
mobile | 21.5% | 8.2% | 17.4% | 32.8% | 2.455 | 122.210 |
highway | 28.9% | 6.3% | 19.5% | 17.0% | 1.096 | 273.751 |
paris | 24.5% | 5.7% | 19.1% | 23.4% | 0.925 | 324.451 |
3.3多媒体指令级优化
在算法级优化的程序基础上,可以进一步做平台级(CPU或DSP)的优化。本节我们以Intel CPU为例,阐述使用多媒体指令集达到的优化效果。
3.3.1Intel多媒体指令集简介
为了满足多媒体技术对大量数据处理的需要,Intel公司在其第5代Intel 80×86微处理器奔腾中,加入了多媒体扩展MMX指令、数据流SIMD扩展SSE指令和SSE2指令,形成了具有多媒体处理能力的奔腾II、奔腾III和奔腾IV微处理器。
I.MMX指令***
MMX(MultiMedia eXtension)意为多媒体扩展,是1996年Intel公司正式公布的微处理器增强技术。它是自1985年Intel引入32位80386微处理器以来最重大的改进。其核心是针对多媒体信息处理中的数据特点,新增了57条多媒体指令,极大地提高了Pentium/PentiumPro微处理器的性能,使得个人计算机能够更快速地运行图形、动画、音频、视频、通信及虚拟现实等应用程序。
MMX技术设计了一套基本的、通用的紧缩整形指令,共57条,基本满足了各种多媒体应用程序的需要。所谓“紧缩(Packed)整型数据”是指多个8/16/32位的整型数据组合成为一个64位数据。MMX指令主要就是使用这种紧缩整型数据,它又分为四种数据类型:紧缩字节、紧缩字、紧缩双字、紧缩4字。64位紧缩数据可以表示8个字节、4个字、2个双字或1个4字,对于大量使用8/16/32位数据的多媒体软件,这样一条MMX指令就能够同时处理8/4/2个数据单元,这就是所谓的“单指令多数据SIMD(Single Instruction Multiple Data)”结构。这种结构是MMX技术把机器性能提高的最基本因素。
例如,MMX指令PADD[B,W,D]实现两个紧缩数据的加法。PADDB指令的操作数是8对互相独立的8位字节数据元素,而PADDW指令的操作数是4对互相独立的16位字数据元素,PADDD指令的操作数是2对互相独立的32位双字数据元素。各个数据元素相加形成各自的结果,相互间没有关系和影响。在多媒体软件中,大量存在这种需要并行处理的数据。
为了方便地使用64位紧缩整型数据,MMX技术含有8个64位的MMX寄存器(MM0~MM7),只有MMX指令可以使用MMX寄存器。
MMX指令分为下面几大类:
·算术运算指令——实现对紧缩数据的加、减和乘操作;并具有“环绕”、“饱和”和“乘-加”的特点
·比较指令——单独比较两个操作数的各个数据元素(字节、字或双字)。如果比较结果为真,目的寄存器中相对应的数据元素被置为全1;否则,被置为全0。
·类型转换指令——各种紧缩数据的相互转换
·逻辑运算指令——以位方式对64位进行逻辑操作,结果返回MMX目的寄存器。
·移位指令——用源操作数指定的数量,移位每一个目的操作数中的数据元素(字、双字、或4字)。指定移位个数的源操作数可以是MMX寄存器、存储器数据和8位立即数。
·数据传送指令——实现MMX寄存器与MMX寄存器之间以及MMX寄存器与主存之间32/64位数据的传送。
·状态清除指令——清零浮点标记字寄存器
II.SSE指令***
采用MMX指令的奔腾和奔腾II处理器取得了极大的成功,推动了多媒体应用软件的发展,同时也对处理器能力提出了更高的要求。Intel公司针对互联网的应用需求,使用MMX指令集的关键技术“单指令流多数据流SIMD”,在1999年2月推出了具有SSE(数据流SIMD扩展:Streaming SIMD Extensions)指令集的奔腾III处理器。
数据流SIMD扩展技术在原来的IA-32编程环境基础上,主要提供了如下新扩展:
·具有70条指令的SSE指令集
·支持128位紧缩浮点数据(SIMD浮点数据类型)
·提供8个SIMD浮点数据寄存器XMM0~XMM7
SSE指令集有70条指令,它们可以分成三组:50条SIMD浮点指令、12条SIMD整数指令和8条高速缓冲存储器优化处理指令。SSE指令集可以在所有的IA执行模式下使用。
SSE技术中的50条SIMD浮点指令是SSE指令***的主要指令,也是Pentium III处理器性能提高的一个关键。
SSE指令集中有12条SIMD整数指令。这是为了增强和完善MMX指令***而新增加的指令。它可以使得程序员改进算法,进一步提高视频和图像处理的质量。
高性能计算机***的存储体系,在中央处理器CPU与主存储器之间有一级或两级高速缓冲存储器(简称高速缓存,英文为Cache),目的是为了加速数据和程序的存取速度。为了更好地控制Cache的操作,提高程序运行性能,SSE技术针对Pentium III设计了8条高速缓存的优化处理指令。
III.SSE2指令***
MMX指令***主要提供了并行处理整型数据的能力,SSE指令***主要提供的是单精度浮点数据的并行处理能力。2000年11月Intel公司推出奔腾4微处理器,又采用SIMD技术加入了SSE2指令,扩展了双精度浮点并行处理能力。SSE2指令旨在增强IA-32微处理器对3-D图像、视频编码解码、语音识别、电子商务、互联网等方面的能力。
SSE2指令***在与现有IA-32微处理器、应用程序和操作***保持兼容的基础上,主要增加了6种数据类型,以及并行处理这些数据的指令,使得整个多媒体指令更加完善。
SSE2指令***包括IA-32微处理器原有的32位通用寄存器、64位MMX寄存器、128位XMM寄存器,还包括32位的标志寄存器EFLAGS和浮点状态/控制寄存器MXCSR;但并没有引入新的寄存器和指令执行状态。它主要利用XMM寄存器新增了一种128位紧缩双精度浮点数据和4种128位SIMD整型数据类型。
·紧缩双精度浮点数(Packed dsouble-precision floating-point):这个128位数据类型由两个符合IEEE标准的64位双精度浮点数组成,紧缩成一个双4字数据。
·128位紧缩整数(128-bit Packed integer):这四种128位紧缩整型数据可以包含16个字节整数、8个字整数、4个双字整数、或2个4字整数。
SSE2指令***中最主要的指令就是针对128位和64位操作模式的紧缩双精度浮点指令。另外还有64位和128位SIMD整数指令、MMX和SSE技术的128位扩展指令、高速缓存控制和指令排序指令。对于具有128位存储器操作数的指令要求这个数据在主存的存储地址对齐16字节边界。但如下指令除外:movupd指令支持不对齐存取,使用8字节存储器操作数的64位操作模式指令不受对齐限制。
3.3.2优化过程及实验结果
由于只有奔腾4微处理器才支持SSE2指令,所以考虑到程序代码的通用性,我们对解码器仅使用MMX和SSE指令集进行优化。这样优化后的程序可以适用于更多厂家生产的CPU。
从H.264/AVC解码器数据处理的特性的角度来讲,环路滤波和读残差两个模块不适宜于用多媒体指令进行处理,只有运动补偿和反变换两个模块可用多媒体指令进行优化。尽管采用MMX指令后使程序性能得到了提高,但是为了充分发挥Pentium/Pentium Pro结构处理器的优势,还需要根据具体的MMX程序做进一步的优化处理。这主要包括:合理安排指令,使多条指令尽量能够在处理器内部并行执行;合理展开循环,降低由于分支循环花费的时间;确定对齐数据边界等等。多媒体指令优化后H.264/AVC基本档次解码器各主要功能模块耗时分布如表8所示。由该表对比表7可见,运动补偿和反变换两个模块所占比例进一步减小,环路滤波和读残差两个模块的比例有所增加。
表8多媒体指令优化后基本档次解码器各主要功能模块耗时分布
序列 | 运动补偿 | IDCT | 环路滤波 | 读残差 | 解码时间(秒) | 解码帧率 |
flowergarden | 9.8% | 3.8% | 25.4% | 37.3% | 1.308 | 191.068 |
foreman | 15.6% | 2.5% | 34.6% | 17.4% | 1.108 | 270.696 |
tempete | 11.1% | 3.7% | 30.1% | 30.0% | 1.471 | 176.789 |
mobile | 9.6% | 4.0% | 27.9% | 34.8% | 1.903 | 157.664 |
highway | 15.1% | 3.1% | 29.2% | 18.6% | 0.794 | 377.661 |
paris | 13.8% | 2.9% | 27.7% | 24.3% | 0.734 | 408.510 |
将多媒体指令集优化后的基本档次解码器与算法优化后的基本档次解码器相比较,加速的倍数如表9所示。由该表可见,运动补偿模块和反变换模块的速度是原来的2~3倍,多媒体指令集优化后的基本档次解码器的整体解码速度是算法优化后的基本档次解码器的1.3倍左右。
表9多媒体指令优化后基本档次解码器加速倍数
序列 | 运动补偿 | IDCT | 解码帧率 |
flowergarden | 2.45X | 2.66X | 1.27X |
Foreman | 2.78X | 2.98X | 1.38X |
Tempete | 2.69X | 2.54X | 1.30X |
Mobile | 2.89X | 2.64X | 1.29X |
Highway | 2.64X | 2.80X | 1.38X |
Paris | 2.24X | 2.48X | 1.26X |
将算法优化与多媒体指令集优化结合起来,与裁减后的参考代码解码器的速度相比较,各个模块的加速倍数如表10所示。由该表可见,运动补偿模块优化倍数最高,反变换模块次之,之后是读残差模块,速度增幅最小的是环路滤波模块。两级优化后解码速度是未优化之前的版本的九倍左右。
表10算法及多媒体指令优化后基本档次解码器加速倍数
序列 | 运动补偿 | IDCT | 环路滤波 | 读残差 | 解码帧率 |
flowergarden | 21.98X | 11.44X | 1.90X | 10.17X | 8.72X |
Foreman | 23.71X | 24.50X | 1.80X | 9.83X | 8.75X |
Tempete | 22.41X | 11.18X | 1.68X | 10.27X | 8.24X |
Mobile | 22.34X | 8.87X | 1.70X | 10.63X | 8.48X |
Highway | 24.58X | 27.89X | 2.14X | 11.24X | 9.62X |
Paris | 24.15X | 30.90X | 2.32X | 9.10X | 9.61X |
3.4小结
本部分总结了H.264/AVC基本档次解码器的优化技术。我们从参考代码JM6.1e开始着手,先对JM6.1e进行裁减,得到基本档次解码器。然后对该版本进行复杂度分析,确定了需要重点优化的若干模块:运动补偿、反变换、环路滤波、熵解码、以及缓冲区管理。3.2节给出了与平台无关的针对各个重点模块的算法级优化技术,这一步优化工作使解码速度提高到原来的七倍左右。3.3节在算法优化后的版本基础上进行了多媒体指令级的优化工作,使解码速度有了进一步的提升,最终的基本档次解码器的解码速度是未优化版本的九倍左右。
4H.264/AVC编码器优化
上一部分我们介绍了H.264/AVC基本档次解码器的优化实现技术,这一部分我们将致力于H.264/AVC基本档次编码器的优化工作。对于解码器的优化,由于解码算法以及必须解码的语法元素都是标准中严格规定的,所以优化所受的限制较多,可以施展的空间不大。而编码器则不然,要实现一个基本档次编码器,仅仅要求该编码器所生成的码流能够被基本档次解码器正确解码,并不要求该编码器生成的码流含有基本档次所涵盖的所有语法元素。另一方面,标准中也没有规定编码器应该采用的算法。这样,在实现编码器时,就可以在编码速度与编码质量间做权衡,根据特定的应用决定编码器采用的算法策略。
我们所做的H.264/AVC编码器同解码器一样,也是针对基本档次,并且从参考代码JM61e的裁剪开始做起。裁减工作相对简单,与解码器的裁减工作流程基本相同,本部分不再讲述。我们对于H.264/AVC基本档次编码器的优化工作主要集中在算法改进上,提出了改进的率失真优化(RDO)算法,新颖的“跳过”宏块快速检测法,以及快速运动搜索算法,本部分最后介绍了采用的码率控制算法以及实验结果。
4.1改进的RDO算法
编码器采用率失真优化(Rate Distortion Optimization,RDO)算法来选取最佳的宏块编码模式以及运动矢量。RDO的基本原理是最小化D+LxR,其中D为失真,R为比特率,L为拉格朗日因子(Lagrange Multiplier)。失真越小,比特率越低,则编码性能越好。T.Wiegand(2002)在JVT-B118r8中归纳了参考代码中采用的RDO过程,算法如下:
a)给定参考帧,拉格朗日因子,以及宏块量化参数。拉格朗日因子如下:
LMODE=0.85×2QP/3,
b)对于帧内4×4宏块模式,为每一个4×4的块选择使得下式最小的帧内预测模式:
J(s,c,IMODE|QP,λMODE)=SSD(s,c,IMODE|QP)+λMODE·R(s,c,IMODE|QP)
其中:
IMODE∈{DC,HOR,VERT,DIAG_DL,DIAG_DR,VERT_R,VERT_L,HOR_U,HOR_D}
c)确定使得SATD最小的最佳帧内16×16预测模式;
d)对于每个8×8块,通过使下式达到最小值来选取运动矢量和参考帧:
SSD+LxRate(MV,REF)
再用最小化下式的方法来确定每个8×8分区的编码模式,
SSD+LxRate(MV,REF,Luma-Coeff,block 8×8mode)
这里SSD为原始块s和重建信号c(经DCT,量化,和IDCT)的平方差:
e)通过最小化下式来选取16×16,16×8,和8×16块的运动矢量和参考帧
J(REF,m(REF)|LMOTION)
=SA(T)D(s,c(REF,m(REF)))+LMOTION·(R(m(REF)-p(REF))+R(REF))
f)通过最小化下式来选取宏块预测模式
J(s,c,MODE|QP,LMODE)=SSD(s,c,MODE|QP)+LMODE·R(s,c,MODE|QP)
对于不同的模式,QP和Lmode是固定的。宏块模式(MODE)的取值范围如下:
I帧:MODE∈{INTRA4×4,INTRA16×16},
P帧:
至此,当前宏块的编码模式选择完毕。
参考代码的RDO算法在质量上很好,但是在执行速度上非常不尽人意。从提高速度并确保基本不影响质量的前提出发,我们对率失真算法作了大幅度的改进。改进后的率失真优化算法流程如下:
a)给定参考帧,拉格朗日因子,以及宏块量化参数。拉格朗日因子如下:
LMODE=0.85×2QP/3,
b)如果为I帧,直接跳到步骤h);
c)检测是否可采用“跳过”模式,若可用“跳过”模式,则检测结束;
d)通过最小化下式来选取16×16,16×8,8×16和8×8块的运动矢量和参考帧:
J(REF,m(REF)|LMOTION)
=SA(T)D(s,c(REF,m(REF)))+LMOTION·(R(m(REF)-p(REF))+R(REF))
e)如果d)步骤中采用8×8块的代价最小,则转步骤f),否则转步骤g);
f)对于每一个8×8分区通过使下式达到最小值来选取每一个小块的运动矢量和参考帧:
SA(T)D+LxRate(MV,REF)
再用最小化下式的方法来确定每个8×8分区的编码模式:
SSD+Lx Rate(MV,REF,Luma-Coeff,block 8×8mode)
g)如果J大于门限值(例如512),转步骤h)进行帧内检测,否则转步骤j);
h)对于帧内4×4宏块模式,对每一个4×4的块选择使得下式最小的帧内预测模式:
J(s,c,IMODE|QP,λMODE)=SSD(s,c,IMODE|QP)+λMODE·R(s,c,IMODE|QP)
其中:
IMODE∈{DC,HOR,VERT,DIAG_DL,DIAG_DR,VERT_R,VERT_L,HOR_U,HOR_D}
i)确定使得SATD最小的最佳帧内16×16预测模式;
j)最后一步:通过最小化下式来选取宏块预测模式:
J(s,c,MODE|QP,LMODE)=SSD(s,c,MODE|QP)+LMODE·R(s,c,MODE|QP)。
我们所提出的改进的率失真优化算法相比于参考代码中采用的RDO算法在速度上有巨大的改进,主要来源于以下方面:
1)对于P帧的宏块,首先做“跳过”模式检测,(即检测以预测运动矢量作为当前宏块16×16运动矢量时,CBP是否为0,该检测的快速算法见本部分下一节),若可以采用“跳过”模式,则直接终止RDO流程。
2)“跳过”模式检测后,直接检测较大的块,即16×16,16×8,8×16和8×8块,只有在这四种块的比较结果为选用8×8块的条件下,才进行8×8以下尺寸的块的检测。
3)如果帧间检测结果已经使得失真小于预先设定的门限值,则跳过帧内模式的检测。
4)若需进一步提高编码速度,则对公式中SA(T)D部分可不选用Hadamard变换,即直接使用SAD。
4.2“跳过”宏块快速检测法
通常来讲,帧内编码的宏块的码流中包含的信息为:宏块类型,亮度预测模式、色度预测模式、QP差值、CBP、以及残差。帧间编码的宏块的码流中包含的信息为:宏块类型,参考帧索引、运动矢量与预测运动矢量的差值、QP差值、CBP、以及残差。
P帧中的宏块允许采用“跳过”模式,“跳过”模式编码的宏块的优点在于使用的码流非常少,仅需要传输宏块类型信息。一个宏块采用“跳过”模式必须满足以下五个条件:
1)当前帧为P帧;
2)当前宏块的最佳编码模式为16×16;
3)当前宏块的cbp等于零;
4)当前宏块使用的参考帧在参考帧列表中的索引值为0;
5)当前宏块的最佳运动矢量等于16×16预测运动矢量。
我们提出采用下面的四个步骤来进行“跳过”模式的快速检测:
步骤1:计算16×16块的运动矢量预测值
因为编码运动矢量需要大量的比特位,所以视频标准一般都根据邻近块运动矢量的相关性,用邻近块的运动矢量来预测当前块的运动矢量,然后仅编码当前运动矢量与预测运动矢量的差值MVD。H.264/AVC标准也采用了相同的策略,但是,鉴于H.264/AVC标准允许采用的块类型较多,所以形成预测运动矢量MVp的方法也有所不同。MVp的计算与块尺寸以及邻近运动矢量是否存在都有关系,下面简要介绍16×16块的运动矢量预测值的计算方法。
设E为当前宏块,A为与E相邻的左侧的块,B为与E相邻的上侧的块,C为E右上侧的块。如果E左侧相邻的块不止一个,那么最上面的块为A。如果E上侧相邻的块不止一个,那么最左面的块为B。图20(a)举例说明了所有块的大小都相同时邻近块的选择(本例中为16×16);图20(b)给出了邻近块与当前块大小不同时预测块的选取方式。
对于“跳过”宏块,16×16预测运动矢量MVp为A,B和C三个块的运动矢量的中值。如果A,B和C三个块中有不存在的(例如在当前条带外,或所在宏块采用了帧内编码方式),MVp的计算方式相应做修改。
步骤2:计算Y分量的cbp值是否为0
以预测运动矢量MVp为当前运动矢量,计算Y分量的预测值,然后用当前块的原始值减去预测值得到残差。对16个4×4的残差块做DCT变换,然后量化,任意一个4×4块有不为零的系数就置cbp的值为1并终止检测。这里发明人提出了检测4×4块是否含有非零系数的快速算法ETAL(Early Termination Algorithm for Luma),下面简述算法原理。
H.264采用4×4整数变换,该变换的公式如下:
其中,CXCT为核心2-D变换。E为伸缩因子矩阵,符号表示CXCT的每一个元素与E矩阵对应位置的伸缩因子相乘(纯量乘法,而不是矩阵乘法)。
H.264/AVC采用的正向量化操作如下:
Zij=round(Yij/Qstep)
其中,Yij为变换后矩阵的系数,Qstep为量化步长,Zij为量化后的系数。H.264/AVC标准中规定了总共52个Qstep的值,并用量化参数QP来索引。H.264/AVC的量化步长区间相比于其他标准要大,这就保证了编码器能够灵活精确地控制码率和质量。
可以做如下假定:如果变换后系数的直流分量为零,那么所有的交流分量就全为零。由DCT变换的性质(变换后能量集中在低频部分)可知,这个假设是合理的。对于一个4×4的块,量化后的直流分量的值为:
因此,如果满足下式,那么量化后的直流分量的值就为零,
其中,qbits=15+QP/6,qrem=QP%6,f=(1<<qbits)/6,QE为量化系数表,QP为量化参数。
步骤3:计算U分量的cbp值是否为0
先计算U分量的预测值,然后用当前块的原始值减去预测值得到8×8的残差矩阵。分别对4个4×4的小块求DCT变换,将每个4×4块的系数的直流分量提取出来构成一个2×2矩阵WD,这个2×2的矩阵需要再按照下式进行Hadamard变换。
U分量的cbp值取决于YD的量化后系数的值以及各4×4小块DCT变换后的交流系数量化后的值。只要有一个量化后的系数不为零,U分量的cbp值就不为0,可以终止检测。这里发明人提出了检测8×8色差块是否含有非零系数的快速算法ETAC(Early Termination Algorithmfor Chroma),算法原理如下:
可以做如下假定:因为WD矩阵集中了8×8块的全部直流分量,所以如果YD矩阵的四个分量量化后的系数全为零,那么U分量的cbp值就为0。
WD的四个分量计算公式如下:
YD的四个分量计算如下:
YD(0,0)=WD(0,0)+WD(0,1)+WD(1,0)+WD(1,1),
YD(1,0)=WD(0,0)-WD(0,1)+WD(1,0)-WD(1,1),
YD(0,1)=WD(0,0)+WD(0,1)-WD(1,0)-WD(1,1),
YD(1,1)=WD(0,0)-WD(0,1)-WD(1,0)+WD(1,1)。
YD各分量的量化公式为:
(|YD(i,j)|×QE[qrem][0][0]+2×f)>>(qbits+1)
因此,如果YD的四个分量都满足下式,那么U分量的cbp值就等于0。
|YD(i,j)|<((2(qbits+1)-2×f)/QE[qrem][0][0])
其中,qbits=15+QP_SCALE_CR[QP]/6,qrem=QP_SCALE_CR[QP]%6,f=(1<<qbits)/6,QE为量化系数表,QP为量化参数,QP_SCALE_CR为常量表。
步骤4:计算V分量的cbp值是否为0
先计算V分量的预测值,然后用当前块的原始值减去预测值得到8×8的残差矩阵,再用ETAC法检测cbp值是否为0。
4.3快速运动搜索算法
与早期的视频标准(H.261,MPEG-1,MPEG-2,H.263,和MPEG-4)相同,H.264/AVC也采用运动搜索与变换的混合编码框架。在混合编码框架中,主要靠运动搜索来挖掘连续帧之间的时域冗余性,测试表明,运动搜索是这种混合编码框架中最耗时的模块。在H.264/AVC中,为了提高预测精度以及增大压缩性能,又采用了多种预测模式、多帧参考、以及高精度的运动矢量,结果导致运动搜索的复杂度以及计算负载大大增加。实验表明,在单帧参考情形下,运动搜索占H.264/AVC总编码时间的60%;而在5帧参考的情形下,运动搜索要占到H.264/AVC总编码时间的80%。如果不使用率失真优化(RDO),或者采用较大的搜索范围(例如48或64),那么运动搜索耗时所占的比重就更大。
通常来讲,运动搜索包含两个步骤:一是整数点运动搜索,二是在最佳整数点附近的分数点运动搜索。对于分数点运动搜索,H.263、MPEG-1、MPEG-2以及MPEG-4采用1/2像素精度,而H.264/AVC以及MPEG-4视频标准(part 2)的先进档次(advanced profile)采用1/4像素精度来达到更高的运动描述精度以及更高的压缩性能。
快速运动搜索算法一直是视频领域的研究热点,而整数点快速搜索算法更是热中之热。现有的整数点快速搜索算法一般都采用不同的搜索步长和搜索模式,这样既保证减少计算复杂度又能够保证视频质量。经典的运动搜索算法包括T.Koga等(1981)提出的三步搜索法(TSS),A.Jain(1981)提出的二维对数搜索法(2-D LOGS),L.Liu和E.Feig(1996)提出的基于块的梯度搜索法(BBGDS),L.M.Po和W.C.Ma(1996)提出的四步搜索法(FSS),C.Zhu等(2002)提出的六边形搜索法(HEXBS)等等。
在前人算法的基础上,针对H.264/AVC运动搜索的独有特征,我们提出了适宜于整数点运动搜索的改进的六边形快速算法、以及适宜于分数点运动搜索的菱形快速算法,下面分别予以阐述。
4.3.1快速整数点搜索算法
下面先简要介绍参考代码中采用的整数点运动搜索算法,即以预测运动矢量为中心点的螺旋形完全搜索方法。这种搜索方法以预测运动矢量为中心点,然后按照螺旋形逐点判断运动搜索范围内的所有点。图21给出了运动搜索范围为2时的搜索顺序。实际的运动搜索范围一般来讲至少应等于16。
这种完全搜索方法的最大的缺点在于搜索点数过多。假设搜索范围为16,那么要搜索(16+1+16)×(16+1+16)个点,即1089个点。现有的参考文献中的快速运动搜索算法基本上都是针对这个问题,在保证质量的前提下以尽量减少搜索点数来达到快速搜索的目的。
我们所提出的整数点运动搜索算法也出于同样的考虑,同时又充分结合了RDO的需求,算法流程如下:
步骤1:如图20所示,当前块的运动矢量预测值为当前块的左侧(Mv_A)、上侧(Mv_B)和右上侧(Mv_C)的块的运动矢量的中值,即pred_mv=median(Mv_A,Mv_B,Mv_C)。以预测运动矢量为最佳运动矢量,并求该最佳运动矢量下的率失真代价(rate-distortion cost)。
步骤2:计算(0,0)运动矢量的率失真代价,并与预测运动矢量Pred_mv的率失真代价相比较,代价小的运动矢量为最佳运动矢量。
步骤3:若当前块大小为16×16,分别计算Mv_A,Mv_B,和Mv_C的率失真代价,并与最佳运动矢量的率失真代价相比,率失真代价最小的运动矢量为最佳运动矢量。
步骤4:若当前块大小不等于16×16,计算上一层块的运动矢量的率失真代价,并与最佳运动矢量的率失真代价相比,率失真代价小的运动矢量为最佳运动矢量。说明:本RDO算法采用块由大到小的搜索顺序;这样,16×16是16×8和8×16的上一层的块,8×16是8×8的上一层的块,8×8是8×4和4×8的上一层的块,4×8是4×4的上一层的块。
步骤5:以最佳运动矢量为中心,按图22所示搜索其周围的大六边形的六个点。如果率失真代价最小的点为中心点,那么终止本步骤的搜索;否则以率失真代价最小的点为新的中心点,重新进行大六边形搜索,直至某一次搜索率失真代价最小的点为中心点为止。为加快搜索速度,可限制大六边形搜索执行的最高次数,如16次。
步骤6:以最佳运动矢量为中心,按图22所示搜索其周围的小六边形的四个点。如果率失真代价最小的点为中心点,那么终止本步骤的搜索;否则以代价最小的点为新的中心点,重新进行小六边形搜索,直至某一次搜索率失真代价最小的点为中心点为止。
步骤7:搜索终止,当前最佳运动矢量即为当前位置、当前大小的块的最佳整数点运动矢量。
4.3.2快速分数点搜索算法
分数点运动搜索在与最佳整数点相邻的八个整数点所包围的窗口内进行,如图23所示,图中大写字母表示整数点位置,数字表示半像素位置,小写字母表示1/4像素位置。参考代码所采用的分数点运动搜索方法分两步骤执行,搜索过程如下:假设最佳整数搜索点为E,那么首先搜索标号为1,2,3,4,5,6,7,8的半像素点;假设7为最佳半像素位置,那么再搜索标号为a,b,c,d,e,f,g,h的1/4像素点。
参考代码的这种搜索方式要求搜索16个分数点才能确定最佳的1/4精度运动矢量。如果同时还使用了Hadamard变换,那么分数点运动搜索的复杂度就非常大。这样,与不断改进的整数点运动搜索方法相比,分数点运动搜索就成为编码器执行速度的瓶颈所在。
我们发现,图22②所示的菱形搜索模式对于整数点运动搜索来讲,既简单又有效,因此,我们将这种菱形搜索模式扩展到分数点运动搜索过程中,以达到减少搜索点数,提高执行速度的目的。
这种快速分数点运动搜索方法执行过程描述如下:以最佳整数点为中心点,搜索1/4像素步长的菱形的四个顶点。如果中心点的率失真代价最小,那么整数点即为最佳位置,终止搜索;否则,以率失真代价最小的点为中心点,继续在分数搜索窗口内以菱形模式进行搜索,一直进行到某次率失真代价最小的点为中心点为止。
4.4码率控制
码率控制是编码器的必要组成部分,其功能是在给定比特率下生成高质量的码流。码率控制在MPEG-2,MPEG-4,H.263等视频标准中都得到了广泛的研究(H.J.Lee,2000;A.Vetro,1999;J.R.Corbera,S.Lei,1999;T.H.Chiang,Y.Q.Zhang,1997;S.Kondo,H.Fukuda,1997;L.M.Wang,2001;W.Ding,B.Liu,1996;S.H.Hong,2003)。但是,H.264/AVC的码率控制算法(S.W.Ma,2003;Z.G.Li,2003)要比其它标准的码率控制算法复杂得多。这是因为在H.264/AVC中,码率控制和率失真优化两个算法都要使用量化参数,这样就造成了如下的矛盾:从码率控制算法的角度来讲,需要根据当前帧或宏块的MAD(Mean Absolute Difference)来确定量化参数;而当前帧或宏块的MAD仅在确定量化参数并执行RDO以后才能求出。
我们的码率控制算法采用了Z.G.Li(2003)提出的CBR算法,该自适应码率控制算法是基于基本单元和线性模型的。码率控制的基本步骤如下:
1.根据液体流动交通模型、线性跟踪理论、以及上下限计算当前帧的目标比特。
2.将当前帧的剩余比特数均匀分配给当前帧所有待编码基本单元。
3.根据线性模型,采用前一帧的相同位置的基本单元的实际MAD值来预测当前帧的当前基本单元的MAD值。
4.用二次率失真模型计算相应的量化参数。
5.对当前基本单元的每一个宏块执行率失真优化。
当基本单元为帧时,这种码率控制算法包括两层:GOP层码率控制和帧层码率控制。当基本单元小于帧时,整个码率控制算法中还需加入第三层:基本单元层码率控制。
4.5其他优化措施及实验结果
上一部分我们介绍了基于Intel CPU的多媒体指令集优化技术,即MMX,SSE,和SSE2指令的使用。对于编码器来讲,这种多媒体指令集优化显得尤为重要。一是因为编码器相比于解码器计算复杂度要高得多,应该选用较高档配置的机器以达到实时编码的需求,二是因为多媒体指令本身比较适合于编码器算法的需求。
提高编码器速度的其他技巧还有:多使用较小的临时缓冲区以尽量避免访问大的全局变量;对其数据边界;多使用指针等等。
经过我们的优化,编码器的速度有了大幅度的提升,并且质量上的损失很小。为了给出一个比较性的结果,我们使用优化后的编码器来重新编码图16中的六个标准测试序列,并且仍然采用表2的配置,新的编码性能如表11所示。
表11优化后的编码器性能
序列 | 编码帧数 | SNR Y | SNR U | SNR V | 比特率(Kbits/s)(设帧率为30Hz) | 编码总时间(s) |
flowergarden | 250 | 37.07 | 39.07 | 39.45 | 2654.63 | 5.598 |
foreman | 300 | 38.03 | 41.75 | 43.66 | 868.15 | 6.969 |
tempete | 260 | 36.97 | 38.80 | 40.13 | 2211.83 | 6.779 |
mobile | 300 | 36.19 | 37.77 | 37.70 | 2900.85 | 8.140 |
highway | 300 | 39.57 | 39.05 | 39.86 | 592.77 | 5.673 |
paris | 300 | 37.80 | 40.85 | 40.98 | 796.76 | 4.937 |
对比表11和表3,就得到了优化后的编码器与未优化的编码器在性能上的差异,这种差异由表12给出。表12中第3、4、5、6列分别为表11中的值减去表3中的相应值得到的差值。最后一列为速度提高的倍数,也就是帧率之比值。由表12可见,我们所采用的优化策略以较小的失真(最高为0.16db)换取了编码速度几十倍的提高。
表12编码器优化后与优化前相比性能差异
序列 | 编码帧数 | SNR Y | SNR U | SNR V | 比特率(Kbits/s)(设帧率为30Hz) | 编码帧率倍数 |
flowergarden | 250 | -0.16 | 0.01 | 0.00 | 35.90 | 35.90X |
foreman | 300 | -0.08 | -0.05 | -0.04 | 22.13 | 34.74X |
tempete | 260 | -0.05 | 0.01 | 0.01 | -7.89 | 30.73X |
mobile | 300 | -0.10 | -0.03 | -0.02 | -5.36 | 29.27X |
highway | 300 | -0.03 | -0.18 | -0.06 | -28.74 | 43.31X |
paris | 300 | -0.05 | 0.03 | 0.01 | 11.37 | 46.34X |
上面的测试结果是针对300帧以内的CIF(352×288)标准测试序列,并且在固定QP情况下得到的。我们知道,编码器的一个主要应用是压缩电影、电视节目,下面给出不同码率下压缩影片“深入敌后”的主观及客观测试结果。视频编码设置如下:VGA尺寸(640×480)、I帧自动检测、I帧间最大间隔为130帧、帧率为24帧/秒,QP最大值为32、QP最小值为22、按宏块进行码率控制。音频编码设置为:编码标准为MP3,码率为48Kbit/s,采样频率为24000Hz。该DVD影片原始大小为4.29GB。
表13给出了不同码率下该影片的客观编码性能(SNR)以及采用上述配置后生成的音视频文件的总大小。图24给出了该影片中某一帧的原图以及压缩后的重建图像。对比四幅图片可见,压缩导致了细节信息的损失,码流越低,细节信息损失越多。从整体来看,800K的码流基本可以达到DVD的质量,但是,由于DVD采用的是MPEG2编码,所以DVD的总文件大小是H.264/AVC的800K码流文件的7倍左右。对于带宽有限的视频网络点播来讲,400K的码流是一个非常不错的选择。当然,在同码率情况下,用小的尺寸进行编码会进一步提高视频质量。
表13不同码率下影片“深入敌后”的编码性能
视频码率(Kbit/s) | SNR Y | SNR U | SNR V | 编码帧率(帧/秒) | 编码后文件总大小(含音频) |
400 | 36.75 | 42.86 | 44.35 | 20.402 | 342MB |
600 | 37.90 | 43.66 | 45.03 | 18.640 | 501MB |
800 | 38.86 | 44.24 | 45.47 | 17.895 | 641MB |
4.6小结
本部分给出了完整的H.264/AVC基本档次编码器的算法优化策略,提出了改进的率失真优化(RDO)算法,新颖的“跳过”宏块快速检测法,以及快速运动搜索算法。实验结果表明,我们所采用的优化策略以较小的失真(最高为0.16db)换取了编码速度29~47倍的提高。
5H.264/AVC前景展望
H.264/AVC是面向中低码率应用的国际视频标准。该标准所提供的更高的压缩比以及更好的信道适应性使得其在视频产业界具有广阔的应用前景,例如:实时视频通信、因特网视频传输、视频流媒体服务、异构网上的多点通信、压缩视频存储、视频数据库等。该标准可以广泛应用到远程教育、视频会议、视频监控、视频存储与传输、流媒体制作等多个领域,可以运行在IP网、HFC有线网以及移动通信网等不同介质的传输网络中。
此外,MPEG标准专利代理公司MPEG LA于2003年11月17日宣布最终的MPEG-4 AVC标准收费政策,每台编解码产品设备许可费用最高0.2美元,比MPEG-2每台2.5美元降低了一个数量级。此前MPEG LA对MPEG-4的收费模式还包括按照内容和编解码时间收费的条款,一台数字电视接收装置按每天收看两个小时节目来计算,每月需要缴纳10多元的编解码技术费用。这次发布的政策已经取消按照时间收费的模式,但仍然向节目运营商按节目、订户数或本地发射台数等参数来以年度为单位征收许可费。从专利收费的角度来讲,H.264/AVC也注定会在数字视频的通信或存储领域得到越来越广泛的应用。
从H.264/AVC视频编解码技术的实用化、产品化的角度来讲,在H.264/AVC核心技术方面还应进行以下方面的深入研究:
(1)H.264/AVC视频标准的算法研究和基础代码优化
这既包括针对PC平台的编解码器MMX/SSE/SSE2优化,也包括针对非Intel/AMD平台的嵌入式***编解码器纯C优化。虽然在这方面我们已经做了大量的研究,但是算法的发展是无止境的,随着时间的推移,必然能够研究出更快更好的算法以及实现方案。
(2)H.264/AVC视频编码算法的并行处理研究和实现
参考代码实现的编码程序是基于单处理器的,而从硬件发展的角度来讲,目前存在双CPU逻辑(超线程)的CPU以及双核的DSP。那么如何利用这类双处理器,达到编码流程的高并行度呢?从H.264/AVC的标准制定的角度来讲,提供了一定的并行机制,譬如条带组/条带/宏块的划分技术。但是,从真正实现的角度来讲,还存在着这样或那样的困难,诸如同步问题、去马赛克滤波问题等等。那么,只有针对特定的双处理器,对H.264/AVC的编码算法以及处理流程进行改造,才能真正达到高效并行,从而在低成本的超线程CPU或双核DSP上实现D1尺寸的实时编码。
(3)H.264/AVC视频标准码率转换和转码技术
H.264/AVC视频标准码率转换技术指H.264/AVC高码率向低码率的转换。
转码技术指在H.264/AVC、MPEG 2、以及MPEG 4三个标准码流之间的相互转换。
(4)视频编解码标准发展及新技术的跟踪
在紧密跟踪视频标准化组织的进展的同时,努力研究国际上著名视频技术提供商的新产品、新技术,例如;Real、Quicktime、Divx、Xvid等企业标准,取长补短。
目前国内值得一提的是新兴的AVS工作组(数字音视频编解码技术标准化工作组)。该工作组由国家***科学技术司于2002年6月批准成立,挂靠单位为中国科学院计算技术研究所。工作组的任务是:面向我国的信息产业需求,***内企业和科研机构,制(修)订数字音视频的压缩、解压缩、处理和表示等共性技术标准,为数字音视频设备与***提供高效经济的编解码技术,服务于高分辨率数字广播、高密度激光数字存储媒体、无线宽带多媒体通讯、互联网宽带流媒体等重大信息产业应用。AVS工作组的官方网站是http://www.avs.org.cn。
AVS标准是《信息技术先进音视频编码》系列标准的简称。《信息技术先进音视频编码》系列标准包括***、视频、音频等三个主要标准和一致性测试等支撑标准。“第一部分:***”与目前广泛采用的国际标准MPEG-2兼容,并针对数字电视、光盘播放机、网络流媒体、多媒体通信等应用进行了具体的规定和定义,从框架上提供了对国内外各种主流视频、音频编码标准的支持。“第二部分:视频”是AVS标准中最复杂的部分,编码效率是MPEG-2视频的2-3倍,实现复杂度明显比H.264/AVC低,适宜于处理HDTV。“第三部分:音频”采用主流技术框架,是一套性能与国际标准类似的音频编码方案。至于AVS标准是否能成为国家标准我们还拭目以待。
现阶段H.264/AVC的商业前景主要包括:IP视频机顶盒应用、H.264编解码DSP芯片应用、移动平台(GPRS/CDMA 1X)甚低码率的流媒体应用解决方案应用、IP音视频协同作业应用(视频会议、可视电话、视频聊天、视频监控)等等,图25为H.264/AVC媒体产业链图解说明。基于H.264/AVC视频技术相关的产品举例如下:
(1)H.264/AVC编解码开发工具SDK软件产品
针对不同应用领域的H.264/AVC编解码SDK软件产品,用户使用SDK开发工具可以进行应用视频项目开发,例如;网络视频点播、视频会议、可视电话、视频聊天、视频监控等应用。
(2)实现H.264/AVC视频编解码的DSP芯片产品
该系列产品是针对国际上主流的DSP芯片厂商(如AnalogDevices、Texas Instruments Incorporated、Philips)的特定型号DSP来实现H.264/AVC编解码算法,使DSP芯片能增值销售。
(3)H.264/AVC编解码音视频编码、转码、节目制作***产品
该产品是面向媒体单位或视频增值运营商,进行数字视频节目制作、编辑的软件工具,它既可以作为软件工具单独销售,又可以加上硬件和专业化采集、输出设备(视频节目制作工作站)打包销售。图26与图27分别为制作平台和播放示例。
(4)H.264/AVC视频IP机顶盒产品
IP视频机顶盒应用包括三部分:一是终端H.264/AVC视频解码播放器软件(Win CE或Linux平台)以及高端H.264/AVC编码视频节目采集制作***;二是IP视频网络应用管理软件;三是机顶盒硬件。
(5)智能手机流媒体播放器产品
移动流媒体应用技术涉及到硬件、软件和***集成的各个环节。目前已开发了基于H.264/AVC的无线公网(GPRS/CDMA 1X)流媒体应用***。该项软件主要是针对不同手机平台版本产品的研发和完善,目前已在PocketPC、Smatrphone2003、Brew平台上实现,未来的产品研发主要集中于Linux、Plam、Symbian平台上的实现,使得产品的适应性更好。
Claims (1)
1.一种提供视频节目的***,包括:
节目中心,用于接收视频源节目并将所述视频源节目转换成适于在因特网上进行流传输的媒体信号;
内容传送中心,用于从所述节目中心接收所述媒体信号并使用所述媒体信号通过在因特网上进行流传输来传送所请求的节目;以及
订户设备,用于从内容传送中心请求节目。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200510066767 CN1870748A (zh) | 2005-04-27 | 2005-04-27 | 因特网协议电视 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200510066767 CN1870748A (zh) | 2005-04-27 | 2005-04-27 | 因特网协议电视 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1870748A true CN1870748A (zh) | 2006-11-29 |
Family
ID=37444286
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200510066767 Pending CN1870748A (zh) | 2005-04-27 | 2005-04-27 | 因特网协议电视 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1870748A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102186079A (zh) * | 2011-05-11 | 2011-09-14 | 北京航空航天大学 | 一种基于运动向量的h.264基本档次帧内模式选择方法 |
CN102244781A (zh) * | 2011-03-31 | 2011-11-16 | 苏州汉辰数字多媒体有限公司 | 一种多核高速dsp平台的avs视频编码器 |
CN101742295B (zh) * | 2008-11-14 | 2012-11-28 | 北京中星微电子有限公司 | 基于图像自适应条带划分的自适应帧场编码方法及设备 |
CN101918937B (zh) * | 2007-12-05 | 2014-03-05 | 欧乐2号公司 | 使用流动互动式视频的用于合作会议的*** |
CN103891288A (zh) * | 2011-11-07 | 2014-06-25 | 株式会社Ntt都科摩 | 动态图像预测编码装置、动态图像预测编码方法、动态图像预测编码程序、动态图像预测解码装置、动态图像预测解码方法以及动态图像预测解码程序 |
CN104717498A (zh) * | 2010-04-23 | 2015-06-17 | M&K控股株式会社 | 用于对图像编码的设备 |
CN111164976A (zh) * | 2019-01-03 | 2020-05-15 | 北京大学 | 视频处理方法和装置 |
-
2005
- 2005-04-27 CN CN 200510066767 patent/CN1870748A/zh active Pending
Cited By (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101918937B (zh) * | 2007-12-05 | 2014-03-05 | 欧乐2号公司 | 使用流动互动式视频的用于合作会议的*** |
CN101742295B (zh) * | 2008-11-14 | 2012-11-28 | 北京中星微电子有限公司 | 基于图像自适应条带划分的自适应帧场编码方法及设备 |
CN105120274B (zh) * | 2010-04-23 | 2017-09-19 | M&K控股株式会社 | 用于对图像编码的设备和方法 |
CN105245884B (zh) * | 2010-04-23 | 2018-02-02 | M&K控股株式会社 | 用于对图像编码的设备和方法 |
CN105245887B (zh) * | 2010-04-23 | 2017-09-19 | M&K控股株式会社 | 图像编码设备 |
CN104717498A (zh) * | 2010-04-23 | 2015-06-17 | M&K控股株式会社 | 用于对图像编码的设备 |
CN105120273A (zh) * | 2010-04-23 | 2015-12-02 | M&K控股株式会社 | 用于对图像编码的设备和方法 |
CN105120274A (zh) * | 2010-04-23 | 2015-12-02 | M&K控股株式会社 | 用于对图像编码的设备和方法 |
CN105245886A (zh) * | 2010-04-23 | 2016-01-13 | M&K控股株式会社 | 用于对图像编码的设备和方法 |
CN105245887A (zh) * | 2010-04-23 | 2016-01-13 | M&K控股株式会社 | 用于对图像编码的设备和方法 |
CN105245877B (zh) * | 2010-04-23 | 2017-11-10 | M&K控股株式会社 | 用于对图像编码的设备和方法 |
CN105245883A (zh) * | 2010-04-23 | 2016-01-13 | M&K控股株式会社 | 用于对图像编码的设备和方法 |
CN105245877A (zh) * | 2010-04-23 | 2016-01-13 | M&K控股株式会社 | 用于对图像编码的设备和方法 |
CN105245884A (zh) * | 2010-04-23 | 2016-01-13 | M&K控股株式会社 | 用于对图像编码的设备和方法 |
CN104717498B (zh) * | 2010-04-23 | 2017-09-19 | M&K控股株式会社 | 用于对图像编码的设备 |
CN105245886B (zh) * | 2010-04-23 | 2017-11-10 | M&K控股株式会社 | 用于对图像编码的设备和方法 |
CN105245883B (zh) * | 2010-04-23 | 2017-11-10 | M&K控股株式会社 | 用于对图像编码的设备和方法 |
CN105120273B (zh) * | 2010-04-23 | 2017-10-24 | M&K控股株式会社 | 用于对图像编码的设备和方法 |
CN105245885B (zh) * | 2010-04-23 | 2017-11-10 | M&K控股株式会社 | 用于对图像编码的设备和方法 |
CN105245885A (zh) * | 2010-04-23 | 2016-01-13 | M&K控股株式会社 | 用于对图像编码的设备和方法 |
CN102244781A (zh) * | 2011-03-31 | 2011-11-16 | 苏州汉辰数字多媒体有限公司 | 一种多核高速dsp平台的avs视频编码器 |
CN102186079A (zh) * | 2011-05-11 | 2011-09-14 | 北京航空航天大学 | 一种基于运动向量的h.264基本档次帧内模式选择方法 |
US9788005B2 (en) | 2011-11-07 | 2017-10-10 | Ntt Docomo, Inc. | Video prediction encoding device, video prediction encoding method, video prediction encoding program, video prediction decoding device, video prediction decoding method, and video prediction decoding program |
CN107071466A (zh) * | 2011-11-07 | 2017-08-18 | 株式会社Ntt都科摩 | 动态图像预测解码装置及方法 |
CN107071465A (zh) * | 2011-11-07 | 2017-08-18 | 株式会社Ntt都科摩 | 动态图像预测解码装置及方法 |
CN106658025A (zh) * | 2011-11-07 | 2017-05-10 | 株式会社Ntt都科摩 | 动态图像预测解码装置及方法 |
US9615088B2 (en) | 2011-11-07 | 2017-04-04 | Ntt Docomo, Inc. | Video prediction encoding device, video prediction encoding method, video prediction encoding program, video prediction decoding device, video prediction decoding method, and video prediction decoding program |
CN103891288B (zh) * | 2011-11-07 | 2016-12-21 | 株式会社Ntt都科摩 | 动态图像预测解码装置及方法 |
US9838708B2 (en) | 2011-11-07 | 2017-12-05 | Ntt Docomo, Inc. | Video prediction encoding device, video prediction encoding method, video prediction encoding program, video prediction decoding device, video prediction decoding method, and video prediction decoding program |
US10484705B2 (en) | 2011-11-07 | 2019-11-19 | Ntt Docomo, Inc. | Video prediction encoding device, video prediction encoding method, video prediction encoding program, video prediction decoding device, video prediction decoding method, and video prediction decoding program |
CN107105283A (zh) * | 2011-11-07 | 2017-08-29 | 株式会社Ntt都科摩 | 动态图像预测解码装置及方法 |
US9973775B2 (en) | 2011-11-07 | 2018-05-15 | Ntt Docomo, Inc. | Video prediction encoding device, video prediction encoding method, video prediction encoding program, video prediction decoding device, video prediction decoding method, and video prediction decoding program |
CN107071466B (zh) * | 2011-11-07 | 2018-09-14 | 株式会社Ntt都科摩 | 动态图像预测解码装置及方法 |
US10104393B2 (en) | 2011-11-07 | 2018-10-16 | Ntt Docomo, Inc. | Video prediction encoding device, video prediction encoding method, video prediction encoding program, video prediction decoding device, video prediction decoding method, and video prediction decoding program |
US10104392B2 (en) | 2011-11-07 | 2018-10-16 | Ntt Docomo, Inc. | Video prediction encoding device, video prediction encoding method, video prediction encoding program, video prediction decoding device, video prediction decoding method, and video prediction decoding program |
CN107071465B (zh) * | 2011-11-07 | 2019-01-29 | 株式会社Ntt都科摩 | 动态图像预测解码装置及方法 |
CN106658025B (zh) * | 2011-11-07 | 2019-07-23 | 株式会社Ntt都科摩 | 动态图像预测解码装置及方法 |
CN107105283B (zh) * | 2011-11-07 | 2019-07-30 | 株式会社Ntt都科摩 | 动态图像预测解码装置及方法 |
CN103891288A (zh) * | 2011-11-07 | 2014-06-25 | 株式会社Ntt都科摩 | 动态图像预测编码装置、动态图像预测编码方法、动态图像预测编码程序、动态图像预测解码装置、动态图像预测解码方法以及动态图像预测解码程序 |
CN111164976A (zh) * | 2019-01-03 | 2020-05-15 | 北京大学 | 视频处理方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1236616C (zh) | 变换活动图像编码方式的方法及其装置 | |
CN1210961C (zh) | 视频尺度转换及从mpeg-2到mpeg-4的编码转换 | |
CN1227909C (zh) | 用于编辑压缩的图象序列的方法 | |
CN1241416C (zh) | 编码***和方法、编码及解码、记录及再现的设备和方法 | |
CN1251518C (zh) | 数字信号转换方法和数字信号转换装置 | |
CN1190081C (zh) | 发送和接收动态图像数据的方法及其设备 | |
CN1870748A (zh) | 因特网协议电视 | |
CN1240226C (zh) | 有漂移补偿的视频代码转换器和用于补偿漂移的设备 | |
CN1684518A (zh) | 高保真代码转换 | |
CN1926576A (zh) | 用于数字编码3d立体视频图像的方法和*** | |
CN1950832A (zh) | 用于ac预测状态以及宏块半帧/帧编码类型信息的位平面编码和解码 | |
CN1605213A (zh) | 跳过宏块编码 | |
CN1537384A (zh) | 用于子像素值内插的方法 | |
CN1339922A (zh) | 编码信号的分离和合并装置、方法及计算机程序产品 | |
CN1917647A (zh) | 自适应地选择用于熵编码的上下文模型的方法和设备 | |
CN1725844A (zh) | 数字媒体流的反向表示 | |
CN1481646A (zh) | 转码器-多路复用器(transmux)软件结构 | |
CN1593065A (zh) | 其中图像被分成条带的前景和背景的视频编码与解码 | |
CN1652608A (zh) | 数据处理装置及其方法以及编码装置和解码装置 | |
CN1225904C (zh) | 在压缩域视频处理中降低存储器要求和实施有效的逆运动补偿的方法和设备 | |
CN1910921A (zh) | 图像编码方法和设备、图像解码方法和设备及其程序 | |
CN1253012C (zh) | 可按处理对象数据来降低功耗的图像编码集成电路 | |
CN1231050C (zh) | 图像再现、处理装置和方法以及具有该装置的电视接收机 | |
CN1662037A (zh) | 信号处理设备和方法,命令序列数据结构 | |
CN1976467A (zh) | 移动向量解码方法和移动向量解码装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20061129 |