JPEG XR在S3C2410A上的实现与优化

2012-01-31 05:21陈自刚朱海华
电视技术 2012年13期
关键词:编解码码流存储器

陈自刚,朱海华

(1.南阳理工学院 计算机与信息工程学院,河南 南阳473004;2.南阳师范学院 计算机与信息技术学院,河南 南阳473061)

JPEG XR标准采用多种先进的图像压缩技术,例如采用双正交重叠变换(Lapped Biorthogonal Transform,LBT)[1-3]代替离散余弦变换实现图像无损表示,且编解码处理过程所需要的存储空间很小。JPEG XR采用的全整数运算大大降低了计算复杂度。另外,编解码算法合二为一,既能处理无损转换又能实现有损压缩。上述特征使得JPEG XR易于在嵌入式平台上实现[4-5]。

目前JPEG XR编解码算法的版本为JPEG XR reference software 1.8(September 2009),将编解码算法合二为一,根据参数不同实现编码和解码[6]。

1 硬件系统结构及流程

Samsung公司推出的ARM芯片S3C2410A内部结构复 杂、功 能 强 大[7]。S3C2410A芯 片 基 于16/32位ARM920T内核,采用五级流水线和哈佛结构,是高性能和低功耗的硬宏单元,具有独立的16 kbyte指令缓存以及16 kbyte数据缓存。支持USB HOST模式,支持4通道DMA模式,支持TFT彩色显示屏最大虚拟屏大小4 Mbyte,64 k色彩模式下最大的虚拟屏为2 048×1 024。存储管理器(MMU)支持大/小端模式,有8个存储器bank,每个bank支持寻址128 Mbyte,共计能寻址1 Gbyte。其硬件系统结构如图1所示。

图1 硬件系统结构

尽管S3C2410A具有8通道的多路复用10位的A/D转换器,最大支持500 ksample/s(千采样/秒)。但若结合CCD进行图像的采集与转换,还是稍显逊色。另外,A/D转换器连接在低速的APB BUS上,而且S3C2410A上的4通道的DMA不以ADC采集信息作为数据源,只能借助于处理器实现A/D后的信息到内存的传送,整个系统的效率会降低。所以借助CMOS实现图像采集并传输至USB接口,这方面技术很成熟。

系统加电时,以外部中断方式向S3C2410A的中断控制器发送“图像采集”中断请求,调用基于USB接口的图像采集中断服务程序,启动CMOS进行图像采集,同时启动DMA传输,实现通过内部AHB总线将原图像传送至SRAM存储器中的缓冲区的过程,DMA传输结束时向中断控制器发送中断请求(INT_DMA0)。ARM920T内核开始执行JPEG XR编码器(以中断服务程序的形式存放),对原图进行编码,生成基于空间模式的码流并存放在SDRAM中。编码结束后通过软中断(在JPEG XR编码器代码尾部)形式,调用解码中断服务程序,再通过软中断形式,调用显示中断服务程序,将图像显示在TFT屏幕上。

2 在S3C2410A上实现JPEG XR编解码

2.1 S3C2410A上实现JPEG XR编解码流程

确定JPEG XR实现平台之后,接下来要做的就是编写JPEG XR编解码器的代码并移植到S3C2410A平台上。具体流程如图2所示。

图2 基于S3C2410A的JPEG XR编解码流程

如果只是进行程序代码移植,则最终的JPEG XR编解码器的效率将会很低,因此必须根据JPEG XR编解码器和S3C2410A特点进行优化。

首先分析JPEG XR编解码器,根据在特定S3C2410A系统,进行编解码代码的调整。数据类型调整为32位有符号整数,根据前述实现外部的RGB24到内部的YUV 4∶4∶4的分量变换和比特深度变换,进行函数简化,内存空间建立不同的多块区域以存储外部图像缓冲信息和不同编解码阶段的缓冲信息进行相应的分配。从而使得JPEG XR编解码器在移植过程中,减少误差,满足实际的JPEG XR编解码要求。然后构建ARM-Linux交叉编译工具(因为JPEG XR编解码器使用Glib C库,所以构建ARMLinux而非ARM-ELF交叉编译工具),为了提高JPEG XR编解码效率,构建目标机为S3C2410A的交叉编译工具,编译生成适合于S3C2410A工作在ARM状态的32位字对齐的ARM指令,并进行相应的优化。最后移植到S3C2410A上并测试JPEG XR采集过程与显示过程。

