基于TMS320DM6467的H.264图像解码平台的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于TMS320DM6467的H.264图像解码平台的实现
摘要:当前利用达芬奇技术设计的视频解码平台都是借助linux 操作系统完成。

本文设计了一种基于tms320dm6467的图像解码平台,并针对h.264高清视频流,在不借助操作系统的前提下利用该平台完成了高清图像的解码工作。

测试表明该方案取得了较好的效果。

abstract: in video decoding, almost all the davinci decoding platform is used of linux operation system. this paper designed a video decoding platform, and based on this platform the h.264 video stream has been decoded. it shows that the program has gotten better results.
关键词: tms302dm6467;h.264;图像解码
key words: tms302dm6467;h.264;video decoding
中图分类号:tp311.5 文献标识码:a 文章编号:1006-4311(2013)24-0177-03
0 引言
h.264视频标准由于其显著的压缩比,良好的网络亲和性,较强的抗误码特性等,其应用前景将覆盖整个视频应用领域。

目前针对h.264标准的视频编解码硬件平台一般通过达芬奇(davinci)芯片实现。

软件开发都是在linux操作系统下完成。

作为平台硬件与操作系统内核之间的接口,设备驱动程序在操作系统下为应用程序屏蔽了硬件细节,硬件设备对应用程序只有一个设备文件,其对硬件
设备的操作同普通文件操作一样。

在一些特殊应用场合,用户需要对硬件平台的底层运行行为充分掌握,并对软件流程与代码进行充分评测,这就需要达芬奇硬件平台在无操作系统支持下完成针对
h.264高清视频流的解码工作。

1 h.264编码标准
视频编码标准h.264采用了先进的编码技术,如帧内预测、多模式运动估计、整数变换及量化、环路滤波和先进的熵编码技术等。

因此与以往的mpeg-4、h.263等编码标准相比,h.264标准着重于解决高效率视频压缩和高可靠性传输,能够对网络的丢包和无线传输的误码进行有效的处理,增强了对各种不同网络的适应性。

h.264解码平台负责将符合h.264码流规范的压缩视频流解码,并进行图像重建。

解码流程为:解码平台从nal(nalu,network abstract layer unit)中接收压缩比特流,经过对码流进行熵解码获得一系列量化系数x;这些系数经过反量化和反变换得到残差数据d;解码平台使用从码流中解码得到的头信息创建一个预测块pred,pred与残差数据d求和得到图像块数据uf;每个uf通过去方块效应滤波得到重建图像的解码块f[1]。

2 平台总体设计
2.1 基于tms320dm6467的解码平台视频处理平台设计采用
dsp+fpga的芯片架构。

dsp选用达芬奇系列tms320dm6467(以下简称dm6467), fpga采用xilinx公司的高端v5系列芯片
xc5vlx110t-1ff1136。

dm6467是为实现高清视频转码专门设计的媒体处理器。

内部集成了一个arm926ej-s核、c64x+dsp核和丰富的片上外设,还包含了两个高清视频/图像协处理器(hd-vicp)。

其主要特征如下[2]:
①1个594mhz的c64x+的dsp处理器;
②1个297mhz的arm926ej-s处理器;
③每个时钟周期8个32bitc64x+的指令通道;
④个浮点和定点 alu;
⑤8个8x8的定点乘法器;
⑥外挂32bit宽度,256mb ddr2;
⑦外部emif接口总线独立于内存总线,支持16bit宽度,速度100mhz;
⑧支持32mb flash;
⑨支持一个vpif视频输入口,双标清或者单高清输入,一个vpif 输出口,双标清或者单高清输出;
⑩支持高清的h.264 音视频编解码。

设计视频处理平台有2路数据spi接口、1路vga视频信号输入接口、2路千兆以太网接口、3路dvi视频信号输出口和1路音频立体声信号播放口。

其中spi接口用于与上位机实现实时通讯;vga 接口主要用于采集vga视频并转换为dvi格式输出;千兆以太网接口用于视频信号流的接收;dvi视频口用于高清视频的输出;预留1路音频信号播放口。

视频处理平台接收上位机指令及数据,完成作图并绘制参数图形,实现解码图像和参数图形的叠加送显。

视频处理平台硬件结构框图如图1所示。

2.2 ddr2接口 dm6467具有4gb的存储器寻址空间(0x00000000~0xffffffff)。

其地址空间主要分为两部分:即通过ddr2控制器连接的ddr2 sdram地址空间和由emif四个片选空间(cs2、cs3、cs4、cs5)构成的地址空间[3]。

dm6467的ddr2存储器控制接口专用于ddr2 sdram,可用于16
位或32位ddr2 sdram设备,外接符合jesd79d-2a标准的ddr2 sdram 存储器作为存储程序和数据的主要空间。

在设计过程中对数据吞吐量先进行了一些理论计算。

计算的目的是保证设计要求的数据吞吐量不超过ddr2内存的总吞吐量。

