王守业 谢伟军
JPEG标准,即ISO/IEC1091-1,虽然是对静态图像制订的,但也可用于对连续运动图像进行压缩,压缩时将连续图像的每一个帧视为一幅静止图像进行压缩,若压缩器/解压器速度足够快,还可以实时处理视频信号,构成以JPEG为基础的实时视频存储/回放系统。
与MPEG相比,JPEG没有利用图像帧间相关信息,压缩比没有MPEG高,但JPEG图像数据以一帧一帧为基础的特点使得对其处理较为方便。经JPEG压缩后视频图像数据量大大减小,同样的硬盘可以存储更长时间图像,因而在现代数字视频编辑、处理中大量运用了JPEG文件格式,在因特网上只允许采用两种图像格式,JPEG就是其中之一,同时JPEG编码器的复杂度及成本都远低于MPEG。因此JPEG编码器比MPEG编码器获得了更为广泛的实际应用,了解JPEG及JPEG处理器具有重要的现实意义。
JPEG标准提供了4种压缩算法(或称4种系统):基线有损压缩算法、扩展有损压缩算法、无损压缩算法、分层压缩算法,并要求所有的JPEG编码器和解码器都必须支持基线算法。
1 JPEG基线系统
1.1 基线系统算法
基线系统即基线有损压缩算法,是一种基于DCT(Discrete Cosine Transfer)的压缩算法,其压缩运算过程为:
(1)以8×8像素块为单位,对图像数据进行DCT变换,将数据转换到频率域,经变换后得到由64个DCT系统构成的DCT矩阵。
(2)对DCT系统进行排序、量化,经DCT变换后由于能量重新分布,其低频分量系数变得很大,超出了原来码长表达范围,需重新量化以缩小动态范围,此步骤使数据得到第一次压缩。量化步长对每个系数是不同的,原则是频率越低量化步长越小,以便保留较多的低频分量,DCT矩阵的左上角系数代表了能量较高的图像低频分量,其数值较大而量化步长小,越向右下角系数数值越小而量化步长大,如此量化后DCT矩阵右下角高频部分很多系数变成0,也就是说高频分量被丢弃,故这种算法是有损的,64个DCT系数的量化步长构成了量化表。在量化前要把DCT系数进行排序变成一维序列,排序按图1方式进行,称为“Z”形扫描,其目的是将高频分量排在一起,经量化后得到连续的0值,在下一步编码过程中使数据得到最大限度的压缩。
图1 “ Z”形扫描
顺便说明的是,JPEG压缩率也是由这一步决定的,只要将量化表乘一固定的因子即可,若因子>1,则量化步长增大,压缩比也增加,反之压缩比减小。在运动JPEG中甚至可以根据上一幅图像压缩结果动态调整该因子,以使每一帧图像数据量大致相等。
(3)对量化的DCT系数进行Huffman编码,这是一种可变长编码技术,对出现概率高的码字分配以较短的码长,对出现概率低的码字分配以长的码长,这样编码后的数据将大大少于编码前的数据,从而达到数据压缩的目的。编码时用到的编码表称为Huffman表。
解压缩过程与上述压缩过程相反,首先根据Huffman表对压缩数据进行Huffman解码得到量化的DCT系数,再根据量化表进行反量化得到DCT系数,对DCT系数重排序再进行IDCT变换即得到像素数据,当然此时数据与原始数据是有差别的。
1.2 JPEG标记段(mark segment)及标记(mark)
JPEG标准可以用于对不同像素结构、不同色度空间、不同扫描方式图像进行压缩;另外,不同应用领域对图像压缩的要求不同,采用的量化表及Huffman表也不同。为了便于在不同系统间压缩数据文件的交换处理,JPEG标准中定义了几种标记段及相应标记,这些标记段及标记存在于JPEG文件中,供解码器解码时识别使用,标记段由标记及段体组成,标记是以FF开头的字,第二字节为非0的16进制数,标记前可以是若干连续字节的FF,如果在数据中有FF则以FF00表示以便与标记区别。以下是JPEG基线系统中定义的一些标记:
(1)图像开始标记SOI(Start of Image)FFD8
SOI只有标记没有段体,表示JPEG数据文件的开始,是JPEG文件的第一个标记,也是JPEG文件的第一个字。
(2)帧开始段SOF0(Start of Frame)FFC0
SOF由FFC0及若干字节组成,定义每个色彩分量使用的量化表及其块数。
(3)扫描开始段SOS(Start of Scan)FFDA
SOS由FFDA及若干字节组成,定义每个色彩分量使用的Huffman表。
(4)图像结束标记EOI(End of Image)FFD9
EOI紧随压缩数据最后一个字节,也是JPEG文件的最后一个字,表示JPEG数据文件的结束。
(5)应用定义段APPn,FFE0-FFEF
JPEG标准允许一幅图像数据中最多有16个APP段,APP在压缩时插入用于说明该JPEG文件的应用场合等,解压缩时该段直接由解码器读出传递给使用者。
(6)说明段COM,FFFE
COM也是在压缩时插入用于该JPEG文件进行注释、备忘等,解压缩时该段直接由解码器读出传递给使用者。
(7)量化表定义段DQT,FFDB,记录编码时用到的量化表,解码时传递给解码器使用。
(8)Huffman表定义段DHT,FFC4,记录编码时用到Huffman表,解码时传递给解码器使用。
以上标记段除A,B,C,D是JPEG标准要求必须有的以外,并不一定都要出现在JPEG文件中,例如若压缩和解压缩都采用专用芯片ZR36060时,DQT和DHT存在其RAM中是已知的,故文件中可以不加DQT,DHT以便减少数据量,如果压缩/解压缩应用于不同的系统之间,则数据文件必须包含DQT及DHT即量化表和Huffman表,否则解码器将无法进行解压缩。
2 JPEG专用芯片ZR36060
JPEG压缩/解压缩可以由软件完成,也可采用专用硬件。自从JPEG标准发表以来很多公司投入了对其专用芯片的开发研究并推出了各自的产品,ZR36060就是其中一种用于JPEG压缩/解压缩的专用芯片。
ZR36060是美国ZORAN公司生产的一种单片JPEG编/解码芯片,其片上集成了光栅—块(raster to block)、块—光栅(block to raster)转换、条(strip)缓存、JPEG编/解码芯核,FIFO,同步发生器等部件,视频端口支持8bit或16bit YUV输入,能进行静态或运动图像的JPEG压缩及解压缩,广泛应用于数字相机、视频捕捉卡、数字视频处理等领域。
2.1 ZR36060特点图1
(1)单片结构,片上集成了JPEG压缩/解压缩所需全部模块。
(2)运动JPEG压缩/解压缩功能,能够处理高达25帧/s的方像素及CCIR PAL或30帧/s的方像素及CCIR NTSC实时视频信号。
(3)多种模式数据率控制,可以很方便地改变压缩比。
(4)视频数据输入端口支持多种视频解码器( A/D变换器),如Philips,Brooktree,Samsung等。
(5)视频总线宽度可以是8或16bit。
(6)同步发生器可工作于主或从模式。
(7)控制端口支持标准微处理器操作。
(8)提供多种片上视频处理:视频混合(mix),尺度变换(scale)、剪切(crop)及背景色输出等。
(9)压缩数据可以主方式从压缩数据端口或以从方式从控制端口输出,两种方式都有握手功能以便进行数据流控制。
2.2 ZR36060功能框图及功能
图2是ZR36060内部框图,其数据端口有3个分别是:
(1)控制端口:用来完成对ZR36060的初始化,当芯片工作于数据从方式时,还用于输出或输入压缩数据。
(2)视频端口:压缩时输入原始视频数据,解压缩时输出解压后的视频数据,除数据线外还有行、场同步,时钟等必要信号线,同步可工作于主方式或从方式,可直接与视频解码器或帧存储器接口以完成实时的运动JPEG处理。
(3)压缩数据端口:用于数据主方式时输出或输入压缩数据。
图2 ZR36060内部框图
2.3 控制寄存器及标记段RAM
ZR36060中共有1 024个存储单元,一部分用于控制寄存器,另一部分存放JPEG标准规定的各标记段。
通用控制寄存器000-025H,控制初始化、中断、数据方式、压缩/解压缩、压缩率、数据文件大小等参数。
视频寄存器030--051,同步主/从方式、极性,视频处理、同步发生器参数等。
JPEG标记段060-3FF,SOF,SOS,APP,COM,DRI,DQT,DHT等,这些标记段将根据控制寄存器的内容决定是否插入压缩数据中以供将来解压缩使用。
2.4 压缩/解压缩数据流
(1)压缩状态:压缩时数字Y,C信号由Y,C总线进入ZR36060,经视频接口进入条存储器(Strip Memory)缓存,之后进入JPEG处理机进行压缩,压缩后的JPEG数据进入一个长度512的先入先出寄存器(FIFO)缓存,再经数据(数据主方式)或控制端口(数据从方式)输出。
在数据主方式下,ZR36060输出CCS信号指示数据有效并输出CWR信号作为数据选通,外部设备若来不及接收数据可向ZR36060的BUSY引脚发BUSY请求,ZR36060停止向外输出数据,暂时将数据压入FIFO,若FIFO溢出,则JPEG处理机停止压缩,视频数据暂时压入条存储器,当外设撤消BUSY请求后,ZR36060继续压缩、输出数据,如果外设速度太慢导致条存储器也溢出,则ZR36060将给出错误指示并在中断允许的情况下发出中断请求。
在数据从方式下,由外设向ZR36060读数据,BUSY引脚改由ZR36060驱动输出,若ZR36060内部FIFO无数据可读,BUSY将变为有效以通知外设,此时外设应等待BUSY变为无效。若外设读数据速度太慢也将导致出错,数据压满FIFO和条存储器,其过程与主方式相同。
(2)解压缩状态:解压缩的数据流向与压缩刚好相反,JPEG数据由数据或控制端口进入FIFO,之后进入JPEG处理机进行解压缩,视频数据则通过条存储器输出到Y,C总线。
解压缩状态下数据的主/从方式、握手信号、出错机制等均与压缩状态相同。
由于采用FIFO、条存储器,瞬时速度很高的JPEG数据得以缓存,外设可以平均速率访问ZR36060,降低了对外设的要求。
3 实时视频存储/回放系统
3.1 系统构成
以ZR36060为核心,构成了基于JPEG的实时视频存储/回放系统,用于电视信号的数字存储/回放,其框图如图3所示。
图3 实现视频压缩/存储系统框图
整个系统由以下几部分构成:
(1)视频解码器:视频解码器是数字化视频处理系统中必不可少的一环,其功能是将输入模拟复合全视频信号进行色度解码及A/D变换,输出数字化的亮度、色度信号。本系统采用了Brooktree公司的BT819A,其亮色分离、色度滤波等均采用数字处理,水平、垂直采样率、输出格式等均可通过IIC总线编程设置,该芯片支持处理PAL及NTSC制式,在本系统中将其设置为CCIR601 PAL隔行扫描格式,样点数为720×288,Y∶U∶V=4∶2∶2。
(2)视频编码器:视频编码器的功能与视频解码器相反,将数字的亮、色信号进行D/A变换并重新编码为复合全视频信号或RGB输出。视频编码器在数字电视、数字视频处理中的作用是恢复模拟信号,用于末级激励视放或标准视频输出。本系统采用Brooktree公司的BT856完成视频编码,通过IIC总线可将其编程设置为PAL及NTSC复合视频或RGB输出,芯片内还固化了标准75/0/75/0彩色信号,可作为无信号时背景输出。
(3)存储器SDRAM及其读写控制器:系统使用两片SDRAM作为数据存储器,容量为2×8MB,设计存储15s左右的图像,平均数据率约1MBps,每帧隔行扫描的图像数据被压缩至20kB左右,此压缩比下的回放图像在正常观看距离基本观察不出失真。
JPEG芯片输入/输出数据流瞬时速率最高可达到20 MBps,平均速率最高也达到了2~3 MBps,为了与SDRAM接口,系统使用了一片EPLD来控制数据存取,受MCU及JPEG芯片控制,EPLD产生SDRAM的地址信号、行列选通、读写控制等,优点是:控制灵活,结构紧凑,成本低。
(4)JPEG编/解码器ZR36060:是整个系统的核心,通过视频总线与BT819A,BT856连接,压缩数据则通过EPLD控制对SDRAM存取。
(5)微处理器CPU:系统控制由单片微处理器完成,采用了SAMSUNG KS88C8216电视专用单片机,该单片机具有遥控接收、OSD等功能,用于完成对系统各部分初始化操作、压缩/解压缩控制、接收遥控指令、提供OSD显示等。
(6)输入/输出切换:完成压缩/解压缩之间视频信号的切换。
3.2 系统功能介绍
(1)存储功能:系统加电复位后即进入存储状态,将视频信号进行A/D变换、JPEG压缩、存入SDRAM中,压缩是连续进行的,SDRAM存储区采用循环写入方式,写满后地址指针复位将旧数据覆盖,这种工作方式类似飞机上的“黑匣子”,称之为“前向存储”。
(2)回放功能:存储过程中若收到回放遥控指令,系统将进入解压缩状态,解压缩从压缩停止数据的下一个数据开始,将SDRAM中的JPEG数据送入ZR36060,当解压缩到上次停止位置时停止回放。
(3)停止:回放过程中再次按下回放键则中止回放进入停止状态,SDRAM中数据保持不变,可以无限次进行回放。在停止状态下按存储键则再次开始压缩,进入存储状态。
4 技术难点
4.1 SOI识别
ZR36060解压缩时要求其输入数据必须从SOI开始,由于图像是按帧变化的,压缩数据也是变化的,在循环存储写入方式下压缩停止点下一个存储数据是不可预料的,在解压缩开始时必须对存储器进行搜索以找到下一个SOI即FFD8,这一工作由EPLD完成,解压缩开始时由EPLD从压缩停止点开始向下搜索存储区,搜索到FFD8后从FFD8开始向ZR36060写入压缩数据。
4.2 场序识别
在隔行扫描情况下,一帧图像被分为奇偶两场,JPEG标准用于运动图像压缩时压缩数据是场间独立的,单纯从压缩数据无法区分场序。由于循环写入方式的原因,压缩停止点下一场的场序也是不可预料的,如果不加以处理将产生奇偶场颠倒,前期开发过程中确实出现了这一情况,其表现为水平方向线条上下抖动,使用大屏幕电视观察则更加明显。
由于同步发生器有场序指示且变化远小于CPU处理速度,只要知道解压缩第一场场序,由CPU控制等待正确场序到来时开始解压缩就不会出现场序颠倒。有两种方法可以得到场序信息:一是改工作方式为后向存储,压缩时以固定场序开始,写满存储区后停止,不再存储,解压缩从压缩开始点开始,如此则场序也是已知的。另一种方法是在数据中插入场序信息,解压缩时根据插入信息判断场序。
该系统设计用于电视机中对电视节目的实时存储回放,若采用后向存储将大大降低其使用价值,因而实际中采用了后一种方法。
为简化系统设计,经过与ZORAN公司技术人员探讨,根据ZR36060特点,提出了根据奇偶场序写入不同SOI的方法:在压缩时由BT819场序标志信号控制逻辑电路在奇场时将ZR36060输出的SOI改为FFFF,偶场时SOI不变仍为FFD8,解压缩时仍然由EPLD搜索FFD8,这样解压缩将固定从偶场开始,奇场时ZR36060能够识别FFFF并重构SOI,不会破坏ZR36060的工作。
4.3 错误识别
ZR36060工作时会发生若干错误,如信号太弱或用户换台引起同步紊乱、外部数据瓶颈导致数据溢出等均会引起错误,错误严重时甚至引起死机,导致系统瘫痪。
为防止这种情况发生,有必要对ZR36060的工作状态进行检测,在出错时及时予以纠正,检测以ZR36060的握手信号作为标志,正常时随着数据流交换握手信号是高低电平不断变化的,出错后数据流停止则握手信号也随之停住不动,微处理器检测到握手信号停止变化超过1秒时判断出错,重新对系统进行初始化。
5 与电视机接口
系统与电视机接口包括视频接口、OSD接口、遥控接口等。
本系统串接于电视主板复合视频通路,由微处理器控制电子开关切换,存储/停止时将输入输出信号直通,回放时将输出信号切换为解压缩输出。
OSD输出以二极管“或”逻辑接入主板CPU OSD信号,行、场同步则直接由主板引入,在进行存储、回放等操作时微处理器输出OSD信号提供屏显提示,屏显位置则进行了仔细选择以避开主板OSD信息。
遥控信号直接取自主板遥控接收头,经微处理器识别得到存储、回放等遥控命令,同时还要对主板遥控命令进行识别判断,以维持整机控制逻辑的完整,例如回放时若收到换台命令,则中止回放进入停止状态。
视频信号实时存储回放是数字视频技术的新领域,这方面笔者做了一些尝试,愿与同行们共同交流、探讨,促进该技术的发展。
作者单位:广东珠海建盛电子公司 邮编: 519000