2.2 JPEG XR编解码代码简化

为提高JPEGXR编解码效率,需要对原C语言代码进行简化,去除不相关的函数和过程操作以减少代码量,同时对C代码进行优化。

下面介绍JPEGXR编码过程[8],如图3所示。

图3 JPEG XR编码过程

编码过程首先对原始图像进行Pre-scaling,为提高JPEG XR编解码效率,采用32位定点整数数据类型。此处理步骤应用32 bit-signed integer(BD32S),其他的功能函数即可删除。

尽管JPEG XR编解码算法支持多种外部图像格式,但其内部只定义了6种图像格式:Y、YUV 4∶2∶0、YUV 4∶2∶2、YUV 4∶4∶4、n通道和YUVK[5]。设定来自于外部CMOS的图像格式为RGB24,内部图像格式为YUV 4∶4∶4,采用以下分量变换实现外部图像格式RGB24到内部图像格式YUV 4∶4∶4的转换,该变换无损压缩分量变换,其转换关系[5]为

图像还原时,可以由上述转换关系的逆实现:YUV 4∶4∶4转换为RGB24。

Color conversion过程,除了保留功能函数function FwdColorFmtConvert1()实现RGB到YUV 4∶4∶4格式转换外,其他功能函数忽略。

Transform过程,编码器采用两级叠加转换,这里选择的是2×2 Hadamard transform:T2x2h(),其他转换形式忽略。

FCT操作有2种形式FCT4x4 function和FCT2x2(),而FCT2x2()与T2x2h()完全一致,所以这个步骤可以忽略。

有4种可选功能函数确定在Transform过程中使用的overlap pre-filters情况,如前所述,构造转换为T2x2h(),故选择function T2x2hEnc()来实现。

根据如前所述的相关配置,其他过程也进行相应简化,即尽量缩小编码器体积。

码流结构有2种基本模式:空间模式和频率模式。可以采用空间模式,宏块数据按照光栅扫描顺序输出,每个宏块的码流安排在一起,每个分割块的码流按照宏块顺序输出,编码过程中各阶段处理的信息量很小,使用S3C2410A内的16 kbyte的数据Cache足以,也可以采用频率模式。需要说明的是,空间模式和频率模式的转换不需要缓存整幅图像然后再转换,而是以分割块为单位进行二者模式之间的转换,故模式转换需要的缓存很小。解码过程只需要缓存几排宏块信息,在码流形成过程中解码时,使用数据Cache就能缓存这些宏块信息,不需要缓存整个图片码流,即不需要将整个图片码流缓存到存储器上。

JPEG XR解码过程是图3的逆过程,其代码简化过程类似。

2.3 数据块定义与存储器分配

S3C2410A的存储控制器提供了访问外部存储器所需要的控制信号[9]。根据需要,数据类型定义为32位有符号定点整数,通过总线控制器OM[1:0]设定为(10)2,使得总线工作在32 bit的总线宽度,且工作在32位模式时对基本字长32位字按照小端(Little endian)的方式存储。

存储控制器共有8个bank,其中前6个bank是只读存储器(ROM)和静态随机存取存储器(SRAM)的bank。剩余2个bank除支持ROM和SRAM外,还支持SDRAM。每个bank的寻址空间范围128 Mbyte,8个bank总共的寻址空间范围为1 Gbyte。所有的访问周期都是可编程的,且可以通过插入wait时钟周期来延长总线访问周期。

用4片128 k×8的EPROM存储器芯片,采用位扩展形式构造128 k×32的ROM存储体。用2片128 k×16的SRAM存储器芯片为1组采用位扩展形式构造128 k×32的SRAM存储体,多组128 k×32的SRAM存储体采用字扩展形式构造更大的32位SRAM存储体。采用多体交叉存取技术,可以有效地提高总线利用率,有效提高存储器的存取速度。

通过分析编解码系统的特征发现,其任意阶段产生的数据需要很少的缓存空间(在这里使用S3C240A内的16 kbyte的数据高速缓存),并且所有的操作都能SIMD指令化。数据块定义和存储器分配如表1所示。