在不考虑ddr2内存自刷新的时间前提下,总吞吐量为:
ddr2存储器控制器时钟信号为双端查分模式,最高时钟信号频率可达300mhz,数据吞吐量为:
32bit*2*300mhz=19.2gbit/s
高清1080p需求吞吐量为:
1920*1080*32bit*60=3.98gbit/s
因此,ddr2内存的总吞吐量满足高清视频流的要求。

2.3 nor flash接口 dm6467通过通用emif(external memory interface)接口可以外接外部慢速存储设备,如nand flash,异步sram和nor flash。

emif最常用作外部flash和sram的扩展。

emif接口与nor flash互联采用异步模式[4]。

2.4 以太网接口平台通过以太网与网络其它视频源设备实时通
讯,因此平台需要外扩以太网通信单元。

dm6467 emac控制模块是平台和emac模块、mdio模块之间的接口,主要功能为:将emac和mdio的寄存器映射入系统的配置空间,使emac模块可存取dm6467片内和片外存储器,控制emac和mdio 的复位、中断、存储器接口优先级。

mdio模块通过公用的mdio总线实现同物理层器件连接的802.3标准的串行管理接口,可以轮询和控制32个以太网phy。

mdio总线为两线制,时钟线和数据线各一条。

以太网收发器的状态查询和控制通过mdio总线由mdio模块间接进行。

emac模块控制了系统与以太网之间的高效接口,支持10base-t、100base-tx的全双工和半双工;支持1000base-t的全双工数据传输。

2.5 与fpga接口 dm6467视频接口可以显示和捕获数字视频流,接口特点见表1所示。

dm6467通过vp接口与fpga进行通讯,视频数据首先通过以太网传输进入dsp,经解码缓存后由vpif口将解码后数据送入fpga,接口标准为bt1120。

3 h.264高清视频流解码实现
解码平台主要完成h.264格式视频的解码、字符叠加和dvi显示输出。

视频压缩流由dsp解码,fpga将输入的yuv格式图像数据通过矩阵变换变化为rgb格式图像数据,并根据从上位机(spi口)传入的指令信息叠加字符后dvi送显。

设计框图如图2所示。

3.1 dm6467中arm工作过程 dm6467为非对称的双核处理器架构,内部arm核主要负责运行高级进程,且arm核可访问dm6467的所有硬件资源。

arm核的主要工作包括:
①arm启动引导;
②h.264流的提取;
③数字视频流输出。

3.1.1 arm启动引导
①arm核初始化。

arm核初始化是对arm在不同处理器模式下栈的分配以及异常向量表和中断向量表的创建。

具体分配情况如下:svc - 0x8ffffff0~0x8fe00001
fiq - 0x8fdffff0~0x8fc00001
irq - 0x8fbffff0~0x8fa00001
usr - 0x8f9ffff0~0x8f800001(仅预留,未分配)
abt - 0x8f7ffff0~0x8f600001
und - 0x8f5ffff0~0x8f400001
sys - 0x8f400000~0x8f300001
②参数表创建。

在内存0x20处创建参数表如下:
[0x20] = 存放irq异常处理例程的入口地址的寄存器的地址
(0x01c48014);
[0x24] = 存放fiq异常处理例程的入口地址的寄存器的地址
(0x01c48010)。

dm6467中arm的aintc在中断发生时会通过专用的硬件机构计算出相应中断源的中断向量(中断向量为一个地址,并非isr的地址,此地址处通常会安插一条跳转语句,当该语句执行时,pc指针便会跳转到真正的isr入口)并存放在0x01c48014(irq)或0x01c48010(fiq)所指向的内存单元中。

因此,0x20和0x24相当于irq中断向量和fiq中断向量的二级指针。

在0x50和0x60处插入下列指令,这些指令负责从0x01c48014
和0x01c48010取出aintc计算出的irq向量和fiq向量,并使处理器准备执行中断向量处所存放的跳转指令。

0x50:
stmfd sp!, {r0} // 此时已经是irq模式,原来模式下的指令流已被打断,// 保存r0
mov r0, #0x20 // 将0x20存入r0中
ldr r0, [r0] // 将0x20处内存单元的内容,即0x01c48014,覆盖至r0
ldr pc, [r0] // 将0x01c48014处所存放的irq向量覆盖至r0 0x60:
stmfd sp!, {r0} // 此时已经是fiq模式,原来模式下的指令流已被打断,// 保存r0
mov r0, #0x24 // 将0x24存入r0中
ldr r0, [r0] // 将0x24处内存单元的内容,即0x01c48010,覆盖至r0
ldr pc, [r0] // 将0x01c48010处所存放的frq向量覆盖至r0 当中断(fiq和irq)发生时,处理器模式发生切换,原先模式下正在执行的指令流被打断转而去执行0x50或0x60处安插的指令,寄存器r0必须加以保护,否则当切换成原先模式时,r0旧值已丢失,继续执行原处理器模式下的指令流会使当前任务崩溃。

