基于BF561平台的LCD视频显示技术

  • 格式:pdf
  • 大小:258.43 KB
  • 文档页数:3

文章编号:1002—8692(2008)11-0031—03 h…f~一or…m—a……li…,….…t…e…rm…hm~l& 二 

基于BF561平台的LCD视频显示技术术・实用技术‘ 

沈林林,朱秀昌 (南京邮电大学江苏省图像处理与图像通信重点实验室,江苏南京210003) 

【摘要】基于BF561平台实现了视频采集的单帧送显以及连续帧的实时送显。由于LCD的数据显示格式和摄像机采集数据格式 不同,提出了一种基于查表法的数据格式转换的快速算法,并在DSP平台上对此进行了优化,大幅度降低了用于显示的DSP指令 周期数。 【关键词】视频采集;图像显示;格式转换 【中图分类号】TN873;TN911 【文献标识码】A 

LCD Display Technology Based on BF561 Platform 

SItEN Lin—lin,ZHU Xiu-chang (Jiangsu Province Key Lob on Image Processing&Image Communication,Nanjing University of Posts and Telecommunications,Nanjing 210003,China) 

【Abstract】Based on BF561 platform,the sending and display methods of single-flame or multi-flames image data are introduced. Because the date pattern displayed on LCD and capured by video camera are different,for the purpose of fast format—conversion between the datas of collection and delivery,an algorithm is proposed bases on a look—up table method.In this way,the display consumption of DSP instruction cycles for one flame can significantly reduced. 【Key words】video collection;image display;format conversion 

1 引言 

ADSP~BF561开发平台提供了视频采集、处理、播放 等功能,并拥有两个独立的内核,主频达600 MHz,笔者 

基于此平台实现了视频采集的单帧送显及连续帧的实 时送显。平台采集和显示部分涉及到模数转换器 

ADV7181芯片,SDRAM存储器,以及通过BF561的PPI 

口与开发板直接相连的LCD显示模块。 

因LCD显示模块只接收数字RGB信号l1 ,而摄像 头采集进来的模拟视频信号经由ADV7181后,转换为 

YUV数字信号,所以实时送显的过程中,除了要解决视 频输入输出之问的同步问题,还要解决YUV到RGB的 

数据格式转换算法问题。笔者就此采用一种以尽量少的 

丢帧确保输入输出同步的机制,并就YUV—RGB算法提 

出了一种基于查表法的快速转换方法,在DSP平台上进 行了优化。 

2 单帧图像的采集送显 

BF56l的两个内核都各自拥有独立的32 Kbyte L1 

指令寄存器,64 Kbyte L1数据寄存器,并共享128 Kbyte 

L2寄存器。实验中将视频的采集和输出的模块,都放置 

到核B中来实现,以此节约内核开销,方便后期在空闲 

江苏省自然科学基金项目(BK2004151) 内核中添加对视频的处理算法。 2.1图像采集 摄像头采集来的PAL制模拟信号,在I2C总线控制 

下,通过ADV7181B转换为设定的ITU—R 656格式和 

PAL制对应的YUV数据信号。如图1所示,视频数据是 

隔行扫描的,每帧分上下两场,共占l 440x576 byte。一 

帧数据无法被完整存放至片内寄存器中,这里采用DMA 

传输方式,将数据块经并行串口PPI,传送至预先在片外 SDRAM中开辟的一帧大的固定数据Buffer中。 

288场 1 4 攀 t , 

tl 

图1模数转换后的帧格式和YUV数据排放格式 

2.2图像送显 由于LCD只显示逐行扫描、格式为RGB888的信 

号,放至Buffer的数据不能直接送显,必须对其实施扫描 

31

 32 方式的转变、尺寸的调整、以及YUV—RGB的数据格式的 

转换。 本平台采用的LCD显示模块分辨力为320x262,比 

采集图像的分辨力低。为了送显简便起见,不做隔行扫 

描到逐行扫描方式的转变,而直接利用一帧采集数据的 

奇场或偶场作为显示数据的一帧,每个像素点也简单复 

制最近邻像素的 分量,这样整体丢弃了一半的y分 

量,再去掉图像的边框信息,将原先取样方式为4:2:2,大 

小为1 440 ̄576 byte的YUV数据块,转换成插值方式为 

4:4:4,大小为920x262 byte的YUV数据块。这样从 

Buffer里面取出所需数据的同时,直接利用下面的公式l 3】 做点对点YUV—RGB的转换,并将最终所得数值限制到 

0-255之间,确保转换后的图像色彩的正确性 

R=(Y-16)+I.402(V一128) 

G=(Y-1 6)一0.344 1( 一128)一0.714 l(v-12s) B=(Y-16)+1.772(U-128) 转换后的数据,重新存放到SDRAM中另外开辟的 

送显数据空间DisplayBuffer中去。由于LCD的显示是由 

外部时钟来控制其行同步和帧同步的,只要预先配置完 时钟寄存器,送显数据便无须添加控制字,直接经PPi1 

端口传出,由DMA负责直接传送至LCD面板显示。 

3 连续帧的处理 

连续帧的采集送显,流程和单帧送显一样,但是它 涉及的问题远比单帧送显复杂。首先要考虑到输入输出 

的同步,即显示的实时问题,要求时延越小越好;其次, 要保证各帧数据的完整、正确性,即确保每帧图像的质 量;最后,还要尽量降低丢帧率,最大程度地保证送显画 

