基于TMS320DM642的X264视频编码器的介绍及优化
扫描二维码
随时随地手机看文章
【摘要】简单介绍了TMS320DM642 数字信号处理器的硬件构成, 简要给出了DSP 平台的程序优化一般流程。着重研究了TMS320DM642 平台优化X264 视频编码器,包括算法与系统结构优化,乒乓缓存优化,循环体的优化以及DSP 汇编实现。
1 引言
在数字视频应用方案中,视频编码器是核心,其中编码器的硬件运算能力是系统实时性的保证,而视频压缩标准的高压缩比为编码器适应各种传输带宽信道提供了必要的保障。视频编码工程X264 是一款开源的、按照H.264 标准在PC 平台开发的视频编码器, 如果直接移植到TMS320DM642(以下简称DM642)平台,则实际的编码速度一般低于视频应用方案所需要的实时性要求。为了提高编码工程的编码速度, 需要对移植到DM642 平台的X264 进行优化, 整个优化的流程如图1所示。
2 DM642 硬件介绍
DM642 采用TI 开发的第二代高性能先进VelociTI技术的VLIW 架构VelociTI1.2,在主频600 MHz 下处理速度达到4 800 MI/s(兆指令/秒)。DM642 CPU 核内部具有64 个32 位通用寄存器和8 个独立的32 位运算单元(2 个乘法器和6 个算数逻辑单元), 确保每个周期能够提供4 个16 位介质访问控制(Medium Access Control,MAC)。
DM642 使用两级缓存L1 和L2。其中一级缓存L1包括一级程序缓存L1P 和一级数据缓存L1D;二级缓存L2 可配置为片内存储器、高速缓存或两者结合。
外设包括[4-6]:3 个可配置的视频端口;1 个10/100 Mbit/s的以太网控制器(EMAC);1 个管理数据输入输出(MDIO);1 个内插VCXO控制接口;1 个McASP0;1 个I2C 总线;2 个McBSPs;3 个32 位通用定时器;1 个用户配置的16 位或32 位主机接口(HPI16/HPI32);1 个PCI;1 个16 引脚的通用输入输出口(GP0),具有可编程中断/事件产生模式;1 个64 位IMI-FA,可以与同步和异步存储器的外围设备相连。
DM642 与传统的DSP 一样,采用哈佛结构,即把数据与程序分开存放于不同的存储区内,保证在DSP 的实际工作中,从程序存储区取指令与从数据存储区取运算数据是互相独立的, 另外在CPU 内部设计了8 个不同的处理单元, 可使在运行过程中,CPU 是按照流水线流程进行操作的。
3 DM642 平台优化方案介绍
3.1 算法和系统程序结构的优化
系统结构优化主要是合理安排程序中各个模块在DSP 的存储区间中所放的位置, 也就是解决存储区间的映射问题;在数据处理方面,尽量减少待处理数据的无谓搬移。算法优化主要体现在分析算法有没有更好更简单的替代方法,算法是否有某种对称性,可否采用更合适的数据结构等。在X264 的优化中,首先考虑系统结构的合理安排, 譬如程序到内存映射方面, 首先利用CCS的CODE_SECTION[9]伪指令把X264 中的9 个大的模块,依次映射到9 个大的子区间里面,把频繁使用到的DCT/IDCT 模块、QUANT/DEQUANT 模块、SAD/SATD 模块放到DM642 的片内存储区(L2 SRAM)中,把其他模块映射到片外存储区中。在数据访问方面,考虑到X264 编码分别为编码帧和帧间预测时的参考帧分配了存储空间,在移植的过程中, 存在着编码帧和参考帧的存放位置问题。从访问速度来看,片内存储区的访问速度要远远高于片外存储区的速度,但片内存储区的空间却要远远小于片外存储区,这样出现了访问速度与有限空间之间矛盾。考虑到实际编码流程中,编码的基本单元是16×16的亮度宏块加上2 个8×8 的色度模块, 这里用CCS 的DATA_SECTION[9]伪指令在DM642 的片内存储区(L2SRAM)中申请2 个大小为(16×16+8×8+8×8)的存储区,来存放编码像素值;用DATA_SECTION 伪指令在片内存储区内申请一些空间,临时存储编码过程中编码宏块的帧内预测模式信息、帧间预测运动矢量信息以及离散余弦变换系数和量化系数;最后,为了运动估计和帧内预测参考,给参考宏块分配一定存储空间。而整个当前编码帧和运动估计参考帧则放在DM642 映射的片外存储区。
3.2 EDMA 和乒乓缓存的优化
EDMA(Enhanced Direct Memory Access)是增强型直接内存访问的英文缩写。DMA 技术指的是在嵌入式处理平台或者大型计算平台上,外设与外设之间、外设与存储器之间、存储器与存储器之间可以在不需要CPU干预的情况下, 进行数据搬移和访问。这样可以保证CPU 在对一组数据进行运算时, 存储器把即将要处理的新的实验数据准备好,减少CPU 等待时间,特别是在一些需要进行大量数据搬移的情况下, 能够显着提高系统的运算速度。DM642 具备64 个EDMA 物理传输信道,能够保证数据在极短时间内,在DM642 外设的缓存区间和DM642 存储器之间进行搬移。DM642 的EDMA[10]主要有3种启动模式: CPU 启动,同步事件启动,外部事件启动。