具体实施方式
A.***架构
图1是显示依据本发明一实施例的视频编解码器的方块图。视频解码***100包括一处理单元110、一解码模块120及一外部储存单元130。在进行视频解码(例如H.264/AVC或VC-1等视频压缩标准)时,处理单元110为一控制器,用以执行一硬件加速器控制任务(hardware accelerator controlprogram),并执行熵解码任务(entropy decoding program)及解码参数计算任务(decoding parameters calculating program)等解码预处理(pre-processing)任务及解码后处理(post-processing)任务。举例来说,处理单元110可为一中央处理器(CPU)、数字信号处理器(DSP)或其他可实现相同功能的等效电路。解码模块120包括硬件加速器控制器121、移动补偿加速电路(motioncompensation accelerator)122、量化与变换加速器(DCT and quantizationaccelerator)123、一环路滤波加速器(loop filter accelerator)124以及内部储存单元140。在一实施例中,解码模块120可分成硬件解码单元或软件解码单元两部分(未绘示),意即解码模块中的各元件可为数字信号处理器或其他硬件/软件,用以处理视频编解码的帧内预测(infra-frame prediction)、反变换(inverseDCT)、反量化与扫描(inverse quantization and zig-zag scan)、环路滤波(loopfilter)等步骤,而仅有移动补偿加速电路122为一专用的数字电路或硬件以实现视频解码中的像素内插处理及移动补偿。
为便于说明,图1中的解码模块120内的硬件加速器控制器121、移动补偿加速电路122、量化与变换加速器123及环路滤波加速器124是以硬件实现的方式描述。本发明的处理单元110及解码模块120的硬件元件是采用帧层流水线控制(frame level flow control),其表示当解码模块120的硬件元件对当前帧(current frame)进行解码时,CPU则对下一帧(next frame)进行解码。而本发明的解码模块120之间的各元件(可全为硬件,或是软硬件结合)的数据处理是采用宏块层流水线控制(macroblock level flow control)。外部储存单元130用以储存参考帧(reference frame)、重建帧(reconstructed frame)、解码参数及持续长度限制码(run-length limited code,RLL code)。外部储存单元130可为易失性存储器元件(例如随机存取存储器元件(RAM,例如DRAM、SRAM等等))以及非易失性存储器元件(例如ROM、硬驱动器、CDROM等等)中任一个或是两者的组合。
在一实施例中,处理单元110可控制解码模块120中的各元件。处理单元110先设定与硬件加速器控制器121相关的寄存器(Register),并检查其设定是否正确,接着启动解码模块120开始对当前帧进行解码。处理单元110需要先申请及注册DMA通道,并检查DMA通道的状态,设定与DMA控制器(图1未绘示)相关的寄存器以启动DMA控制器。当处理单元110启动解码模块120及DMA控制器后,解码模块120开始进行解码。需注意的是,解码模块120与处理单元110之间为帧层流水线控制,在硬件加速器结束每一当前帧的解码之前,处理单元110(软件)已预先执行一解码任务(例如一程序码)以处理下一帧的熵解码及解码参数的计算。上述解码程序可检测硬件解码单元是否已完成当前帧的解码,当解码模块120尚未完成当前帧的解码,则处理单元110的控制权会先交给其他优先顺序较高的就绪任务。更详细地说,当解码模块120完成当前帧的解码后,产生一中断信号(interruptsignal),处理单元110所执行的一中断服务程序指派给解码任务一个解码完成的事件,此时解码任务重新取得处理单元110的控制权并继续处理下一帧。
在另一实施例中,处理单元110还可进行解码预处理,例如是熵解码及计算解码控制参数等。处理单元110对视频码流进行熵解码,并计算移动向量(motion vector)及移动补偿模式等解码参数,处理单元110并将所计算出的解码参数及持续长度限制码(Run-length limited code,RLL code)输出至外部储存单元130(例如外部存储器)。
在一实施例中,内部储存单元140包括残差宏块缓冲器141、移动补偿参考宏块缓冲器142、第一先进先出缓冲器143、重建宏块缓冲器144、移动补偿中间变量寄存器145以及第二先进先出缓冲器146。残差宏块缓冲器141储存用于移动补偿的宏块的残差值。当前编码宏块与参考宏块之间的差值即为残差值,移动补偿参考宏块缓冲器142储存参考像素,用以进行移动补偿。第一先进先出缓冲器143储存解码参数。重建宏块缓冲器144储存经由移动补偿所产生的重建宏块以及环路滤波加速器124所产生的滤波宏块,且环路滤波加速器124由重建宏块缓冲器144中读取移动补偿加速电路122所产生的重建宏块,并进行环路滤波,再将滤波宏块写回重建宏块缓冲器144。移动补偿中间变量寄存器145储存移动补偿的像素行列转置后的中间数值。第二先进先出缓冲器146储存持续长度限制码(RLL码),以供量化与变换加速器122使用。
硬件加速器控制器121是由第一先进先出缓冲器143中读取解码参数,设定并管理解码模块120中的各元件。当硬件加速器控制器121由解码模块120中的硬件(例如环路滤波加速器124)接收到完成宏块解码的中断信号,由第一先进先出缓冲器143中读取解码参数并设定解码模块120,并依据解码状态启动硬件加速器以开始对下一个宏块进行解码。当解码模块120的硬件完成一帧图像的解码,硬件加速器控制器121产生一中断信号至处理单元110。另外,硬件加速器控制器121还将移动补偿所使用的参考宏块由外部储存单元130复制至内部储存单元140。
移动补偿加速电路122用以对帧间预测宏块(inter-frame predictionmacroblock)进行图像内插及移动补偿。对内插像素(interpolated pixels)及残差值(residue value)进行计算以重建图像宏块,并将重建宏块写入内部储存单元140。量化与变换加速器(DCT and quantization accelarator)123用以执行量化及DCT变换的处理,环路滤波加速器(in-loop de-blocking filter accelarator)124使用环路滤波器对移动补偿的结果进行滤波。量化与变换加速器123用以处理反量化(inverse quantization)、反变换(IDCT)及帧内预测(intra-frameprediction)。环路滤波加速器124使用环内滤波器对移动补偿加速电路122所产生的重建宏块进行去块状(de-blocking)的处理,量化与变换加速器123及环路滤波加速器124可使用现有技术以硬件或软件所实施,于此不在赘述。
在一实施例中,因H.264及VC-1等视频压缩标准均采用变尺寸块移动补偿(variable block size motion compensation)。VC-1标准允许两种运动补偿块尺寸:16x16及8x8,而H.264标准允许最小为4x4,最大为16x16的七种运动补偿块尺寸。因为解码模块120中的硬件元件并无法直接存取外部储存单元130,所以需要由硬件加速器控制器121事先将运动补偿的参考宏块(reference macroblock)由外部储存单元130复制至内部储存单元140中的移动补偿参考宏块缓冲器142,移动补偿加速电路122再由移动补偿参考宏块缓冲器142读取参考像素以进行内插处理及移动补偿。当运动补偿亮度宏块(luminance macroblock)的尺寸为4x4,其对应的色度宏块(chrominancemacroblock)的尺寸为2x2,对于包括多个小尺寸移动补偿块的宏块来说,将参考像素由外部储存单元130复制至内部储存单元140的程序控制相当复杂且效率很低,所以将参考宏块由外部储存单元130复制至内部储存单元140会占用许多频宽。再者,若移动补偿加速电路122要相容于7种移动补偿块的尺寸及其插值,其设计复杂度也会大幅提升。
B.H.264移动补偿插值任务软硬件划分
本发明使用处理单元110(软件)以处理尺寸小于8x8的亮度宏块及尺寸小于4x4的色度宏块的移动补偿插值,可以避免小尺寸宏块在外部储存单元130及内部储存单元140之间进行搬移,故可降低移动补偿加速电路122的设计复杂度。更详细地说,在解码过程中,对于移动补偿尺寸为16x16、16x8、8x16及8x8的亮度宏块及其对应的色度宏块,硬件加速器控制器121将参考像素由外部储存单元130复制至内部储存单元140中的移动补偿参考宏块缓冲器142,且此时使用移动补偿加速电路122以处理小数像素插值及移动补偿。对于移动补偿尺寸为8x4、4x8及4x4的亮度块及其对应的色度块,处理单元110直接由外部储存单元130读取参考像素以进行小数像素插值,并将插值结果写入至外部储存单元130。接着,处理单元130只需将插值结果复制至移动补偿参考宏块缓冲器142,此时硬件加速器控制器121只需处理移动补偿的加法运算。因每个8x8的分区均采用相同的移动补偿块尺寸,所以处理单元110每次所处理的小尺寸块必然组成一个完整的8x8的亮度宏块分区及两个4x4的色度宏块分区,以获得8x8的亮度插值结果及4x4色度插值结果。硬件加速器控制器121再将8x8亮度插值结果和4x4色度插值结果复制至移动补偿参考宏块缓冲器142。当硬件加速器处理至该分区时,仅需从移动补偿参考宏块缓冲器142读取8x8的亮度插值结果及4x4色度插值结果,再与由残差宏块缓冲器141所读取的残差数据相加,即可重建8x8的亮度块及对应的色度块。值得注意的是,在一般情况下,移动补偿尺寸小于8x8的亮度块和小于4x4的色度块在每帧影像中所占的比率都很小,因此本发明采用处理单元110(例如CPU)以处理这些区块的移动补偿插值并不会给处理单元110造成太大负担。
C.储存格式
本发明在解码后的重建帧及参考帧是储存于外部储存元单元130中。硬件加速器控制器121分别由参考帧及重建帧读取移动补偿插值所需的参考像素及处理单元110所产生的插值结果,并存放至移动补偿参考宏块缓冲器142。移动补偿参考宏块缓冲器142的像素是以word32格式储存,每个像素采用8位的精确度,即水平方向相邻的4个像素被放置于同一字组(word)中。在开始进行移动补偿之前,由解码模块120中的其他硬件加速器或DSP将反量化所得到的残差数据写入残差宏块缓冲器141。移动补偿加速电路122由移动补偿参考宏块缓冲器142中读取参考像素以进行小数像素插值,亦或是直接读取插值结果(如同前述实施例),并与残差宏块缓冲器141中的残差数据相加以产生重建巨集块,再将重建宏块写入内部储存单元140中的重建宏块缓冲器144。
图2是显示依据本发明一实施例的移动补偿参考宏块缓冲器储存H.264的移动补偿参考宏块的结构的示意图,其中Y表示储存像素的亮度的子区域,U及V表示储存像素的色度的子区域,且sw_base_ptr为一存储器地址指标。在一实施例中,移动补偿参考宏块缓冲器142为一乒乓缓冲器(ping-pong buffer),其保证参考像素的写入动作及读取动作可以同时进行。举例来说,移动补偿参考宏块缓冲器142的乒乓缓冲器结构表示移动补偿参考宏块缓冲器142具有一第一寄存区及一第二寄存区,当参考像素被硬件加速器控制器121写入第一寄存区时,则移动补偿加速电路122则由第二寄存区读取参考像素。反过来说,当参考像素被硬件加速器控制器121写入第二寄存区时,则移动补偿加速电路122则由第一寄存区读取参考像素。
硬件加速器控制器121依据移动向量由外部储存单元130读取移动补偿的参考宏块,且每个参考宏块由移动补偿插值所需的整数像素所组成。举例来说,当移动补偿区块的尺寸为16x8位时,若水平方向及垂直方向均需要采用6阶线性滤波器(6-tap linear filter)插值,则参考像素区块的尺寸为21x13;若仅水平方向需要采用6阶线性滤波器插值,则参考像素区块的大小为21x8;若仅垂直方向需要采用6阶线性滤波器插值,则参考像素区块的大小为16x13;若水平方向及垂直方向均不需要插值,则参考像素区块的大小和移动补偿区块相同。
因为H.264及VC-1视频压缩标准允许多种宏块尺寸的移动补偿,且每个移动补偿宏块的插值方向又不相同,故参考宏块的大小亦会有许多情况。对于不同模式的宏块,移动补偿需要参考的参考宏块数目也不相同。因此,为了相容于各种情况,对应不同的宏块模式,移动补偿参考宏块缓冲器142中的每个存储器列(bank)被划分为多个数目不同的多个子区域,且每个子区域均具有一个固定的起始地址,且当移动补偿区块的水平方向及垂直方向都需要插值的情况下,每个子区域的大小可以容纳相应尺寸的参考像素区块。
本发明的移动补偿加速电路122计算插值有三种移动补偿模式:AVC_16x16/AVC_SKIP、AVC_16x8/AVC_8x16及AVC_8x8。当移动补偿模式为AVC_8x8,移动补偿加速电路122对4个8x8的亮度宏块及8个4x4的色度宏块进行移动补偿(因H.264标准定义为16x16的宏块),且移动补偿参考宏块缓冲器142被划分为12个区域。对于8x8亮度移动补偿区块来说,水平方向和垂直方向都需要用6阶线性滤波器插值时,参考宏块的尺寸最大,此时其尺寸为13x13。更进一步,若考虑到像素是以word32的格式储存,水平方向的像素的储存需要扩展到word32的整数倍,因此每个亮度参考宏块的储存区域的尺寸为16x13=208bytes。对于4x4色度运动补偿区块来说,水平方向及垂直方向均需要使用线性滤波器插值,则参考宏块的尺寸为5x5。同样地,水平方向的像素的储存需要扩展到word32的整数倍,因此每个色度参考宏块的储存区域的尺寸为8x5=40bytes。
当移动补偿模式为AVC_16x8/AVC_8x16时,移动补偿加速电路122是对2个16x8/8x16的亮度宏块和4个8x4/4x8的色度宏块进行移动补偿,且移动补偿参考宏块缓冲器142被划分为6个区域。因此,将AVC_8x8模式下的两个相邻子区域合并为一个子区域,可供存放AVC_16x8/AVC_8x16模式的6个参考宏块。当移动补偿模式为AVC_16x16/AVC_SKIP时,移动补偿加速电路122是对一个16x16的亮度宏块及2个8x8的色度宏块进行移动补偿,此时移动补偿参考宏块缓冲器142仅被划分为三个区域,意即AVC_8x8模式下的四个相邻子区域合并为一个子区域,可供存放AVC_16x16/AVC_SKIP模式的三个参考区域。
对于H.264视频压缩标准的三种移动补偿区域尺寸较小的移动补偿模式AVC_8x4、AVC_4x8及AVC_4x4来说,本发明使用处理单元110(例如CPU)进行移动补偿的处理。处理单元110是由外部储存单元130直接读取参考像素并计算移动补偿插值。移动补偿插值的结果可组合成一个8x8亮度宏块及2个4x4色度宏块,处理单元110并将组合而成的8x8亮度宏块及4x4色度宏块储存至AVC_8x8模式下的移动补偿参考宏块缓冲器142的对应子区域。
图3是显示依据本发明一实施例的移动补偿参考宏块缓冲器储存VC-1的移动补偿参考宏块的结构的示意图,其中Y表示储存像素的亮度的子区域,U及V表示储存像素的色度的子区域,且sw_bass_ptr为一存储器地址指标。对于VC-1视频压缩标准来说,其亦具有三类移动补偿模式:VC1_Inter1MV/VC1_SKIP、VC1_Inter4MV及VC1_Interpolated。其中VC_Inter1MV/VC_SKIP模式与H.264标准的AVC_16x16/AVC_SKIP模式类似,移动补偿包括一个16x16的亮度宏块及2个8x8的色度宏块,且移动补偿参考宏块缓冲器142被划分为3个子区域。VC1_Inter4MV模式与H.264标准的AVC_8x8模式类似,移动补偿包括4个8x8的亮度宏块,但此时仅有2个8x8的色度宏块,且移动补偿参考宏块缓冲器142被划分为6个子区域。VC1_Interpolated模式为双向预测的移动补偿,前向预测(forwardprediction)及后向预测(backward prediction)各包括一个16x16的亮度宏块及2个8x8的色度宏块,此时移动补偿参考宏块缓冲器142被划分为6个子区域。
D.移动补偿加速电路的结构
D-1H.264亮度宏块插值及VC-1双立方插值
H.264视频压缩标准的移动补偿的亮度半像素(half pixel)是由6阶线性滤波器插值所产生,而亮度四分之一像素(quarter pixel)是利用亮度半像素的插值结果经由双线性滤波器(bilinear filter)插值所产生,而H.264标准的像素的色度值是采用4阶线性滤波器插值所产生。VC-1视频压缩标准的移动补偿可分为双线性插值及双立方插值,且像素亮度插值与像素色度插值采用相同的方式。双立方插值定义了三组4阶线性滤波器,其中一组滤波器用以产生半像素,其余两组线性滤波器用以产生四分之一像素。
图4A~4D是显示依据本发明一实施例的本发明的移动补偿加速电路计算H.264标准的移动补偿插值的流程图。移动补偿加速电路122是将H.264的6阶线性滤波器分割成四个步骤来实现,用以减少关键路径(critical path)的延迟。移动补偿加速电路122的插值公式(1)可表示为:
c=Clip(0,255,((A1-5A2+20A3+20A4-5A5+A6)+16)>>5)
......式(1)
其中A1~A6表示相邻的6个整数参考像素,c表示由A1~A6这6个整数参考像素经由插值所产生的半像素。值得注意的是,半像素A1~A6的系数并非限定,可代换为其他适合的线性滤波器系数。其中式(1)可改写为:
c=Clip(0,255,(5*(((A3+A4)<<2)(A2+A5))+(A1+A6)+16)>>5)
......式(2)
请参考图4A~4D,本发明的移动补偿加速电路122使用8个平行的6阶线性滤波器以完成H.264标准中8x8区块的半像素插值计算,其中13个相邻的像素A0~A12被预先写入至寄存器中。移动补偿加速电路122中的计算移动补偿插值经由4个时钟周期实现。移动补偿加速电路122在第一个时钟周期计算中间值bi=(Ai+3+Ai+4)<<2(0≦i≦7);在第二个时钟周期计算中间值bi=(bi-(Ai+2+Ai+5))*5;在第三个时钟周期计算中间值bi=bi+(Ai+1+Ai+6);在第四个时钟周期计算中间值bi=Clip(0,255(bi+16)>>5),用以得到半像素ci(0≦i≦7)。因此,本发明的移动补偿加速电路122可在每4个时钟周期完成一行8个半像素的插值。
图5A~5D是显示依据本发明一实施例的本发明的移动补偿加速电路计算VC-1标准的移动补偿插值的流程图。同样地,本发明亦将VC-1视频压缩标准中的双立方4阶线性滤波器分割成4个步骤,用以减少关键路径延迟。VC-1标准所定义的三个4阶双立方插值滤波器如式(3)、(4)及(5)所示,其分别对应半像素插值、四分之一像素插值及四分之三像素插值。
d=Clip(0,255,(-A1+9*A2+9*A3-A4+8-r)>>4)
...式(3)
d=Clip(0,255,(-4*A1+53*A2+18*A3–3*A4+32–r)>>6)
...式(4)
d=Clip(0,255,(3*A1+18*A2+53*A3–4*A4+32r)>>6)
...式(5)
其中式(3)~式(5)中的A1~A4表示4个相邻的整数参考像素;d表示由A1~A4这4个整数参考像素经由插值所产生的小数像素;r表示舍入参数。式(3)~式(5)可分别改写为式(6)~式(8):
d=Clip(0,255,(-1*(A1+A4)+9*A2+9*A3+(8-r))>>4)
...式(6)
d=Clip(0,255,(-4*(A1+A4)+3*2*9*A2+2*9*A3A2+A4+(32r))>>6)
...式(7)
d=Clip(0,255,(-4*(A1+A4)+2*9*A2+3*2*9*A3A3+A1+(32r))>>6)
...式(8)
如图5A~5D所示,本发明的移动补偿加速电路122针对VC-1标准采用8个平行的4阶滤波器以完成VC-1标准的移动补偿8x8区块的半像素插值。移动补偿加速电路122针对VC-1标准的双立方插值计算可经由4个时钟周期来实现。移动补偿加速电路122在第一个时钟周期计算中间值bi=9*Ai(1≦i≦9);在第二个时钟周期,若移动补偿加速电路122处理半像素插值,则直接跳或延迟至第三个时钟周期,若移动补偿加速电路122处理四分之一像素或四分之三像素,移动补偿加速电路122则计算中间值bi=2*bi以及半像素ci=6*bi–Ai(1≦i≦9)。在第三个时钟周期,若移动补偿加速电路122计算半像素插值,则计算半像素ci=–1*(Ai+Ai+3)+(bi+1+bi+2)(0≦i≦8);若移动补偿加速电路122计算四分之一像素插值,移动补偿加速电路122则计算半像素ci=–((Ai+Ai+3)<<2)+bi+2+ci+1+Ai+3;若移动补偿加速电路122处理四分之三像素插值,移动补偿加速电路122则计算半像素ci=–((Ai+Ai+3)<<2)+bi+1+ci+2+Ai。在第四个时钟周期,若移动补偿加速电路122计算半像素插值,移动补偿加速电路122则计算小数像素di=Clip(0,255,(di+8–r)>>4);若移动补偿加速电路122计算四分之一像素或四分之三像素,移动补偿加速电路122则计算小数像素di=Clip(0,255,(di+32–r)>>6),用以得到小数像素di。因此,本发明的移动补偿加速电路122针对VC-1标准可在每4个时钟周期完成一行8个半像素的插值计算。
移动补偿参考宏块缓冲器142是以word32的格式储存参考像素,且移动补偿加速电路122在每个时钟周期均可从移动补偿参考宏块缓冲器读取一个像素字组(pixel word),并将其分成4个像素并写入内部寄存器。简单来说,移动补偿加速电路122可在4个时钟周期就将一行13个整数参考像素由移动补偿参考宏块缓冲器142读取至内部寄存器中。
图6是显示依据本发明一实施例的移动补偿水平插值的示意图。如图6所示,若移动补偿加速电路122进行H.264标准的水平半像素插值,每4个时钟周期可插值产生一行8个半像素,再由残差宏块缓冲器141读取一行8个残差值,并经由移动补偿加速电路122的一加法及限幅器分别与8个半像素相加及限幅(clip)至[0,255],即可重建一行8个像素。重复此流程8次,即可完成8x8区块的移动补偿。16x16区块的半像素插值可藉由执行4次8x8区块的半像素插值来实现,16x8区块及8x16区块的半像素插值可藉由执行2次的8x8区块的半像素插值来实现。
一般进行像素处理均是依据循序扫瞄(raster scan)的顺序进行,而进行垂直插值及对角线插值则需要依列读写像素,在移动补偿参考宏块缓冲器142及残差宏块缓冲器141中的像素是以word32的格式储存,只有依行读取和写入才会有较高的处理效率。有鉴于此,本发明的移动补偿加速电路122使用转置寄存器阵列(transpose register array)以实现13x8或13x13像素矩阵(pixel matrix)的转置动作,用以保证垂直插值及对角线插值可以采用与水平插值相同的硬件电路来进行滤波。
图7是显示依据本发明一实施例的移动补偿垂直插值的示意图。在一实施例中,对于H.264标准的半像素的垂直插值,移动补偿加速电路122需要从移动补偿参考宏块缓冲器142读取8x13像素矩阵并转置成13x8矩阵,如图7所示。转置后的像素矩阵存放于移动补偿中间变量寄存器145中,移动补偿加速电路122再由移动补偿中间变量寄存器145读取一行13个整数参考像素至内部寄存器,并采用8点平行的线性滤波器以进行插值。对插值所得的8x8半像素矩阵再进行一次行列转置,并经由移动补偿加速电路122的一加法及限幅器与从残差宏块缓冲器141所读取的残差值相加及限幅至[0,255],以得到8x8重建宏块。转置寄存器组为8x4的阵列(array),每个寄存器为8bits,且转置寄存器阵列依行写入及依列读出。因此,若要实现8x13像素矩阵的13x8像素矩阵的转置,则需要重复读写转置寄存器阵列4次。若要实现8x8至8x8像素矩阵的转置,则需要重复读写转置寄存器阵列2次。对于VC-1标准的小数像素垂直插值来说,需要从移动补偿参考宏块缓冲器142读取8x11像素矩阵并转置成11x8矩阵,故仅需要重复读写转置寄存器阵列3次即可实现。VC-1标准的其他部分与H.264标准的垂直插值处理过程相同。
图8是显示依据本发明一实施例的移动补偿对角线插值的示意图。H.264标准的半像素对角线插值可分为两种情况,一种是先计算水平插值再计算垂直插值,另一种是先计算垂直插值再计算水平插值。如图8所示,若先计算水平插值,移动补偿加速电路122先由移动补偿参考宏块缓冲器142读取13x13整数像素矩阵进行水平插值运算以得到8x13的中间像素矩阵(intermediate pixel matrix),并将其转置为13x8的像素矩阵及写入***的移动补偿中间变量寄存器145。移动补偿加速电路122再分8次由移动补偿中间变量寄存器145读取整数参考像素,每一次均是读取一行13个整数参考像素至内部寄存器,并采用8点平行线性滤波器进行插值。对插值所得到的8x8半像素矩阵再次进行行列转置,再经由移动补偿加速电路122的一加法及限幅器与从残差宏块缓冲器141所读取的残差值相加及限幅至[0,255],以得到8x8重建宏块。值得注意的是,上述两次行列转置动作使用同一个8x4转置寄存器阵列。
图9是显示依据本发明另一实施例的移动补偿对角线插值的示意图。如图9所示,若先进行垂直插值,首先需要从移动补偿参考宏块缓冲器142所读取的13x13整数像素矩阵进行行列转置。转置后的13x13像素矩阵存放于移动补偿中间变量寄存器145中。移动补偿加速电路122再分13次从移动补偿中间变量寄存器145读取整数参考像素,每一次读取均是读取13个整数参考像素至内部寄存器,采用8点平行线性滤波器以进行插值运算。对插值所得的8x13中间像素矩阵再次进行行列转置,并将所得到的13x8像素矩阵重新写入移动补偿中间变量寄存器145。上述两次行列转置可共用同一8x4转置寄存器阵列。移动补偿加速电路122再分8次从移动补偿中间变量寄存器145读取整数参考像素,每次读取一行13个整数参考像素到内部寄存器,采用8点平行线性滤波器以进行插值计算。每次运算所得到的8个半像素,再经由移动补偿加速电路122的一加法及限幅器与由残差宏块缓冲器141所读取的残差值相加及限幅至[0,255],以得到8x8重建宏块。
在另一实施例中,VC-1标准对于小数像素的对角线插值仅有一种情况,意即先计算垂直插值再计算水平插值。在计算垂直插值之前,移动补偿加速电路122需要从移动补偿参考宏块缓冲器142读取11x11像素矩阵并进行行列转置,转置后的像素矩阵写入移动补偿中间变量寄存器145。接着计算垂直插值,移动补偿加速电路122将经由垂直插值所得到的8x11中间像素矩阵再次进行行列转置,转置后的11x8矩阵重新写入移动补偿中间变量寄存器145,接着再由移动补偿中间变量寄存器145读取像素以计算水平插值。
图10A~10C显示依据本发明又一实施例的移动补偿的对角线插值的示意图。H.264标准的移动补偿的四分之一像素及四分之三像素的插值基于半像素的插值结果,并使用双线性插值所得到。如图10A所示,对于四分之一像素的水平插值来说,当垂直方向运动向量的小数部分为0时,四分之一像素的插值由水平方向对半像素bi和相邻的整数像素Ai+2及Ai+3进行插值以得到其平均值。因此,可利用与计算半像素的水平插值相同的电路来实现水平四分之一像素c的插值。当垂直方向的移动向量的小数部分不为0时,四分之一像素插值c由对角线半像素及水平方向相邻的垂直插值半像素进行插值以得到其平均值。因此,可利用计算对角线半像素插值的电路(先计算垂直插值再计算水平插值)来实现水平四分之一像素的插值。
如图10B所示,对于四分之一像素的垂直插值来说,当水平方向运动向量的小数部分为0时,四分之一像素的插值c由垂直方向对半像素bi和相邻的整数像素Ai+2及Ai+3进行插值以得到其平均值。因此,可利用与计算半像素垂直插值相同的电路来实现垂直四分之一像素的插值。当水平方向的移动向量的小数部分不为0时,四分之一像素的插值是由对角线半像素及垂直方向相邻的水平插值半像素进行插值以得到其平均值。因此,可利用计算对角线半像素插值的电路(先计算水平插值再计算垂直插值)来实现垂直四分之一像素的插值。
当使用半像素插值电路以计算四分之一像素的水平或垂直插值,由线性滤波器所得到的一行8个半像素b0~b7并不会立即与残差值进行相加。此时寄存器A2~A10所存放的数据与半像素b0~b7相邻的整数像素或半像素。若计算四分之一像素插值,移动补偿加速电路122先计算ci=(bi+Ai+2+1)>>1;若计算四分的三像素插值,移动补偿加速电路122先计算ci=(bi+Ai+3+1)>>1(0≦i≦7);接着移动补偿加速电路122的加法及限幅器再将c0~c7与残差值相加及限幅至[0,255],以得到移动补偿的重建宏块。
如图10C所示,对于四分之一像素的对角线插值来说,四分之一像素c对垂直插值半像素d及对角线方向相邻的水平插值半像素b计算其平均值所得到。因此,需先利用计算垂直半像素插值的电路以产生8x8的垂直半像素矩阵,将其进行行列转置后以存放于移动补偿中间变量寄存器145中。接着,利用计算水平半像素插值的电路以产生水平半像素,当每得到一行8个水平半像素,就由移动补偿中间变量寄存器145取对应的一行8个垂直半像素,并计算对应的每对像素(水平半像素及垂直半像素)的平均值,以得到四分之一像素c。再经由移动补偿加速电路122的一加法及限幅器将四分之一像素c与残差值相加及限幅至[0,255]以得到移动补偿的重建像素。
在另一实施例中,对于VC-1标准来说,计算半像素、四分之一像素及四分之三像素的水平插值的过程均相同。VC-1标准的四分之一像素及四分之三像素与半像素的双立方插值的差异仅在于4阶滤波器的系数不同。因此,使用相同的电路结构,并选取不同的滤波器即可实现不同的小数像素插值。
D-2H.264标准的色度像素区块插值及VC-1标准的双线性插值
对于H.264视频压缩标准来说,其色度插值的精确度为亮度插值的一半,意即八分之一像素的精确度。移动补偿色度宏块的尺寸为对应的亮度宏块的尺寸的四分之一。举例来说,当亮度宏块的尺寸为8x8时,色度宏块的尺寸为4x4。因此,本发明使用移动补偿加速电路(注:硬件)以处理H.264标准的色度插值亦有四种色度宏块尺寸:8x8、8x4、4x8及4x4。因尺寸小于8x8的亮度宏块插值由处理单元110所计算,而尺寸小于4x4的对应色度宏块插值亦由处理单元110所计算。
图11A是显示依据本发明一实施例中计算H.264标准的色度宏块插值的示意图。如图11A所示,色度插值八分之一像素将相邻四个整数像素经由线性插值所产生,其插值公式如式(9)所示:
c=((8-dx)(8-dy)*A0,0+dx(8-dy)*A0,1+(8-dx)dy*A1,0+dxdy*A1,1+32)>>6
....式(9)
其中A0,0、A0,1、A1,0及A1,1表示相邻的4个整数参考像素;dx、dy表示插值位置在水平和垂直方向以八分之一像素为单位的偏移量,其取值范围为[0,7];c表示由这4个整数像素经由插值所产生的八分之一像素。
图11B是显示依据本发明一实施例中计算VC-1标准的色度宏块插值的示意图。对于VC-1标准来说,其双线性插值的精确度为四分之一像素,且移动补偿的亮度宏块尺寸为16x16,色度宏块尺寸为8x8。如图11B所示,双线性插值四分之一像素同样将相邻4个整数像素经由线性插值所产生,其插值公式为式(10)所示。
c=((4-dx)(4-dy)*A0,0+dx(4dy)*A0,1+(4dx)dy*A1,0+dxdy*A1,1+8r)>>4
...式(10)
c=((82dx)(82dy)*A0,0+2dx(8–2dy)*A0,1+(82dx)*2dy*A1,0+2dx*2dy*A1,1+324r)>>6
...式(11)
c=((8-dX)(8dY)*A0,0+dX(8dY)*A0,1+(8dX)dY*A1,0+dXdY*A1,1+324r)>>6
...式(12)
其中dx、dy表示插值位置在水平及垂直方向以四分之一像素为单位的偏移量,其取值范围为[0,3]。式(10)可改写为式(11),若在式(11)中定义dX=2dx,且dY=2dy,则可用式(12)以代替式(11)。比较式(9)及式(12),可得知H.264标准的色度宏块插值与VC-1标准的双线性插值公式除了舍入系数r不同之外,其他计算过程都相同,因此可使用相同的硬件电路来实现。
图12A~12E是显示依据本发明一实施例的H.264标准的色度宏块插值及VC-1标准的双线性插值滤波器的示意图。如图12A~12D所示,本发明的移动补偿加速电路122同样使用8个平行的线性滤波器来完成H.264标准的移动补偿8x8色度宏块插值及VC-1标准的双线性插值。本发明的移动补偿加速电路122亦将H.264标准的色度宏块插值及VC-1标准的双线性插值分割为5个步骤来实现,用以减少关键路径的延迟。移动补偿加速电路122计算H.264标准的色度宏块插值及VC-1标准的双线性插值需要5个时钟周期,每个时钟周期只计算一次乘法。举例来说,在第1时钟周期,计算bi=(8–dx)(8–dy)*Ai,0(0≦i≦7);在第2时钟周期,计算bi=dx(8–dy)*Ai,1+bi;在第3时钟周期,计算bi=(8–dx)dy*Ai+1,0+bi;在第4时钟周期,计算bi=dxdy*Ai+1,1+bi;在第5时钟周期,若计算H.264标准的色度宏块插值,则计算ci=(bi+32)>>6,ci即为H.264色度八分之一像素(0≦i≦7);若计算VC-1标准的双线性插值,则计算ci=(bi+32–4r)>>6,ci即为VC-1标准的双线性插值四分之一像素(0≦i≦7)。因此,移动补偿加速电路122可在5个时钟周期完成一行8个半像素的插值。移动补偿加速电路122由MB读取一行8个残差值,并经由移动补偿加速电路122的一加法及限幅器分别与8个小数像素相加及限幅至[0,255],即可重建一行8个像素。重复此流程8次,即可完成H.264标准中的8x8色度宏块的移动补偿及VC-1标准中的8x8区块的双线性插值的移动补偿。
对于VC-1标准来说,16x16亮度宏块的移动补偿可藉由执行4次8x8区块的双线性插值来实现。而H.264标准中的8x4色度宏块的移动补偿仅需将8点平行的线性滤波器重复回圈4次,意即插值产生4行色度八分之一像素,以完成8x4色度宏块的插值。对于H.264标准中的4x8及4x4色度宏块的移动补偿,只需让8个平行的线性滤波器的其中4个不进行运算,意即变成4个平行的线性滤波器,以实现4x8及4x4色度宏块的插值运算。
值得注意的是,本发明的移动补偿加速电路122是采用8个平行的线性滤波器,用以实现H.264标准及VC-1标法的8x8区块的半像素插值及四分之一像素插值。移动补偿加速电路122还使用32x16bit转置寄存器阵列,以让平行的线性滤波器可在水平插值、垂直插值及对角线插值等多种模式下重复使用。移动补偿加速电路122可藉由执行多次8x8区块的插值流程,用以实现对于尺寸较大的区块的插值计算,例如16x16、16x8及8x16区块等等。
图13是显示依据本发明一实施例的移动补偿方法的流程图。在步骤S1301,利用该处理单元对一视频码流进行一解码任务以输出一解码数据,其中该解码数据包括多个帧间预测宏块(inter-prediction macroblock)。其中该处理单元先执行熵解码任务及解码参数计算任务。在步骤S1302,利用该处理单元依据小于一预定宏块尺寸的这些帧间预测宏块以产生多个第一像素插值。在步骤S1303,利用该移动补偿加速电路依据大于或等于该预定宏块尺寸的这些帧间预测宏块以产生多个第二像素插值。在步骤S1304,利用该移动补偿加速电路依据这些第一像素插值、这些第二像素插值及其相关的多个残差值,以产生多个重建宏块。
本领域的技术人员应了解,本发明的移动补偿加速电路可应用于软硬件结合(CPU+硬件加速器)的视频解码***,特别是使用处理单元110计算尺寸较小的宏块的移动补偿,且对于视频压缩标准H.264/AVC(Baseline Profile)及VC-1(Simple Profile/Main Profile)可在低频率低功耗的情况下实现D1(480i)影像的即时解码。再者,本发明的实现方法及硬件架构并未限制于上述标准的解码,经过适当的变化,亦可应用于其他的视频编解码演算法或标准,例如MPEG-4或Real Video。本发明的移动补偿加速电路(硬件)是已对线性滤波器的计算流程进行最佳化,用以缩短关键路径(critical path)的延迟,因此当***频率和频宽提升时,本发明亦可实现更高解析度及画面更新率的解码运算。
以上所述,仅为本发明的较佳实施例而已,而不能以此限定本发明实施的范围,即凡依本发明申请专利范围及发明说明内容所作的简单的等效变化与修饰,皆仍属本发明专利涵盖的范围。另外本发明的任一实施例或权利要求不须达成本发明所揭示的全部目的或优点或特点。此外,摘要部分和标题仅是用以辅助专利文件搜寻之用,并非用以限制本发明的权利范围。