【VC++开源代码栏目提醒】:网学会员鉴于大家对VC++开源代码十分关注,论文会员在此为大家搜集整理了“基于DM642的X264开源代码实现的研究 - 行业软件”一文,供大家参考学习
DSP开发与应用文章编号:1008—0570(2007)12-2—0181-03基于D M 642的X264
开源代码实现的研究Research on Implementation of)(264 Based on DM642 (中国农业大学)谭超王库傅颖 TAN CHAO WANG KU FU YING摘要:本文概述了H.264视频压缩编码标准的主要特性,简要介绍了当前H.264的几种开源软件,详细分析了其中X264参考程序的具体结构,并针对TMS320DM642平台建议了可能的优化方向。
关键字:H.264;开源软件;x264;TMS320DM642;优化中图分类号:TN919.81 文献标识码:BAbstract:This paper gives a summary of H.264,briefly introduces several common-used open source software based on H.264,anal-yses the structure of X264 in detail, and describes the most important optimization methods for implementing X264 onTM¥320DM642。
Key words:H.264,Open Sourse Software,X264,TMS320DM642,O’pfimizafion 引言 2 X264代码分析 H.264/AVC是ISO/IEC和r11u—T两大国际标准化组织联合 本文所介绍的x264为060418版.下文所提到的程序结构制定的新一代视频编码标准。
它引人多种宏块划分、多模式的 和运行结果如不作特殊说明均针对该版本。
帧内和帧间预测编码、高精度亚像素运动估计、多参考帧运动补 代码的实现流程如图1所示。
偿等技术,提高了压缩比;采用整数DCT变换,避免了精度的损失。
在码流结构上,提出VCL层和NAL层的概念,其中增加的NAL层负责将编码器的输出码流适配到各种类型的网络中.提供了友好的网络接I:1。
同时,标准提供的许多工具如参数集、灵活的宏块排列次序、冗余片等.使得H.264的码流在网络中传输时具有更强的抗误码性能。
基于H.264的实时编解码器设计与实现已经成为当前视频通信领域的热点问题。
1 H.264
开源代码简介 H.264所具有的独特优势促进了与之对应的开源软件的开发与应用。
目前常见的H.264开源软件编解码器有以下三种: 1)JM H.264的官方测试源码,由德国HHI研究所负责开发。
该代码旨在实现H.264的所有特性,因而结构冗长,编码复杂度极高,多用于学术研究,不适于实际应用。
2)X264 X264是由法国巴黎中心学校的中心研究所于2004年6月发起.并由许多视频编码爱好者共同完成的项目。
其目标是实现实用的264编码器,所以它引入MMX、SSE等汇编指令来提高编码速度,同时摒弃了一些耗时但对编码性能提高微小的模块.如多参考帧等。
3)064 图1 X264编码流程图 由中国视频编码自由组织联合开发的H.264编解码器。
它 整个代码的执行可以分为以下三个部分:和X264一样注重实用,吸收了JM、X264、XVID的优点。
但其解 1)数据的读入与存放码器只能解r1264编码器生成的码流。
X264开辟了unused、next、current、reference等区域分别保存 未处理原始隐片序列、即将编码帧序列、当前编码帧和参考帧序谭超:硕士研究生 列,I司时还开辟了fenc和fdec区域用于存放已编码帧和重构帧。
万方数据 @四霸邮局订阮82舶360X.,/-18l一 DSP开发与应用 中文核心期刊《微计算机信息》(嵌入式与SOC)2007年第23卷第12·2期 程序按以下顺序读人数据:首先,从YUV数据文件中读取 利用x264_macroblock_cache_save0数将当前MB最下一数据存到临时变量pic—in,同时为unused开辟存储空间,并用 行和最右一列的子块的编码模式保存到intra4x4一pred mode。
将fenc指针指向这个空间。
接着,将pic—in中的图片数据拷贝到 子块非零参数的个数保存到non—zero—count中,以备下一次预fenc所指向的区域,并在拷贝完成后对图片大小进行判断,如果 测编码采用。
最后,统计MB信息,更新参考帧列表,并从unused长宽不为16的整数倍则进行像素扩展:将处理后的fenc区域 区域取出新的帧放人fenc区域以备下次编码。
数据放入next区域。
之后,如果存在B帧,则从next区域取出B 3)数据的输出帧以后的P帧放到current区域中,也就是说先编码I、P帧再编 对NAL编码数据加上NAL头信息组成完整的NAL单元,码之间的B帧;否则,直接从next区域取出一帧存入current区 输出到本地文件。
域。
此时current区域中存放的就是已经过预处理的即将要编码 3 X2,64在TMS320DM642平台上的的帧鳌孥了只#曼:皂-于.fenc譬域是芝鼍嗖烹警对象,再将cur-移植与优化rent区域中的内容拷贝到fene中正式开始编码。
一。
原女商)【2:函代码是基于PC平台的,程序通过采用MMX 2)数据的压缩编码 和SSE语言编写SAD、DCT等函数使X264具有很高的编码速 ①判断帧类型。
初始化相关参数 度。
而在实际应用中,要想实时实现H.264的复杂算法,必须借 如果是IDR帧.意味着是一个新切片的开始。
在H.264中 助DSP这样具有超强运算能力的嵌入式平台。
本文采用为了防止编码错误扩散规定当前切片不以本切片以外的其它 TMS320DM642开发板作为实现和开发的平台,并在其上进行代帧为参考,因而遇到IDR帧需要重置参考帧区域。
同时,将SEI 码的移植和优化。
(Sequence Enhancement Information)、SPS(Sequence Parameter 1)TMS320DM642硬件平台简介 Set)分别单独写入NAL单元。
这三Set)和PPS(Picture Parameter TMS320DM642是一款基于rI’I的第二代高性能超长指令字个参数集集合了编解码的核心参数。
直接关系解码端能否正常 (VLIW)架构velocm.2(tm)的高性能DSP,该器件是目前计算密解码。
如果不是IDR帧,依据帧类型设定当前NAL单元的类型 集型视频,图像应用领域的理想选择,其主要特点如下:和切片类型。
①增强功能单元:DM642的8个功能单元中的VelociTI.2 接着进行一系列初始化参数的操作,包括建立关于参考帧 扩展包括加速视频与影像应用性能的新指令。
的list0和listl。
初始化量化参数QP、MV、参考帧等相关变量, ②L1/L2分级存储器结构:16 KB直接映射的L1P程序高初始化比特流的起始位置和大小等。
L2统一映 速缓存,16 KB双路关联LID数据高速缓存,256 KB ②以宏块为单位对视频数据进行编码 射RA^垂腐速缓存(灵活的RAMl『缓存分配)。
在进行预测编码之前必须得到周围块的相关信息。
在X264 ③64位外部存储器接N(EMll0:可实现与异步存储器和同中开辟了intra4x4_pred_modB和non_zero_count区域用来存放 步存储器无缝连接。
当前宏块左侧和上侧相邻宏块的预测模式和非零值个数。
在编 ④增强型直接存储器存取(EDMA)控制器(64个独立通道)。
码开始之前通过x264_macroblock_cache_load0函数将相关数据 以DM642为硬件平台开发视频编码器.开发者可以充分利载入缓存。
然后,利用x264_macrobloek.analyse0数分析参数, 用其硬件特性.提高视频编解码算法的运算速度。
确定最佳编码模式。
I片从9种4x4模式和4种16x16模式中选 2)X264的移植择模式:P片选择帧间预测模式下的宏块分割方式或帧内预测 由于适用于PC机通过MMX和SSE编写的代码在DSP上模式下的4x4模式和16x16模式。
接着,用x264_mac. 无法运行.想要使X264代码在DM642上运行,必须将原来的roblock_eneodeoi垂i数对宏块进行编码。
编码过程严格按照编码 代码加以修改使其变成纯c语言的代码。
具体做法是:在X264框架中规定的DCT变换、zigzag扫描和熵编码的过程以先亮度 代码中将HAVE_MMX编译选项屏蔽,同时将代码中与该编译块再色度块的顺序进行。
需要声明的是编码过程对DC参数和 选项相关的代码注释掉。
当程序成为纯c代码时,就可以开始AC参数的处理是分开进行的:首先对整个宏块进行DCT变换, 往DM642上移植了。
然后将亮度块和色度块的DC参数抽出分别组成4x4和2x2的 然而。
DSP开发工具CCS有自己的ANSI C编译器和优化子块并对剩余AC参数进行量化扫描。
接着对DC子块再进行 器,并有自己的语法规则和定义。
所以需要将代码作相应修改,Hadmard变换、量化、zigzag扫描、反变换、反量化,再对剩下的 使其完全符合DSP中c的规则,同时要配置CCS的编译选项,AC参数进行反量化.最后将处理后的DC子块和Ac子块重新 才能使)【264在CCS和VC下运行产生的结果一致。
这个过程组合并对组合后的宏块进行IDCT变换。
称为代码的DSP化。
以上过程完毕以后.统计CBP(Coded Block Pattern)信息。
CBP一共6bit,用于表示当前宏块是否存在非零值,主要用于决 由于纯c语言编写的程序无法利用DSP的并行处理机制,定熵编码时采用的码表。
其中.高2bit表示2个8x8色度块的 此时代码的运行速度非常慢。
在DM642平台上,对相同的YUVCBP(2:Cb、Cr中至少一个4x4块的AC系数不全为0;l:Cb、Cr 数据(此处采用container.qci{)进行编码,若采用带X86汇编的中至少一个2x2的Dc系数不全为0;0:所有色度系数全0)。
低 x264代码(OCT和SAD部分采用汇编代码)在Vc环境下运行,4bit分别对应4个8x8亮度块,第i位(i=0、l、2、3)表示一个MB 编码速度能达到QCIF 60fp.:若将代码改为纯C语言仍然在Vc中第i行的4个4x4子块是否有非零参数。
若存在非零值,则将 下运行,则编码速度马上降到QCIF lOfts;将该代码稍作修改相应位置1。
将各子块的非零值个数保存到non_zero count区 移植到DM642的硬件平台。
用CCS编译,编码速度仅能达到1域。
使用先前得到的CBP查相应码表进行熵编码,将编码参数 帧施秒。
这样的速度离实时处理的目标还非常遥远。
和编码数据写入比特流。
所以,必须结合DSP本身的特点,对代码进行优化,才能在 ③保存编码信息 DM642平台上实现X264对视频图像的实时处理。
一182—360元,年邮局订阅号:82-946 万方数据 DSP开发与应用 3)X264的优化 and image processing. X264代码的优化分为三个层次:项目级优化,算法级优化 (100083北京中国农业大学信息与电气工程学院)谭超王库和指令级优化。
傅颖 ①项目级优化:主要通过设置CCS编译器的选项,调整代码 通讯地址:(100083北京市海淀区清华东路17号中国农业大结构和合理分配内存来实现。
如设置一03选项,将常用数据分配 学东校区242信箱)谭超到访问速度高的片内内存等。
(收稿日期:2007.9.13)修稿日期:2007.11.15) ②算法级优化:提出快速高效算法,从算法上挖掘潜力,提高运行速度,达到优化目的。
用X264支持的4种运动估计算法 (上接第219页)(菱形搜索算法、六边形搜索算法、非对称十字型多层次六边形格点搜索算法和连续消除法)处理同样的YUV数据(此处仍为container.qci0,编码速度分别为13fps、1lfvs、9fps和fps,可见 通过仿真波形可以看出,设计结果正确地发送和接收一帧不同的运动估计算法引起的编码速度的差别非常明显。
数据并产生相应的中断,CPU可以实时读取工作状态,整个设 ③指令级优化:这部分又可以分为c语言级的优化和汇编 计的正确性和完整性得到验证,各项功能均达到预期的要求。
级的优化。
前者主要包括消除冗余代码、调整数据类型、优化程 由此,可以证明,上述所编写的Verilog HDL程序,已具备了序结构、打开for循环和充分利用内联函数等操作。
后者主要是 UART的功能i将耗时函数抽取出来,用线性汇编改写,充分利用丰富的媒体处理指令,最大限度的利用DSP的并行性,加快编码速度。
汇编级 4结束语优化涉及到的主要部分有SAD计算、DCT变换、反DCT变换、 本设计完全采用Verilog语言进行描述.用FPGA实现了量化等过程比较规范,重复性比较高的计算过程。
UART通信功能,可以实现对数据的接收和发送,并可以在接收 4结束语 数据时对其校验位、停止位进行判断,在发送数据时可以形成完 整的一帧数据格式。
其接收和发送数据的时钟有内部波特率发 目前,H.264视频编码技术以其独有的优势,受到业界几乎 生器产生,根据预置的分频系数,对外部时钟进行分频,产生需要所有主流视频相关设备、产品厂商的支持。
由于完全独立开发 的接收或发送时钟。
本文作者的创新点是在异步时钟的同步问编解码器所需要的人力和物力都很大,许多公司和团体都采用 题上.根据不同波特率的下降沿形成了一个脉冲信号用于控制直接修改移植
开源代码的方式以求缩短开发周期。
在目前可选 发送和接收。
同时用.
上一篇:
VC6++《可视化编程》钟表程序实验报告
下一篇:
西班牙语医院科室名称