面的连续性。 3.1双核通信 

视频数据的采集和显示一般位于实际视频处理系 

统的上游和下游部分,主要的视频处理部分(如编解码 

等应用)位于这两个环节之中。为了仿效实际的应用系 

统,在实验系统中的视频采集和显示之间添加了一个视 

频处理模块,即将采集进来的每帧图像,下采样成CIF 

(352 ̄288)格式的数据块,并最终将其降质为QCIF(176x 144)格式的数据,利用双线性插值对其重建送显。实时问 

题的解决,就在于输入输出模块之问的及时通信。 

将插值算法放到预留的核A中进行,在两核都可访 

问到的L2寄存器中定义标志位。核B每采集一帧,算法 

处理得到所需QCIF后,将相应的标志位置位。核A接到 变换信号后,即做插值处理,处理完同样送出相应的标 

志位由核B接收,核B回应后接着做送显工作,这样两 

电视技 /2oo ̄第32卷第11期(总蕈321 个核就相互协调工作,由中间信号量控制,确保输入输 

出的同步。 3.2图像缓存 

在实际应用中,由于视频处理模块所需的运算量远 

比采集一帧图像所需时间长,大部分的DSP运算能力要 

让给主要的视频处理任务,用于视频显示的运算量越少 越好。因此,如果按照采集一帧显示一帧的模式,就会出 

现屏闪的情况。 为解决这种输出跟不上输入的问题,首先将 

SDRAM存储采集数据的Buffer增开到3个,人为缓冲算 

法处理的时间。然后利用系统提供的中断机制,由DMA 

状态位触发中断,使得DMA每读完或传送完一帧数据 

后便可以产生一个相应的中断,并在中断服务程序内将 

采集完或处理完的Buffer置帧满帧空标志位。 

DMA写通道由此配置为动态描述符的存储方式,当 

其写满开设的所有Buffer后,便判断前两个Buffer的空 满。如果为空,则将新采集进来的数据,继续顺序存放到 

这3个Buffer中去;如果为满,则将接下来采集的数据, 

仍放到最后一个Buffer中,不停的覆盖其原先的内容,直 

到前面Buffer的帧空标志位送出为止,以此保证前面两 

个Buffer内数据的正确性,不至于在对它们进行取数操 

作的同时,里面的内容被新采集的数据覆盖。 

采用这种机制,比传统的乒乓机制多开设了一个 

Buffer,但是对于一些运算量庞大的视频处理算法来说, 

更具可靠性。 

4 YUV—RGB算法优化 

由于ADSP_BF561是定点型的DSP,而显示涉及的 

YUV—RGB的转换公式是浮点型运算,计算起来特别耗 

时。这样即使没有添加编解码算法,输出都跟不上输入, 丢帧相当严重。为了减少仅由简单的格式转换所带来的 

较大丢帧率,采用了几种不同的方法对其进行优化,并 将ITU—R656格式转至RGB所需的运算量测算出来,进 

行较为详细的比较分析,最终采用了一种性能优越的基 

于查表法的快速转换算法。 

表1中,在DSP内核主频达600 MHz的前提下,采 

用原始浮点型算法,单帧转换运算速度竞高达108 MHz, 

显示图像无连续可言。而将浮点型数据简单转换成整型 

适合DSP处理以后,运算速度大幅下降,只需约42 MHz。 

表1

 C语言下各方法运算测试结果 原公式中含有大量的乘法运算,运算比较复杂,可 

进一步优化处理。由于y,U, 的取值都在0 ̄255之间, 

可以预先计算出公式中(y一16),1.402 ̄(V一128),0.344 lx 

fU一128),0.714 1x(V一128),1.772x(U一128)的全部可能值, 

由此建立起5个相应的固定表: 一y, fe— 1, Table—U1,Table—V2和Table—U2,存放在U片内寄存器 

中(因为L1存取速度最快,这样可以最大程度减少时间 消耗)。这样取出YUV数据后,就无需计算,直接查表, 

运算速度进一步缩短至3 1 MHz。 

另外,由于DSP内核有单独的移位寄存器,通过移 

位来实现乘法,也将大大提高运算时间。转换公式为 

R=Table—y+Table— 1,R=(Y-16)+U+(Uxl03)>>8 

G=Table—l,一Table—U1一Table_V2,G=(Y-16)+ 

(( ×88)>>8)+(( 183)>>8) 

B=r, y+ 6Ze U2,B=fy一16)+ +f( ×198)>>8) 显然移位法比起查表法,一次循环中,多了3次乘 

法,3次移位,3次减法,理论分析速度应该不如查表法, 

但是实验结果恰恰相反。这是因为所编写的C程序,在 

DSP++上编译时,系统自动生成汇编语句,并依据它来运 

行程序,这样即使C代码进行了优化,但在DSP上若生 

成相对复杂的汇编语句,反而速度提高不如在PC机上 明显,因此就考虑自己编写汇编语句。加上C程序中采 

用了双重for循环语句,来定位取YUV数据,这也提供 

了进一步优化的可能。因为C程序中的循环,大多是在 

循环结束或开头,通过判断“循环变量”是否满足条件来 

决定执行循环体还是退出。BF561内部有8级流水线,只 有流水线畅通,才能保证平均每个CPU周期执行一条指