3 优化与测试

3.1 代码优化

在嵌入式系统中的程序代码的优化,主要是根据嵌入式系统S3C2410A的硬件本身特点,对简化后JPEG XR编解码代码进行汇编级别的优化。主要从3点进行基于S3C2410A的JPEG XR编解码代码优化。

表1 数据块定义和存储器分配

1)S3C2410A采用五级流水线结构,通过调整指令顺序或者插入wait时钟周期,避免相邻指令对寄存器或者存储器等结构相关的对象进行操作,避免数据相关或因循环或者转移而产生的控制相关,从而提高流水线的性能。

2)S3C2410A拥有16 kbyte指令缓存和16 kbyte数据缓存,合理组织JPEG XR编解码代码在存储器的存放位置,提高Cache命中率,从而提高编解码效率。

3)S3C2410A拥有16个32位的寄存器,汇编过程中合理高效地利用这些寄存器,可以提高编解码效率。

3.2 用time进行时间测试

time命令结果由3行组成:real,user,sys。real表示从程序开始到程序执行结束时所消耗的时间,包括CPU的用时。CPU用时被划分为user和sys两块。user值表示程序本身,及其所调用的库中的子例程使用的时间。sys值是由程序直接或间接调用的系统调用执行的时间。图4a是对JPEG XR编解码直接交叉编译后生成的JPEGXR.exe简单移植到S3C2410A上编码1个500×500的RGB888图像的时间;图4b是基于S3C2410A定制并优化的JPEG XR编解码交叉编译后生成的JPEGXR.exe移植到S3C2410A上编码1个500×500的RGB888图像的时间。其定制和优化后的运行时间明显降低。

图4 time命令测试的运行时间

4 总结

虽然从技术上看,JPEG XR是一种很优秀的图片格式。可是已经流行的图片格式几乎占据了数字图像领域的各个角落。要想在数字设备上普遍应用,任重而道远。本文构建了JPEG XR编解码器的硬件系统,根据需要简化了JPEG XR编解码程序,并进行了基于S3C2410A的定制与优化,实现对采集的RGB格式图像进行JPEG XR编码和解码过程。JPEG XR编解码在S3C2410A上的实现,将有助于推动这一新图像标准的推广和应用。

[1]CHEN L Z,WANG H X.LBT based low complexity image compression method[C]//Proc.ICPR 2006.[S.l.]:IEEE Press,2006:941-944.

[2]CHENG Lizhi,CHEN Huowang.Integer lapped biorthogonal transform[C]//Proc.International Conference on Image Processing,2001.[S.l.]:IEEE Press,2001:471-474.

[3]TRAN T D,QUEIROZ R L,NGUYEN T Q.The variable-length generalized lapped biorthogonal transform[C]//Proc.International Conference on Image Processing,1998.[S.l.]:IEEE Press,1998:697-698.

[4]JTC 1/SC 29/WG 1.ISO/IEC CD 29199-2:2010,JPEG XR image coding system—Part 2:Image coding specification[S].2010.

[5]吴静龙.JPEG XR码流控制算法的研究[D].哈尔滨:哈尔滨工业大学,2010.

[6]JTC 1/SC 29/WG 1.ISO/IEC FCD 29199-5:2010,JPEG XR image coding system—Part 5:Reference software[S].2010.

[7]Samsung’s digital world[EB/OL].[2011-11-20].http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=229&partnum=S3C2410.2008-2-11.

[8]JTC 1/SC 29/WG 1.ISO/IEC CD 29199-3:2010,JPEG XR image coding system—Part 3:Motion JPEG XR[S].2010.

[9]李峥,黄俊,刘美玲.基于嵌入式的红外电力监控系统的设计[J].电视技术,2011,35(5):100-102.

猜你喜欢
编解码码流存储器
数字电视TS码流协议简要分析
静态随机存储器在轨自检算法
1553B总线控制器编解码设计
为多重编解码世界做好准备
大型民机试飞遥测视频编解码方法研究
一种比较ASN.1码流差异的方法
存储器——安格尔(墨西哥)▲
基于梯度的CCSDS压缩码流控制算法研究
基于Nand Flash的高速存储器结构设计
2G/3G网络IP化语音编解码协商策略部署研究