③中断向量表创建。

在0x14000处创建标准的arm异常向量表,arm共有8种异常,创建该表如下:
reset (0x00) - mov pc, 0x8000
undefined instruction (0x04) - mov pc, 0x8000 software interrupt (0x08) - mov pc, 0x8000
prefetch abort (0x0c) - mov pc, 0x8000
data abort (0x10) - mov pc, 0x8000
not assigned (0x14) - mov pc, 0x8000
irq (0x18) - mov pc, 0x50
fiq (0x1c) - mov pc, 0x60
其中0x8000是dm6467中arm核在复位后将首先跳转到的地址,是rbl(rom boot loader)例程的入口地址。

3.1.2 h.264流的提取以双缓冲方式从网络接收h.264数据流,在提取有效数据后提交dsp核进行解码处理。

当缓冲区1用于接收新h.264数据时,缓冲区2通过qdma通道向dsp提交已经接收到的h.264数据。

平台用到的h.264数据是bp级别,且其level_idc不超过0x29。

h.264码流的基本单位是nal,nal可以是参数序列集(sps)、图像序列集(pps)或者一个包含实际视频压缩数据的i帧或者p帧。

其中每个gop称为一个最小可解码单元,即如果最终提交至dsp 核的h.264数据小于一个gop,那么dsp将无法解码出预期的视频帧。

根据h.264手册可知尽管gop的长度不固定,但其有明确的边界标识符:0x00-0x00-0x00-0x01-0x67-0x42-0xxx-0xxx。

上位机在每轮网络通信中发送1.335m字节的h.264数据,该
1.335m字节数据总是尽可能多包含gop。

如果该数据空间有剩余但不足以容纳下一个gop,那么在剩余空间的开始处填充8个字节的序列串:0x00-0x00-0x00-0x01-0x67-0x42-0xxx-0xxx,并将其他所有剩余空间均填充0x00。

因此arm可以对通过emac接收到的数据反向查询gop的边界标识符,如果查到第一个gop的边界标示符,便可以据此抽取出有效地h.264数据,统计出其长度。

3.1.3 数字视频流输出将dsp解码后的视频数据信息通过vpif 以bt.1120格式输出至视频处理卡显示控制器(fpga+tfp410)。

由于dsp无权访问vpif,因此该任务由arm执行。

利用dsp2arm(dsp向arm发出的专用中断)中断来启动该任务。

当dsp核解码结束后,dsp一方面将解码后的视频数据通过专用edma通道传输至帧缓冲区,另一方面通过中断通知arm内核帧缓冲区中已有有效视频。

当arm接到该中断后,便跳转至相应isr,即启动该任务。

任务主要负责按照bt.1120规范初始化vpif的各项参数,以及向vpif提交当前帧缓冲的首地址。

数字视频流的输出
过程由vpif组件通过其内置的dma机构来实现。

3.2 dm6467中dsp工作过程 dm6467中dsp核及其hdvicp(high definition video image co-processor)主要负责h.264解码工作,并将解出的视频帧通过edma通道存入帧缓冲(ping-pong缓冲),以供arm调用vpif并将其以bt.1120格式输出至显示控制器。

dsp 解码器主要是利用ti提供的现成解码库实现。

因此dsp的主要工作为:①dsp解码的视频帧格式为yuv420sp,而vpif只能输出
yuv422格式,因此需要做视频帧格式变换;②dsp对vpif组件无访问权限,须将解码结果通过edma输出至帧缓冲。

帧缓冲实质上是ping-pong缓冲,dsp交错的将所解码视频帧存放在两块缓冲区内,然后向arm产生中断并通知缓冲区索引(0或者1)。

因此当0块缓冲区在被vpif访问时,dsp可以通过edma通道存放下一帧视频数据,反之亦然。

arm只需要根据帧缓冲区的索引向vpif提交相应的地址就可以高效的完成显示任务了。

4 应用效果及结论
4.1 应用效果对该平台进行h.264高清视频流解压测试,解压显示效果如图3所示。

测试结果表明该平台可以完成对h.264高清视频流的实时解压缩,解压指标为:分辨率1920*1080p,24bit彩色,帧频30hz。

4.2 结论本文设计实现了一种dsp+fpga架构的高清视频解码平台。

其中dsp选用达芬奇系列tms320dm6467。

该平台针对h.264高清视频压缩流在不借助操作系统的前提下,实现了高清视频的解
码,解码视频分辨率与帧率满足高清视频要求。

参考文献:
[1]肖辉.基于tms320dm642的h264解码器研究与实现[d].成都:电子科技大学,2009.
[2]李方慧,王飞,何佩琨.tms320c6000系列dsps的原理与应用(第2版)[m].北京:电子工业出版社,2003.
[3]texas instruments, tms320c6000 dsp external memory interface(emif) [data sheet], spru266, 2006.2.
[4]spansion datasheet: s29gl-p mirrorbittm flash family.。

相关文档
最新文档