流水线化解块滤波器的制作方法

文档序号:7628793阅读:184来源:国知局
专利名称:流水线化解块滤波器的制作方法
技术领域
本公开内容涉及视频编码器和解码器(一起称为“编解码器”),尤其涉及具有解块滤波器的视频编解码器。提供了用于消除分块痕迹(artifact)的流水线化滤波方法和设备。
背景技术
通常以位流的形式处理和传输视频数据。视频编码器通常应用诸如离散余弦变换(“DCT”)之类的块变换编码,以压缩原始数据。相应的视频解码器通常诸如通过应用离散余弦反变换(“IDCT”)、对经过块变换编码的位流数据进行解码,以解压缩该块。
数字视频压缩技术能够将自然的视频图像变换为压缩图像而没有显著的质量损失。已经开发了许多视频压缩标准,包括H.261、H.263、MPEG-1、MPEG-2、以及MPEG-4。与先前的压缩标准相比,所提出的ITU-T建议H.264|ISO/IEC14496-10AVC视频压缩标准(“H.264/AVC”)在相同的编码质量下提供了编码效率的显著改善。例如,H.264/AVC的典型应用可以是诸如与视频蜂窝式电话一起使用的、需要高压缩比的无线点播视频。
解块滤波器经常与基于块的数字视频压缩系统一起使用。解块滤波器可以在压缩环内部应用,其中滤波器在编码器和解码器处应用。可选地,解块滤波器可以仅仅在解码器处、在压缩环之后应用。典型的解块滤波器通过在完成了块变换编码(例如,DCT)和量化的块的边缘过渡(transition)上应用低通滤波器而工作。解块滤波器可以减少在解压缩的视频中被称为“块效应(blockiness)”的负面视觉影响,但是通常需要视频编码器和/或解码器处的大量计算复杂度。
为了实现几乎类似于原有输入图像的输出图像,滤波操作用于通过解块滤波器消除分块痕迹。分块痕迹一般在H.264/AVC之前的压缩标准中没有那么严重,这是因为对于剩余值编码,DCT和量化步长(step)以8×8像素单元操作,所以对于这样的现有标准,解块滤波器的采用一般是可选的。在H.264/AVC标准中,DCT和量化使用4×4像素单元,其生成多得多的分块痕迹。因此,高效的解块滤波器对于满足H.264/AVC建议的编解码器来说显著更加重要。

发明内容
现有技术的这些及其它缺陷和缺点由用于流水线化解块滤波器的设备和方法解决。示例流水线化解块滤波器具有滤波引擎、与该滤波引擎进行信号通信的多个寄存器,与该滤波引擎进行信号通信的流水线控制单元,以及与该流水线控制单元进行信号通信的有限状态机。
对采用块变换处理过的像素数据块进行滤波以减少分块痕迹的示例方法包括对块的第一边缘进行滤波,以及在对第一边缘进行滤波之后不多于三个边缘,对该块的第三边缘进行滤波,其中第三边缘垂直于第一边缘。通过下面结合附图阅读的对示例实施例的描述,将会理解本公开内容。


本公开内容依据以下的示例附图给出了用于流水线化解块滤波器的设备和方法,其中用类似的参考符号表示类似的元件,其中图1示出了用于具有环内解块滤波器的示例编码器的示意框图;图2示出了用于具有环内解块滤波器、并且与图1中的编码器一起使用的示例解码器的示意框图;图3示出了用于具有后处理解块滤波器的示例解码器的示意框图;图4示出了用于具有环内解块滤波器的示例编解码器的示意框图,其中该编解码器遵循H.264/AVC;图5示出了用于依据H.264/AVC的基本滤波顺序的示意数据图;图6示出了满足H.264/AVC的要求并且依据本公开内容的示例实施例的滤波顺序的示意数据图;图7示出了依据本公开内容的示例实施例的解块滤波器的示意框图;图8示出了依据本公开内容的示例实施例的流水线架构的示意时序图;图9示出了依据本公开内容的示例实施例的滤波器电路的示意框图;图10示出了依据本公开内容的示例实施例的滤波器和相关联的块的示意框图;
图11示出了依据本公开内容的示例实施例的流水线架构块的部分示意时序图;以及图12示出了依据本公开内容的示例实施例的有序滤波方法的示意流程图。
具体实施例方式
本公开内容提供了适用于包括高速移动应用在内的、使用H.264/AVC的视频处理中的解块滤波器。本公开内容的实施例提供了具有较高速度和/或较低硬件复杂度的流水线化解块滤波器。
例如,可以使用解块方法,以便试图减少通过预测和量化处理而创建的分块痕迹。可以在从当前画面中处理和生成参考之前或之后实现该解块处理。
如图1所示,在总体上以标号100表示具有环内解块滤波器的示例编码器。编码器100包括视频输入端子112,其信号通信地连接到求和块114的正输入端。求和块114接着又连接到功能块116,该功能块用于实现整数变换以提供系数。块116连接到熵编码块118,该熵编码块118用于实现熵编码以提供输出位流。块116还在缩放和逆变换块122处连接到环内部分120。块122连接到求和块124,该求和块124接着又连接到帧内预测块126。帧内预测块126可开关地连接到开关127,该开关127接着又连接到求和块124的第二输入端和求和块114的逆输入端。
求和块124的输出连接到条件解块滤波器140。解块滤波器140连接到帧存储器128。帧存储器128连接到运动补偿块130,该运动补偿块130连接到开关127的第二备选(alternative)输入。视频输入端子112还连接到运动估计块119以提供运动矢量。解块滤波器140连接到运动估计块119的第二输入端。运动估计块119的输出连接到运动补偿块130以及熵编码块118的第二输入端。视频输入端子112还连接到编码器控制块160。编码器控制块160连接到每个块116、118、119、122、126、130、和140的控制输入端,以便提供控制信号来控制编码器100的操作。
转向图2,在总体上以标号200表示具有环内解块滤波器的示例解码器。解码器200包括用于接收输入位流的熵解码块210。解码块210在缩放和逆变换块222处连接到环内部分220,以便提供系数。块222连接到求和块224,该求和块224接着又连接到帧内预测块226。帧内预测块226可开关地连接到开关227,该开关227接着又连接到求和块224的第二输入端和求和块214的逆输入端。求和块224的输出连接到用于提供输出图像的条件解块滤波器240。
解块滤波器240连接到帧存储器228。帧存储器228连接到运动补偿块230,该运动补偿块230连接到开关227的第二备选输入。熵编码块210还连接到运动补偿块230的第二输入端,以便提供运动矢量。熵解码块210还连接到解码器控制块262,以便提供控制。解码器控制块262连接到每个块222、226、230、和240的控制输入端,用于传递控制信号以及控制解码器200的操作。
现在转向图3,在总体上以标号300表示具有后处理解块滤波器的示例解码器。解码器300包括用于接收输入位流的熵解码块310。解码块310在缩放和逆变换块322处连接到环内部分320,以便提供系数。块322连接到求和块324,该求和块324接着又连接到帧内预测块326。帧内预测块326可开关地连接到开关327,该开关327接着又连接到求和块324的第二输入端和求和块314的逆输入端。
求和块324的输出连接到用于提供输出图像的条件解块滤波器340。求和块324还连接到帧存储器328。帧存储器328连接到运动补偿块330,该运动补偿块330连接到开关327的第二备选输入。熵编码块310还连接到运动补偿块330的第二输入端,以便提供运动矢量。熵解码块310还连接到解码器控制块362,以便提供控制。解码器控制块362连接到每个块322、326、330、和340的控制输入端,用于传递控制信号以及控制解码器300的操作。
如图4所示,在总体上以标号400表示具有环内解块滤波器的示例编码器。编码器400包括视频输入端子412,该视频输入端子412用于接收具有多个宏块的输入视频图像。端子412信号通信地连接到求和块414的正输入端。求和块414接着连接到功能块416,该功能块416用于接收剩余值、实现离散余弦变换(DCT)、并且量化(Q)系数。块416连接到熵编码块418,该熵编码块418用于实现熵或者可变长度编码(VLC)以提供输出位流。
块416还连接到逆量化(IQ)和离散余弦反变换(IDCT)块422。块422连接到求和块424。求和块424的输出连接到解块滤波器440。解块滤波器440连接到用于提供输出视频图像的帧存储器428。帧存储器428连接到预测模块429的第一输入端,以便向预测模块429提供参考帧,其中该预测模块429包括运动补偿块430和内部预测块426。帧存储器428还连接到运动估计块419的第一输入端,以便向运动估计块419提供参考帧。
视频输入端子412还连接到用来提供运动矢量的运动估计块419的第二输入端。运动估计块419的输出连接到预测模块429的第二输入端,该预测模块429连接到运动补偿块430。运动估计块419的输出还连接到熵编码块418的第二输入端。与帧内预测块426连接的预测模块429的输出连接到求和块424的第二输入端和求和块414的逆输入端,用于向这些求和块提供预测值。
在图4的编码器400的操作中,例如,输入图像或者帧被分成几个宏块,其中每个宏块为16×16像素,而且每个宏块(MB)按次序输入到H.264/AVC系统。预测模块429调查(investigate)作为先前滤波的帧之一的参考帧的所有宏块,并且将最类似于所输入的MB的一个MB作为预测值输出。因此,预测值具有最类似于当前MB的像素值。剩余值是在当前MB和预测值之间的像素值差值。通过对剩余值执行DCT和量化操作而产生系数。与剩余值相比,系数具有大大减少的数据大小。
可以通过如在块418中的熵编码将系数编码到输出位流中。输出位流可以被存储或者传输到其它系统。此外,系数可以通过IQ和DCT操作而被转换为剩余值。将剩余值加到预测值中,并且将其转换成重建(recon)数据。recon_data具有由宏块(16×16像素)或者块(4×4像素)的边界产生的分块痕迹或者块效应(blockiness)。
转向图5,在总体上以标号500表示依据H.264/AVC的滤波顺序。顺序500包括垂直边缘510的水平滤波和水平边缘520的垂直滤波。H.264/AVC要求将滤波应用于图像的所有宏块。分别地以4×16像素和16×4像素在宏块(MB)的列和行的基础上执行滤波,其中宏块为16×16像素而且每个块是4×4像素。依据H.264规范的解块滤波顺序如下所述。对于亮度,如510所示从左侧边缘开始对4个垂直边缘进行滤波,这被称为水平滤波。接着如520所示,从顶端边缘开始以同样方式对4个水平边缘进行滤波,其被称作垂直滤波。相同的次序应用于色度。因此,分别为Cb和Cr滤波了2个垂直边缘510和2个水平边缘520。
因为频繁的存储器存取,解块滤波一般是耗时的处理。为了对垂直边缘2进行滤波,从缓冲存储器中存取左边(先前)和右边(当前)列数据。因此,每个边缘使用4×16像素数据的两次存取。依据H.264/AVC标准,在水平滤波(亮度(luma)步骤1、2、3和4)完成之后,开始垂直滤波(亮度步骤5、6、7和8)。为了执行垂直滤波,必须使用先前从水平滤波步骤中存取的数据。存储在16×16像素的宏块中所有的4×4像素块。因此,滤波逻辑尺寸和滤波时间都将增加。
对于当前的示例,宏块中的解块滤波时间应该在500个时钟周期之内,以便欣赏(appreciate)高清晰度图像。为了实现这个速率,可以并行执行亮度(luma)和色度滤波以及时完成滤波。不幸的是,需要用于亮度和色度二者的滤波电路,以便并行执行亮度和色度滤波,因此显著地增加了滤波电路的尺寸。
现在转向图6,在总体上以标号600表示本公开内容的流水线滤波次序。次序600包括亮度或者黄色滤波次序610、蓝色色度滤波次序610和红色色度滤波次序630。亮度滤波次序610包括用于亮度块A到P的亮度滤波步骤1到32。蓝色色度滤波次序包括用于蓝色色度块Q到T的蓝色色度滤波步骤33到40,而红色色度滤波次序包括用于红色色度块U到X的红色色度滤波步骤41到48。
这里,在MB的所划分的块的基础(例如,4×4像素)上,而不是在MB的行或者列的基础(例如,用于亮度的4×16或者用于色度的4×8)上执行解块滤波。每个边缘(例如,用于亮度的4×16像素或者用于色度的4×8像素)以在此公开的滤波次序分成几段(例如,用于亮度的4段,用于色度的2段)。这个次序符合在H.264/AVC规范中规定的从左到右和从上到下的顺序。
由于以块(4×4像素)为基础而不是以行(4×16)或者列(16×4)为基础执行滤波操作,减少了一次所使用的存储器存取。另外,因为通过在此公开的滤波次序有利地利用了相邻块之间的数据相关性,所以还减少了访问频率。
在滤波次序600的操作中,以连续的次序滤波块(4×4像素)的左边、右边和顶端边缘。例如,在块F的情况下,以该次序对边缘10、12和13进行滤波。另外,将块的底端边缘(例如,块F的边缘21)存储在缓冲器中,然后作为下面块的顶端边缘(例如,边缘21是块J的顶端边缘)进行滤波。
块F的边缘的滤波处理如下首先,使用在块E的边缘滤波期间来自块E和F的像素值对左边边缘10进行滤波;将E像素的新值更新到用于对块E的上边缘11进行滤波的左边寄存器;以及将F像素的新值更新到右边寄存器。其次,从当前缓冲器中将块G的像素值发送到用于滤波的引擎。第三,通过该引擎使用块F和G执行有关右边边缘12的滤波操作。将F块的新像素值更新到左边寄存器,并且将G块的新像素值更新到右边寄存器。第四,从顶端缓冲器中将块B的像素值加载到上面寄存器中。第五,通过该引擎使用块B和F执行有关顶端边缘13的滤波操作。将B的新像素值更新到上面寄存器并且将F的新像素值更新到左边寄存器。第六,将在块J的边缘滤波期间对底端边缘21进行滤波。
因此,不需要存储先前参考的像素值或者从存储器中存取它们,这是因为在新像素值的计算之后不久就发生寄存器的更新,而不需要存储它们或者从存储器中取回它们。依据存储器存取频率的降低和以块为基础的更小滤波单元的使用,滤波逻辑是简单的,而且减少了滤波时间。应当理解,为亮度、红色色度和蓝色色度独立定义次序。也就是说,亮度滤波可以居于红色和蓝色色度滤波之前、之后、或者之间,同时红色色度滤波可以居于蓝色色度滤波、亮度滤波、或者两者之前或之后。因此,除了示例的4∶1∶1Y/Cb/Cr格式之外,在此公开的块滤波次序可以应用于各种其它块格式。
如图7所示,在总体上以标号700表示依据本公开内容的示例实施例的解块滤波器。解块滤波器700包括用于存储当前宏块(MB)的重建数据的缓冲器或者当前存储器710。缓冲器710信号通信地连接到滤波单元712,用于向该滤波单元提供当前数据和MB开始信号。单元712包括引擎714、寄存器块716和有限状态机(FSM)718。滤波单元712的FSM 718信号通信地与当前数据控制器720连接,用于向该控制器720提供FSM状态和计数。控制器720接着信号通信地连接到当前存储器710,用于向该存储器提供存储器或者SRAM控制。当作为预测值加上剩余值的重建数据被存储在当前存储器710中时执行滤波。
滤波单元712信号通信地与BS(滤波边界强度)生成器722连接,用于向该状态生成器提供状态、计数、和标志。生成器722接着信号通信地与QP(相邻块的量化参数)存储器724连接。生成器722还信号通信地与滤波单元712连接,用于向该滤波单元提供参数。滤波单元712还信号通信地与相邻控制器726连接,用于向该相邻控制器提供来自FSM 718的状态和计数值。控制器726信号通信地与用于存储相邻4×4块的相邻存储器或者缓冲器728连接。相邻缓冲器728从控制器726接收存储器或者静态随机存取存储器(SRAM)控制。缓冲器728信号通信地与滤波单元712连接,向滤波单元712供给第一相邻数据,并且从该滤波单元接收第二相邻数据。
生成器722还信号通信地与相邻控制器726、顶端控制器730和直接存储器存取(DMA)控制器734连接,用于向这些控制器提供参数。滤波单元712还信号通信地与顶端控制器730连接,用于向该顶端控制器提供状态和计数,并且滤波单元712信号通信地与DMA控制器734连接、用于向该DMA控制器提供状态、计数和色度标志。顶端控制器730接着信号通信地与顶端存储器732连接,用于向该顶端存储器提供SRAM控制。顶端存储器信号通信地与滤波单元712连接,用于提供第一顶端数据并且从滤波单元接收第二顶端数据,其中该顶端数据用于垂直滤波。DMA控制器734信号通信地与DMA存储器736连接,用于向DMA存储器提供SRAM控制。滤波单元712还信号通信地与存储器736连接,用于向该DMA存储器提供已滤波的数据。顶端存储器732和DMA存储器736中的每个都信号通信地与切换单元738连接,该切换单元738接着信号通信地与DMA总线接口740连接,用于向DMA总线提供已滤波的数据。因此,已滤波的数据通过DMA总线接口740被传输到DMA。
转向图8,在总体上以标号800表示示例流水线化解块滤波器架构。流水线架构可以与高效的滤波次序组合以进一步减少滤波时间。解块滤波器被分级地流水线化为4×4块级801和4×1像素级802。
4×4块流水线级801响应于图7中的FSM 718。流水线架构800包括第一块预取和查找步骤810,通过该步骤,从图7的相邻缓冲器728中将相邻数据预取到寄存器中,从当前缓冲器710中读取当前数据,以及通过生成像素值来查找BS滤波参数。第一块滤波和存储步骤812与第一块预取和查找步骤810重叠。第一块滤波和存储812执行滤波、更新寄存器并且将结果存储到缓冲存储器中。在第一块预取和查找步骤810完成之后,执行第二块预取和查找步骤814,诸如此类执行用于剩余块的815。在第一块滤波和存储步骤812完成之后,执行第二块滤波和存储步骤816,诸如此类执行用于剩余块的818。第二块预取和查找步骤814与第一块滤波和存储步骤812和第二块滤波和存储步骤816都重叠。
4×1像素边缘流水线级802响应于图7的引擎714。像素边缘流水线级802包括用于预取第一4×4块的第一4×1像素列的第一4×1像素预取步骤820,用于在步骤820之后查找第一块的第一列的阿尔法、贝它和tc0参数的第一4×1查找步骤822,以及在步骤822之后滤波和存储第一4×4块的第一4×1列的第一4×1滤波和存储步骤824。像素边缘流水线级802还包括与步骤822重叠的第二4×1像素预取步骤830,与步骤824重叠的第二4×1查找步骤832,以及跟随步骤832的第二4×1滤波和存储步骤834。此外,像素级802包括与步骤832重叠的第三4×1像素预取步骤840,与步骤834重叠的第三4×1查找步骤842,以及跟随步骤842的第三4×1滤波和存储步骤844;以及与步骤842重叠的第四4×1像素预取步骤850,与步骤844重叠的第四4×1查找步骤852,以及跟随步骤852的第四4×1滤波和存储步骤854。
4×1像素级802的预取步骤820,然后查找步骤822和预取步骤830全都在4×4块级801的第二预取步骤814期间执行。滤波和存储步骤824、查找步骤832和预取步骤840跟随查找步骤822和预取步骤830,所有这些步骤以流水线方式在块级801的第二滤波步骤816期间执行。
在操作中,因为4×1像素级的预取、查找参数以及滤波和存储步骤以流水线方式在4×4块级的滤波步骤期间执行,所以显著地减少了滤波时间。流水线化解块滤波器和新的滤波次序大大地减少了滤波时间。例如,可以在亮度滤波之后执行色度滤波。因此,仅仅需要一个滤波电路以便最小化硬件尺寸。
在滤波之后,将新的像素值更新到相应的寄存器。返回参见图6,通过边缘2、3、5...、等举例说明主要的情况。这里,将当前(上面)寄存器的新像素值更新到当前(上面)寄存器,并且将相邻寄存器的新像素值更新到相邻寄存器。
要在垂直滤波之后水平滤波的边缘,诸如边缘4、6、12...、等,被有所不同地计算。在圆圈边缘号4的情况下,例如,将当前寄存器,也就是块B的新像素值更新到相邻寄存器。在这时候,直接从当前存储器中加载块C像素值。在紧邻在边缘3滤波之后的边缘4滤波之前,相邻寄存器存储块A的像素值。因此,以这种方式计算32个边缘中的8个边缘(即边缘4、6、12、14、20、22、28和30)。
现在转向图9,在总体上以标号900表示滤波器电路。滤波电路900包括有限状态机(FSM)910,其信号通信地与引擎912连接。FSM 910接收MB开始信号(MB_start)并且提供色度标志(Chroma_Flag)、FSM计数(inFSM_cnt)、行计数(line_cnt)和FSM状态(FSM_state)信号。FSM还信号通信地与输入开关或者多路复用器914的控制输入端连接,该输入开关或者多路复用器914接收第一相邻数据(neigh_data1)、第一顶端数据(top_data1)或者当前数据(current_data),并且一次提供这些类型的数据中的一个到寄存器916。寄存器916接着信号通信地与输出开关918连接,用于提供第二相邻数据(neig_data2)、第二顶端数据(top_data2)或者已滤波的数据(已滤波的数据)。引擎912具有用于接收BS和参数信号的输入端,用于从寄存器916接收当前相邻像素和当前像素(p和q)输入的输入端,以及用于向寄存器916提供更新的相邻像素和像素(p’和q’)输出的输出端。这里,MB_START和MB_END是分别表示1个MB滤波开始和结束的标志,其中FSM910的输出具有MB_END。Chroma_Flag是用于表示亮度或者色度的标志。FSM_state是FSM的输出并且是用于表示当前4×4块在16×16MB中的水平位置。inFSM_cnt是用于表示块中的4×1像素流水线级是否完成的信号。line_cnt是用于表示块在MB中的垂直位置的信号。neig_data1是用于当前MB水平滤波的4×1像素相邻数据。neig_data2是存储在缓冲器中、用于下一个MB水平滤波的4×1像素数据。top_data1是用于当前块的垂直滤波的4×4顶端数据。top_data2是存储在缓冲器中、用于下一个块垂直滤波的4×4像素数据。curr_data是当前4×1像素数据。filtered_data是完成了滤波的4×1像素数据。p和p’分别是滤波之前和之后的相邻4×1像素。q和q’分别是滤波之前和之后的当前4×1像素。寄存器组成寄存器阵列。引擎依据FSM的状态执行滤波操作。
如图10所示,在总体上以标号1000表示具有其它块的滤波器电路。电路1000包括引擎1012,该引擎1012用于从多路复用器(MUX)1010接收当前相邻像素(p)和从MUX1011接收当前像素(q)。引擎1012信号通信地与MUX1013和MUX1014中的每个连接。MUX1013接着信号通信地与4×4块寄存器队列2 1016连接,该块寄存器队列2 1016信号通信地与MUX1018连接。MUX1018向相邻存储器(NEIG_MEM)1020提供相邻数据(neig_data2),该相邻存储器1020接着向MUX1010提供其它相邻数据(neig_data1)。4×4块寄存器队列2 1016还信号通信地与顶端存储器(TOP_MEM)1022连接,该顶端存储器1022信号通信地与MUX1024连接。MUX1024接着信号通信地与4×4块寄存器队列1 1026连接。队列1026信号通信地与MUX1028连接,MUX1028信号通信地与总线接口(BUS_IF)1030连接,以向该接口提供已滤波的数据,其中该接口信号通信地与DMA存储器连接,以便提供解块输出(DEBLOCK_OUT)。
电路1000还包括用于接收重建数据(RECON_DATA)的一对当前存储器(CURR_MEM)1032。每个当前存储器1032信号通信地与MUX1034连接,该MUX1034接着信号通信地与MUX1011连接,用于向MUX1011提供当前数据(curr_data)。当前存储器1032还信号通信地与FSM1036连接,以便向FSM 4×4块流水线架构1036提供开始信号(MB_START)。FSM1036信号通信地与控制器1038连接,以便向该控制器1038提供信号FSM_state、line_count和Chroma_flag,以及从控制器1038接收用于4×1像素流水线的输入信号inFSM_count。控制器1038信号通信地与每个MUX1010、1011、1014、1018、1024、1028和1034的控制输入端连接,用于响应于FSM_state、line_count、Chroma_Flag和inFSM_count信号控制MUX。
在操作中,当recon_data被存储在CURR_MEM中并且滤波开始时生成MB_START信号。FSM从4×1流水线控制器接收控制信号inFSM_cnt,以检查4×1像素流水线级是否完成。因为亮度和色度共享滤波引擎,所以使用Chroma_Flag信号。由引擎滤波的数据通过BUS_IF传输到存储器或者DMA。
转向图11,在总体上以标号1100表示用于流水线架构的时序图。时序图1100示出了分别用于信号HCLK、MB_start、line_cnt、FSM、inFSM_cnt、Filtering_ON、BS、ALPHA/BETA/TC0、p、q、filterSampleFlag、filtered_p和filtered_q的相对时序。
时序图1100还示出了4×4块流水线级,其包括针对第一块预取和查找BS的步骤1110;针对第一块执行滤波并存储滤波结果的步骤1112;针对第一块查找阿尔法、贝它和tc0参数的步骤1114,其中步骤1114与步骤1110和1112重叠;针对第二块预取和查找BS的步骤1120;针对第二块执行滤波并存储滤波结果的步骤1122;针对第二块查找阿尔法、贝它和tc0参数的步骤1124,其中步骤1124与步骤1120和1122重叠;针对第三块预取并查找BS的步骤1130;针对第三块执行滤波并存储滤波结果的步骤1132;针对第三块查找阿尔法、贝它和tc0参数的步骤1134,其中步骤1134与步骤1130和1132重叠。
另外,针对第二块的步骤1120与针对第一块的步骤1112和1114重叠,针对第二块的步骤1124与针对第一块的步骤1112重叠,并且针对第三块的步骤1130与针对第二块的块1122重叠。现在转向图12,在总体上以标号1200表示依据本发明的块滤波次序的滤波方法。宏块被组织成亮度部分1202、第一色度部分1204和第二色度部分1206,其中每个部分具有从在m=0处的左边边缘开始的垂直边缘,而且每个部分具有从n=0处的顶端边缘开始的水平边缘。
方法1200包括初始化色度=否、m=0和n=0的开始块1210。开始块1210将控制传到功能块1212,其对m=0的MB的垂直4×4块边缘进行滤波。块1212将控制传到功能块1214,其对m=1的MB的垂直4×4块边缘进行滤波。块1214将控制传到功能块1216。块1216对m=0的MB的水平4×4块边缘进行滤波,并且将控制传到判断点1217。
判断点1217确定块是否为色度块,并且如果是,则将控制传到功能块1218。如果块不是色度块,则将控制传到功能块1220。块1220对m=2的MB的垂直4×4块边缘进行滤波,并且将控制传到功能块1218。功能块1218对m=1的MB的第二水平边缘进行滤波,并且将控制传到判断点1222。
判断点1222确定块是否为色度块,并且如果是,则将控制传到判断块1224。判断点1224确定这是否为MB中的末尾块,并且如果是,则将控制传到结束块1226。如果否,则判断点1224将控制传到判断点1225。
判断点1225确定是否n=1。如果n=1,则将其重置为n=0。如果n不等于1,则将n增1。在判断点1225之后,控制传到功能块1212。另一方面,如果判断点1222确定当前块不是色度块,则其将控制传到功能块1228。功能块1228对m=3的MB的垂直4×4块边缘进行滤波,并且将控制传到功能块1230。功能块1230对m=2的MB的第三水平边缘进行滤波,并且将控制传到功能块1232。功能块1232接着对m=3的MB的第四水平边缘进行滤波,并且将控制传到判断点1234。
判断点1234确定是否n=3。如果n=3,则将n重置为n=0,并且设置色度=是。如果n不等于3,则将n增1。在判断点1234之后,控制传到功能块1212。
相关技术的普通技术人员基于此处的教导可以容易地弄清本公开内容的这些及其它特征和优点。例如,应当理解,本公开内容的教导可以扩展到并行执行亮度和色度滤波的实施例,以进一步减少滤波时间。此外,亮度滤波可以居于红色和蓝色色度滤波之前、之后或之间,同时红色色度滤波可以居于蓝色色度滤波、亮度滤波、或者两者之前或之后。除了示例的4∶1∶1Y/Cb/Cr格式之外,在此公开的块滤波次序还可以应用于各种其它块格式。虽然已经公开了依据H.264/AVC、优化的宏块边缘滤波次序,但是应当理解,交替(intersperse)垂直与水平边缘滤波的每个块的一般滤波次序可以应用于各种其它类型和格式的数据。
应当理解,可以以硬件、软件、固件、专用处理器、或者它们的组合的各种形式实现本公开内容的教导。此外,软件优选地实现为有形地包含在程序存储设备中的应用程序。应用程序可以上载到包括任何适合架构的机器中,或者由该机器执行。优选地,该机器在具有诸如一个或多个中央处理单元(“CPU”)、随机存取存储器(“RAM”)、和输入/输出(“I/O”)接口的硬件的计算机平台上实现。计算机平台还可以包括操作系统和微指令代码。此处描述的各种处理和功能可以是微指令码的一部分或者应用程序的一部分,或者是它们的任意组合,它们可以由CPU执行。此外,各种其它外围单元可以连接到诸如额外的数据存储单元和显示单元之类的计算机平台。在系统部件或者处理功能块之间的实际连接可以取决于对实施例进行编程的方式而有所不同。
虽然此处已经参考附图描述了说明性实施例,但是应当理解,本发明不局限于那些确切实施例,并且本领域的普通技术人员可以在其中实施各种其它改变和修改,而不背离本发明的范围或者精神。所有这样的改变和修改意欲包括在如权利要求书所阐述的本发明的范围之内。
权利要求
1.一种对采用块变换处理过的像素数据块进行滤波以减少分块痕迹的方法,该方法包括对块的第一边缘进行滤波;以及在对第一边缘进行滤波之后不多于三个边缘,对该块的第三边缘进行滤波,其中第三边缘垂直于第一边缘。
2.如权利要求1所述的方法,其中,第一边缘是块的左边边缘,并且第三边缘是块的顶端边缘。
3.如权利要求1所述的方法,还包括在对第一边缘进行滤波之后不多于两个边缘,对该块的第二边缘进行滤波,其中第二边缘平行于第一边缘。
4.如权利要求3所述的方法,其中,第二边缘是块的右边边缘。
5.如权利要求1所述的方法,其中,块包括4×4像素数据。
6.如权利要求1所述的方法,其中,块是组成宏块的16个块之一。
7.如权利要求6所述的方法,其中,从左至右、从顶端行到底部行一次一行顺序地对宏块中的块进行滤波。
8.如权利要求1所述的方法,其中,像素数据块包括多个行、列或者像素矢量,该方法还包括预取相邻块像素数据到第一寄存器阵列;预取当前块像素数据到第二寄存器阵列;以及响应于预取的相邻像素数据和预取的当前像素数据,查找当前边缘的边界强度。
9.如权利要求8所述的方法,还包括预取上面块像素数据到第三寄存器阵列。
10.如权利要求8所述的方法,还包括从第一寄存器阵列预取相邻像素数据矢量到滤波引擎;从第二寄存器阵列预取当前像素数据矢量到滤波引擎;依据当前块的边界强度,查找用于相邻和当前矢量的滤波器参数;依据该滤波器参数对相邻和当前矢量进行滤波;将已滤波的相邻矢量更新到第一寄存器阵列;以及将已滤波的当前矢量更新到第二寄存器阵列。
11.如权利要求8所述的方法,还包括从第一寄存器阵列预取相邻像素数据矢量到滤波引擎;从第二寄存器阵列预取当前像素数据矢量到滤波引擎;依据当前块的边界强度,查找用于相邻和当前矢量的滤波器参数;依据该滤波器参数对相邻和当前矢量进行滤波;将已滤波的相邻矢量存储到存储器;以及将已滤波的当前矢量更新到第二寄存器阵列。
12.如权利要求10所述的方法,还包括依据更新的第二寄存器阵列更新第一寄存器阵列;将更新的第一寄存器阵列存储到存储器;以及在将更新的第一寄存器阵列存储到存储器的期间,将另一个像素数据块预取到第二寄存器阵列。
13.如权利要求10所述的方法,还包括在查找用于第一相邻矢量的滤波器参数期间,从第一寄存器阵列预取第二相邻像素数据矢量到滤波引擎;在查找用于第一当前矢量的滤波器参数期间,从第二寄存器阵列预取第二当前像素数据矢量到滤波引擎;在对第一相邻和第一当前矢量进行滤波期间,依据当前块的边界强度查找用于第二相邻和第二当前矢量的滤波器参数;依据该滤波器参数对第二相邻和第二当前矢量进行滤波;将第二已滤波的相邻矢量更新到第一寄存器阵列;以及将第二已滤波的当前矢量更新到第二寄存器阵列。
14.如权利要求12所述的方法,该方法还包括对第二像素数据块进行块流水线处理。
15.如权利要求14所述的方法,块流水线处理包括预取第二块像素数据到第一寄存器阵列期间;以及查找块的边界强度。
16.如权利要求15所述的方法,块流水线处理还包括在查找用于第一像素矢量的滤波器参数期间,从块中预取第二像素矢量;以及在对第一像素矢量进行滤波以及存储第一像素矢量中的至少一个的期间,查找用于第二像素矢量的滤波器参数。
17.如权利要求15所述的方法,矢量流水线滤波还包括在查找用于前一像素矢量的滤波器参数期间,从块中预取另一个像素矢量;以及在对前一像素矢量进行滤波以及存储前一像素矢量中的至少一个的期间,查找用于该另一个像素矢量的滤波器参数。
18.如权利要求1所述的方法,其中像素数据块包括具有多个像素的行、列或者矢量,该方法还包括对多个像素进行像素流水线滤波。
19.如权利要求18所述的方法,像素流水线滤波包括从该多个像素中预取第一像素;查找用于第一像素的滤波器参数;对第一像素进行滤波;存储第一像素;在查找用于第一像素的滤波器参数期间,从该多个像素中预取第二像素;以及在对第一像素进行滤波以及存储第一像素中的至少一个的期间,查找用于第二像素的滤波器参数。
20.如权利要求19所述的方法,像素流水线滤波还包括在查找用于前一像素的滤波器参数期间,从该多个像素中预取另一个像素;以及在对前一像素进行滤波以及存储该前一像素中的至少一个的期间,查找用于该另一个像素的滤波器参数。
21.一种流水线化解块滤波器,用于对采用块变换处理过的像素数据块进行滤波,以减少分块痕迹,该滤波器包括滤波引擎;与该滤波引擎进行信号通信的多个寄存器;与该滤波引擎进行信号通信的流水线控制单元;以及与该流水线控制单元进行信号通信的有限状态机。
22.如权利要求21所述的流水线化解块滤波器,结合用于将像素数据编码为多个块变换系数的编码器,其中,该滤波器被布置为响应于这些块变换系数,对重建的像素数据的块过渡进行滤波。
23.如权利要求21所述的流水线化解块滤波器,结合用于对编码的块变换系数进行解码以提供重建的像素数据的解码器,其中,该滤波器被布置为对重建的像素数据的块过渡进行滤波。
24.如权利要求21所述的流水线化解块滤波器,其中,有限状态机被布置为控制流水线化解块滤波器的块流水线级。
25.如权利要求21所述的流水线化解块滤波器,其中,该引擎被布置为控制流水线化解块滤波器的像素矢量流水线级。
26.如权利要求21所述的流水线化解块滤波器,其中该有限状态机被布置为控制流水线化解块滤波器的块流水线级;该引擎被布置为控制流水线化解块滤波器的像素矢量流水线级;以及该滤波器被布置为通过对块的第一边缘进行滤波,并且在对第一边缘进行滤波之后不多于三个边缘,对该块的第三边缘进行滤波,从而对像素数据块进行滤波,其中第三边缘垂直于第一边缘。
27.一种可由机器读取的程序存储设备,有形地包含具有多条指令的程序,该程序可由机器执行,以执行用于对采用块变换处理过的像素数据块进行滤波的程序步骤,该程序步骤包括对块的第一边缘进行滤波;以及在对第一边缘进行滤波之后不多于三个边缘,对该块的第三边缘进行滤波,其中第三边缘垂直于第一边缘。
28.如权利要求27所述的程序存储设备,该程序步骤还包括在对第一边缘进行滤波之后不多于两个边缘,对该块的第二边缘进行滤波,其中第二边缘平行于第一边缘。
29.如权利要求27所述的程序存储设备,其中,像素数据块包括多个行、列或者像素矢量,该程序步骤还包括预取相邻块像素数据;预取当前块像素数据;以及响应于预取的相邻像素数据和预取的当前像素数据,查找当前边缘的边界强度。
全文摘要
一种用于流水线化解块的设备和方法包括滤波器,其具有滤波引擎、与该滤波引擎进行信号通信的多个寄存器、与该滤波引擎进行信号通信的流水线控制单元、以及与该流水线控制单元进行信号通信的有限状态机;以及一种对采用块变换处理过的像素数据块进行滤波以减少分块痕迹的方法包括对块的第一边缘进行滤波,以及在对第一边缘进行滤波之后不多于三个边缘,对该块的第三边缘进行滤波,其中第三边缘垂直于第一边缘。
文档编号H04N7/26GK1794814SQ20051012971
公开日2006年6月28日 申请日期2005年12月1日 优先权日2004年12月1日
发明者金胤京, 姜桯善 申请人:三星电子株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1