使用图形处理单元加速视频解码的制作方法

文档序号:7605478阅读:211来源:国知局
专利名称:使用图形处理单元加速视频解码的制作方法
技术领域
本发明涉及视频解码,尤其涉及使用图形处理单元的加速视频解码。
背景技术
多媒体是数字娱乐的核心,它通常要求非常高的处理能力,尤其是对于实时应用程序。当使用通用计算机执行实时多媒体应用程序时,计算机的中央处理单元(CPU)通常是高负荷的,并且在许多情况下,CPU不能支持实时多媒体应用程序。例如,大多数标准的家用个人计算机中的CPU没有足够的能力来实时解码高清晰度视频。
随着硅和计算机图形技术的进步,在主流的个人计算机以及游戏控制台中发现了越来越多的便宜且功能强大的图形处理单元(GPU)。GPU是设计用于执行二维和三维图形运算的专用处理器。当计算机正在执行面向非图形的运算时(如解码已编码的视频比特流),CPU可能高负荷,而GPU却空闲。
因此,需要将GPU的能力均衡用于非图形应用程序。

发明内容
描述了利用图形处理单元来加速视频比特流的解码。加速视频解码系统接收编码的视频流,使用中央处理单元执行一部分解码处理,使用图形处理单元执行另一部分解码处理。具体来说,图形处理单元用于执行运动补偿处理、图像重构以及色彩空间转换。


贯穿附图使用相同的参考标号表示相同的特征和组件。
图1是现有技术说明示例性视频解码处理的流程图。
图2说明了加速视频解码系统的示例性架构。
图3说明了利用图形处理单元来加速视频解码的示例性方法。
图4说明了图形处理单元执行的示例性运动补偿处理方法。
图5说明了图形处理单元执行的示例性图像重构方法。
图6说明了使得图形存储器的占用区(footprint)最小化的示例性UV分量布局。
图7说明了使用具有有限存储器资源和有限存储器带宽的GPU能够进行视频解码加速的示例性数据划分。
具体实施例方式
下面的讨论针对使用图形处理单元支持非图形操作。具体来说,描述了示例性实施方式,其中,使用GPU来加速视频比特流的解码。GPU是专门用于在每顶点的基础上(例如基于多边形的呈现)和/或在每像素的基础上执行图形运算的处理单元。在所描述的实施方式中,计算密集型的且一般由中央处理单元(CPU)所执行的视频解码操作(即运动补偿、图像重构以及色彩空间转换)由GPU执行,从而降低CPU的负荷,加速视频比特流解码过程。
这里按照运用于根据Windows Media Video格式编码的视频比特流来描述加速视频解码,但是所描述的过程也能运用于根据包括MPEG和H.26x的其它格式编码的视频比特流。
流视频按照帧序列来编码,帧序列可包括帧内编码(intra-coded)帧(I帧)、预测帧(P帧)以及双向预测帧(B帧)的任何组合。每个编码的I帧包括生成和再现完整图像所必需的所有数据。从编码的P帧中的数据生成图像需要P帧的数据和前一I帧或P帧(称为参考帧)的数据。从编码的B帧中数据生成图像需要B帧的数据以及先前的参考I帧或P帧以及将来的参考I帧或P帧的数据。P帧和B帧也可被称为是帧间编码(inter-coded)帧。
每个编码的帧(I帧、P帧或B帧)被划分成宏块。典型的宏块是大小为16×16像素的区域。根据图像的大小,每个帧可包括许多宏块。由于I帧包括显示完整图像所需的所有数据,因此I帧的每个宏块包括显示由该宏块所表示的一部分图像(即16×16像素的图像部分)所需的全部数据。如上所述,P帧是从先前的一I帧或P帧预测的。这意味着P帧的至少一个宏块依赖于先前的一I帧或P帧的相应宏块中的数据。P帧或B帧的各个宏块可以是帧内编码的或帧间编码的。帧间编码的宏块依赖于参考宏块,而帧内编码的宏块不依赖于参考宏块。帧内编码的宏块包含生成与该预测帧相关联的宏块大小的图像部分所必需的全部数据。因此,如上所述,与I帧相关联的所有宏块都是帧内编码的宏块。帧间编码的宏块包含描述与该预测帧相关联的图像部分和与参考帧相关联的对应的图像部分之间的差异的数据。
与帧间编码的宏块相关联的数据一般包括运动矢量和差异数据。运动矢量描述要运用于参考宏块的二维变换,以使之与预测宏块对齐,而差异数据标识在参考宏块与预测宏块之间不同的特定像素。
示例性视频解码处理图1是现有技术说明示例性视频解码处理200的流程图。典型的视频解码器接收编码的比特流,通过执行可变长度解码102、去量化104、反离散余弦变换106、运动补偿108、图像重构110以及色彩空间转换112来处理接收到的比特流。
可变长度编码、离散余弦变换以及量化是众所周知的视频编码技术,用于在传送视频比特流之前对它进行压缩。可变长度解码102、去量化104以及反离散余弦变换106是众所周知的解码技术,运用于接收到的编码的视频比特流,来对视频数据解压。可根据可变长度编码、离散余弦变换、量化和或任何其它视频编码技术的任意组合来编码(以及随后解码)视频。
在所描述的实施方式中,为了提高系统性能,在视频流被解码之后,通过缓冲器114缓冲视频流。
运动补偿108是这样一种处理,其中将描述二维平移(translation)的运动矢量运用于参考帧的宏块。运动矢量是编码的视频比特流的一部分,描述了参考帧的宏块中的数据和预测帧的相应宏块中的数据之间的二维位置差异。在所描述的实施方式中,预测帧的每个宏块具有相关联的运动矢量。
在所描述的实施方式中,宏块是大小为16×16的像素块。在备选的实施方式中,可以按照4个8×8的块来描述每个宏块,使得每个8×8的块分配有一个运动矢量。在这样一种实施方式中,宏块的每个8×8的块可单独被处理,但处理方式与这里描述的宏块处理相同。因此,下面的讨论描述了宏块级执行的处理。然而,要认识到也可在其它大小的数据块上进行相同的处理。
如图1所示,在用于存储要用作随后接收到的预测帧数据的参考的先前被解码和重构的帧数据的缓冲器116先前缓冲的参考数据上进行运动补偿108。如果参考帧是错误解码的或未被接收,则漂移误差传递给从出错的(或丢失的)参考帧预测的随后的P帧和B帧。因此,精确地进行运动补偿处理108是重要的。
重构110是这样一种处理,其中将经运动补偿的参考帧数据加到接收到的差异数据(与P帧或B帧相关联的),以形成与预测帧相关联的重构的图像。如图1所指示出的那样,重构的数据可(由缓冲器116)缓冲用于随后用作参考数据。
在显示118之前,在重构的数据上进行色彩空间转换112。执行色彩空间转换处理112,以将视频数据从创建该视频数据的色彩空间转换到与将显示视频数据的显示设备相关联的色彩空间。例如,典型的色彩空间转换可以是从YUV格式到RGB格式。
示例性系统架构和方法图2例示出加速视频解码系统202的示例性架构。加速视频解码系统202接收编码的视频比特流,解码所接收的数据,并将解码的数据传送到显示设备204。显示设备204是电视机、计算机监视器或其它此类显示设备的代表。虽然示为物理上独立的设备,但是显示设备204可以作为加速视频解码系统的集成组件来实现。
加速视频解码系统202是个人计算机、视频游戏控制台或配置成接收、解码和再现视频数据的其它此类设备的代表。示例性加速视频解码系统202包括中央处理器(CPU)206、图形处理单元(GPU)208、以及存储器210。示例性GPU 208包括用于以每顶点的方式执行图形运算的可编程顶点着色器212,以及用于以每像素的方式执行图形运算的可编程像素着色器214。
存储器210用于存储视频解码应用程序216,还可存储其它应用程序218。存储器210还可包括一个或多个缓冲器,例如可由CPU 206访问的CPU缓冲器220;可由GPU 208访问的GPU缓冲器222;以及可由显示设备204访问的显示缓冲器224。其它应用程序218可在CPU 206或GPU 208上执行。执行视频解码应用程序216来控制CPU 206执行可变长度解码102、去量化104、以及反离散余弦变换106。还执行视频解码应用程序216来控制GPU 208执行运动补偿108、图像重构110以及色彩空间转换112。下面参考附图3详细描述利用GPU 208加速编码的视频比特流的解码的方法。
用于加速视频解码的示例性方法可在由计算机执行的诸如应用程序模块之类的计算机可执行指令的一般环境中描述加速视频解码。一般来说,应用程序模块包括例行程序、程序、对象、组件、数据结构等,它们执行特定的任务或实现特定的抽象数据类型。视频解码应用程序216可使用任何数量的编程技术来实现,并可在本地计算环境或分布式计算环境中实现,在分布式计算环境中,任务是由基于任何数量的通信协议通过各种通信网络链接的远程处理设备执行的。在这样一种分布式计算环境中,应用程序模块可位于包括存储器存储设备的本地和远程计算机存储介质中。
图3例示出利用图形处理单元来加速视频解码的示例性方法300。框302-310表示CPU 206执行的处理,而框312-328表示GPU 208执行的处理。
在框302,视频解码系统202接收编码的视频比特流。如上所述,所描述的实施方式适用于根据Windows Media Video格式编码的视频比特流。备选的实施方式可配置成解码根据诸如MPEG和H.26x之类的其它格式编码的视频比特流。
在框304,视频解码应用程序216控制CPU 206标识所接收的编码视频比特流中的编码帧。标识的帧可以是I帧、P帧或B帧。
在框306,视频解码应用程序216控制CPU 206通过对所标识的帧的每个宏块上执行可变长度解码、去量化和/或反离散余弦变换来解码所标识的帧。对于I帧,解码的数据由实际图像数据组成,而对于P帧或B帧,解码的数据表示一个或多个参考帧图像和由当前P帧或B帧所表示的图像之间的差异。与每个宏块相关联的解码的数据通常包括运动矢量和描述在经运动补偿的参考图像和预测图像之间不同的像素的数据。
在框308,视频解码应用程序216控制CPU 206对解码的数据进行缓冲。在所描述的实施方式中,解码的帧数据存储于CPU缓冲器220中。在缓冲解码的数据之后,CPU 206如上参考框304-308那样继续解码其它帧。通过缓冲解码的数据,CPU 206可以在GPU处理先前解码的数据的同时继续解码其它数据,从而通过同时利用CPU和GPU来提高系统性能。
在框310,视频解码应用程序216将数据从CPU缓冲器220转移到GPU 208。在一个实施方式中,为了利用可用的带宽,两个或更多个具有不同数据的宏块被打包在一起,用于从CPU 206传输到GPU 208。在一个实施方式中,运动矢量数据与差异数据分开地从CPU 206传送到GPU 208。
在框312,GPU 208确定接收自CPU缓冲器220的数据是否与I帧相关联。如果数据与I帧相关联,则无需运动补偿或图像重构处理,处理在320继续(从框312“是”分支),在那里,解码的数据存储在GPU缓冲器222中,将用作后续的预测帧的参考数据。
如果接收到的数据与P帧或B帧相关联(从框312“否”分支),则在框314,视频解码应用程序216控制GPU 208执行运动补偿处理。GPU 208将与所接收到的帧数据的宏块相关联的运动矢量运用于先前缓冲的参考数据的相应宏块。在所描述的实施例中,支持不同的运动补偿模式,根据所接收的宏块是帧间编码的还是帧内编码的或者基于相关运动矢量的值而改变。同样支持各种运动补偿精度,包括整数像素、1/2像素和1/4像素精度。示例性的运动补偿处理方法在下面参考图4更为详细地描述。
在框316,视频解码应用程序216确定与当前帧相关联的所有宏块是否都已传送到GPU 208。如果还有更多的与当前正被处理的预测帧相关联的差异数据,(即帧的所有宏块还未传送到GPU 208),则处理在如上所述的框310处继续。另一方面,如果用于当前正被处理的预测帧的所有差异数据都已传送到GPU 208,则在如下所述的框320执行图像重构处理。如上所述,根据CPU 206和GPU 208之间的可用带宽,在发送到GPU 208时,可将多个宏块一起打包在一起。在CPU 206足够快地解码视频数据以及CPU 206和GPU 208之间的存储器带宽足够大的实施方式中,与帧相关联的宏块可以单批传送,这就消除了对图3中所指出的按照从框316到框312的循环的反复处理的需要。
在框318,视频解码应用程序216控制GPU 208重构与所接收到的预测帧数据相关联的图像。通过对于帧的每个宏块,将经运动补偿的参考数据加到所接收到的差异数据来进行图像重构。示例性的图像重构方法在下面参考图5进一步详述。
在框320,视频解码应用程序216控制GPU 208将重构的图像数据(或者在I帧的情况下为所接收到的图像数据)复制到GPU缓冲器222。经缓冲的图像数据于是可用作后续接收到的预测帧数据的参考数据。在所描述的实施方式中,B帧数据不用作后续帧的参考数据,因此不在框320处进行缓冲。
在框322,视频解码应用程序216控制GPU 208的像素着色器组件214对重构的图像执行色彩空间转换处理。色彩空间转换处理是逐像素进行的,以将图像从建立该图像的色彩空间(例如YUV)转换到显示设备204所支持的色彩空间(例如RGB)。因为色彩空间转换施加于图像的每个像素,因此使用GPU 208的可编程像素着色器组件214来执行色彩空间处理是合适的。
在框324,将图像数据复制到显示缓冲器224。在框324,还可调整帧数据的显示顺序。例如,由于B帧依赖于先前一帧以及将来一帧的数据,就可以以不同于显示诸帧的顺序的顺序来接收和处理帧。在框324,调整显示顺序以恢复正确的时序。该框仅运用于I帧和P帧,并且仅当序列中包含B帧时才需要。该步骤是有必要的,因为B帧取决于两个参考,在时间上一个是它之前,而一个是它之后。解码的帧数据保持在显示缓冲器224中,直到到达与该帧相关联的计划显示时间为止。经缓冲的数据量取决于与显示速度相比的处理速度。对解码数据的缓冲还减少了显示器图像抖动,并允许CPU和GPU在先前处理的帧存储于显示224缓冲器的同时继续处理其他帧。
在框326,视频解码应用程序216可任选地配置成控制GPU 208对重构的图像进行特殊效果处理。例如,可控制GPU 208进行基于顶点的或基于像素的特殊效果处理,例如去交错、反向电视电影、缩放、淡入淡出以及图像锐化或模糊化。
在框328,解码的帧图像传送到显示设备204。
示例性运动补偿处理方法图4例示出GPU 208执行的示例性运动补偿处理方法。如参考图3的框314所述那样,所例示的方法可由GPU来执行。
如上所述,在示例性实施方式中,16×16的宏块可具有一个运动矢量(即1MV宏块),或者宏块可被划分成4个8×8的块,每个块具有运动矢量(即4MV宏块)。在所描述的实施方式中,4MV宏块的每个8×8的块被分开处理,与处理1MV宏块的方式相同。方法314是参考1MV宏块来描述的,但是也可对于4MV宏块的每个较小的块进行。
在框402,GPU 208初始化与诸如P帧或B帧的预测帧的宏块相关联的运动矢量数据。视频解码应用程序216控制GPU 208的可编程顶点着色组件212对所接收到的运动矢量数据进行初始处理,以生成顶点数据。对于每个目标宏块(即要被重构的宏块),确定每个顶点(即四角像素的每一个)的目标位置和纹理地址。目标位置规定了要被重构的宏块的目标纹理中的位置,并用于三角形排列。纹理地址规定了参考帧中相应宏块的顶点的位置。在一个实施方式中,CPU 206通过将运动矢量运用于目标块位置来计算纹理地址,并将纹理地址发送给GPU 208。在备选实施方式中,CPU 206将运动矢量发送给GPU 208,顶点着色器212配置成计算纹理地址。
在框404,GPU 208确定要被处理的宏块是否是帧内编码的宏块。如果要被处理的宏块是帧内编码的宏块(从框404“是”分支),则所接收的宏块数据与0值的纹理进行α混合(alpha blend)。由于帧内编码的宏块包含生成完整的16×16像素面积的图像所需的全部数据,将所接收的数据与0值的纹理进行混合导致包括与所接收的宏块对应的完整16×16像素面积的图像的目标纹理。
在备选实施方式中,帧内编码的宏块以与带有0运动矢量的帧间编码的宏块被处理的方式相同的方式被处理(下面参考框410描述)。在这样一种实施方式中,由于将先前生成的参考图像的部分0值化是计算昂贵的,因此图像区域之外的先前被清除的区域(即参考像素值设置为0)用作帧内编码的宏块的相应参考宏块。
在另一实施方式中,对于帧内编码的宏块的运动补偿处理是通过在处理任何其它宏块之前首先清除目标纹理(即将每个像素值设置为0)来进行的。
如果要被处理的宏块是帧间编码的宏块(从框404“否”分支),则在框408,GPU确定与该宏块相关联的运动矢量是否等于0。如果运动矢量具有0值(从框408“是”分支),则在框410,将经缓冲的参考数据中的相应的宏块复制到目标纹理。
在备选实施方式中,对具有0值运动矢量的宏块的运动补偿处理可以与对带有非0运动矢量的宏块进行的运动补偿处理相同的方式来进行。然而,在所描述的实施方式中,为了简化处理,带有0运动矢量的宏块不同于带有非0运动矢量的宏块而被处理。
如果要被处理的宏块是带有非0运动矢量的帧间编码的宏块(从框408“否”分支),则在框412,GPU 208确定运动矢量是否指向图像区域之外。如果运动矢量指向图像区域之外(从框412“是”分支),则在框414,GPU 208执行隐填充(implicit padding)。
在框414,GPU 208执行填充处理,以处理指向图像区域之外的运动矢量。例如,如果与目标位置(0,0)处的宏块相关联的运动矢量是(-3,-4),则参考宏块位于在图像区域之外的位置(-3,-4)。为了确保相应的参考数据存在于图像区域之内,填充带宽(一般是16像素宽)被加到参考图像的每一边。在所描述的实施方式中,通过配置GPU中纹理的渲染状态和纹理地址模式来隐含地执行填充(框414),使得DirectX会自动执行填充。
在备选实施方式中,使用渲染通道作为矢量数据初始化(框402)的一部分来显式地进行填充。也就是说,在进行运动补偿处理之前,使用渲染通道来显式地添加参考帧的四个边界。顶点着色器212被编程来将相同的纹理地址分配给所添加的边界像素。由于顶点的纹理地址由像素着色器使用来采样像素值,因此相同的纹理地址将把相应的参考像素值正确地设置成所希望的边界像素值。
根据进行运动补偿的精度,可在框420使用双线性滤波器内插参考数据以产生1/2像素精度,或可在框422使用双立方过滤波器内插以产生1/4像素精度。下面更为详细地描述实现子像素运动补偿。整数像素精度不需要额外的滤波,由图4中从框414到框420的箭头表示。
在框420,与要被处理的宏块相关联的运动矢量被施加到经缓冲的参考数据中相应宏块,经运动补偿的参考数据被写入目标纹理。
在示例性实施方式中,由于条件运算在GPU 208中是计算昂贵的,因此根据运动补偿模式和运动补偿精度,将宏块一起打包并成批发送到GPU 208。例如,当将帧内编码的宏块一起打包在一起时,由GPU 208对那些宏块进行的运动补偿处理可如上参考图4的框402至406来描述。当将带有0运动矢量的帧间编码的宏块一起打包在一起时,GPU 208对那些宏块进行的运动补偿处理可如上参考图4的框402至410来描述。当带有0值运动矢量和整数像素精度的帧间编码的宏块被打包在一起时,GPU 208对那些宏块进行的运动补偿处理可如上参考框402、412、414和420来描述。框416表示对1/2精度运动补偿进行的额外处理,框418表示对1/4精度运动补偿进行的额外处理。
实现子像素运动补偿精度如上所述,运动补偿处理对于诸如整数像素、1/2像素和1/4像素的各种精度来说是不同的。运动补偿精度指的是运动矢量的精度。例如,运动矢量可描述宏块到最近的像素的移动(即整数像素精度)、到最近的1/2像素的移动(即1/2像素)、或到最近的1/4像素的移动(即1/4精度)。运动补偿处理计算的复杂性根据要求最小复杂性的计算的整数像素精度和要求最高复杂性的计算的1/4像素精度而不同。在示例性实施方式中,由于图像处理单元的像素着色器组件的处理局限(一般受限于每条渲染通路8行代码),根据运动补偿精度对运动补偿处理进行分批。
在一个实施方式中,通过求相邻像素值的和,然后将结果除以适当的数来获得子像素精度。例如,可以对四个像素值求和,然后除以4(例如使用双线性内插滤波器),产生1/2像素精度。在所描述的实施方式中,像素着色器214提供四个独立的8比特通道,对应于红色、绿色、蓝色和α。由于每个通道局限于8比特,因此每个通道可表示0~255的范围。在所描述的实施方式中,可能四个像素值的和会大于255,导致溢出。为了避免这种情况出现,相邻像素值首先被分解成商和余数,例如通过将每个值除以4来进行。然后分别对商和余数进行求和和除法。产生的商随后与经除数(该例中为4)相除的值相乘,并加到产生的余数值。根据运动补偿精度和内插滤波器,可以除以16、32、64以保证不溢出。例如,对于使用双立方内插滤波器的1/4像素运动补偿,参考像素值以16分解。
在备选实施方式中,通过将相邻像素乘以各自的权重,然后将结果值加在一起来获得子像素精度。例如,四个像素值各自乘以.25,然后将结果值相加,导致1/2像素精度。如上所述,像素着色器的整数精度局限于最大8比特,中间结果被舍入,从而引入舍入误差。然而,由于误差将被传递给以后的帧,因此这种误差是不可接受的。为了确保精确的结果,在所描述的实施方式中,舍入误差被归并。具体来说,在计算商的过程中引入的舍入误差被计算并传递到余数的计算中。例如,假设参考像素值以16分解。为了计算最终值,计算商和余数的内插并求和。商的舍入误差乘以16,并加到余数的舍入误差。将商的舍入误差归并到余数的计算中,确保了不会引入中间计算的舍入误差。
在另一备选实施方式中,生成查找表来存储预先计算的中间结果。内插系数可以是高度无规则的,例如双立方滤波器的那些。这种无规则的内插系数导致GPU 208要进行复杂的运算。通过允许对至少某些中间结果的预先计算和存储,查找表的使用可提高系统效率,尤其是当内插系数是无规则的情况下更是如此。为了确保查找表可由GPU 208访问,查找表可实现为带有与2的幂相当大小的混合式(swizzled)纹理。
示例性图像重构图5例示出可由GPU 208执行的示例性图像重构。
在框502,GPU 208接收与诸如P帧或B帧的预测帧相关联的差异数据。如上所述,在示例性实施方式中,为了利用可用带宽,差异数据的两个或更多宏块可打包在一起从CPU 206传送到GPU 208。
在框504,GPU 208对所接收到的差异数据的宏块解包。以保留打包的宏块的原始顺序的方式来解包宏块。
在框506,解码的帧数据添加到相应的经运动补偿的参考数据,以生成与该帧相关联的经重构的图像。
在所描述的实施方式中,图像的每个像素可以8比特无符号数表示,因此具有0~255的值。差异数据具有-255~255的范围。因此,需要9比特来表示差异数据。进行图像重构处理以将所接收到的差异数据添加到相应的参考数据,导致带有在0~255之间的值的像素的预测图像。
在所描述的实施方式中,像素着色器214提供四个独立的8比特通道,对应于红色、绿色、蓝色和α。像素着色器在任一渲染通道中仅能保持多达四个纹理,算术指令数不能超过8。给定上述的像素着色器限制,预测图像重构并不直接。
在所描述的实施方式中,使用两个8比特通道存储9比特有符号差异数据。一个通道(例如α通道)用于保持与差异数据相关联的符号,另一通道用于保持差异数据值。对于每个像素,该值既被加到参考数据也被从参考数据中减去,然后执行条件运算来通过检查存储于α通道中的符号来选择合适的结果。
示例性GPU优化GPU 208进行的用于加速视频比特流的解码的处理可以各种方式被优化。数据归并、预设的UV数据布局以及数据划分是可被实现的处理优化的三个例子。
数据归并可用于降低顶点着色器212上的负荷。由于像素着色器214逐像素地处理数据,对于某一帧,像素着色器214上的负荷是由要被渲染的图像的尺寸来确定的。相反,顶点着色器212逐顶点地处理数据。因此,对于某一帧,顶点着色器212上的负荷直接与要为该给定帧处理的数据块的数量成比例。例如,对于具有20个宏块的帧,顶点着色器212上的负荷是对于带有10个宏块的帧的负荷的两倍。
在一个实施方式中,为了降低顶点着色器处理负荷,具有相等运动矢量的相邻宏块归并在一起,以形成要被处理的更大的数据块。类似地,相邻的帧内编码的宏块(不具有运动矢量)也可归并在一起,并作为一个数据块被处理。
预设的UV布局可实现用于将与图像相关联的存储数据所要求的存储器最小化。许多个人计算机显卡要求纹理大小等于2的幂。例如,320×240图像要求512×512纹理。通过在纹理上排列Y、U和V图像分量时考虑纹理大小约束,可使用最小纹理需要,从而潜在地降低图像的存储器占用区(footprint)。
图6例示出将所要求的存储器最小化的目标纹理上的Y、U和V图像分量的布局。示例性的320×240图像由320×240的Y分量602、160×120的U分量以及160×120的V分量606组成。如果每个图像分量被填充(例如如上参考图4的框414所述),则填充的Y分量608是684×304、填充的U分量610是192×152、填充的V分量612是192×152。
如果U和V分量布置在目标纹理614上Y分量608的侧边上,则要求目标纹理614至少为1024×512。然而,如果U和V分量布置在目标纹理614上Y分量608之下,则仅要求目标纹理为512×512,显著减少了存储图像所要求的存储器。因此,在较佳的实施方式中,在U和V分量布置在目标纹理之前考虑目标大小约束,以将存储图像所要求的存储器量最小化。
数据划分是可用于提高GPU 208的性能的另一优化。在包括图形处理器的许多系统中,直接由GPU可访问的视频存储器一般是有限的。因此,可预见与大图像相关联的数据的尺寸可能超过可用的视频存储器。与GPU 208相关联的存储器带宽(一般指加速图形端口(AGP)存储器带宽)也可能限制GPU可处理的数据量。当GPU 208试图读或写超过AGP存储器带宽的数据时,GPU处理由于被读或写的数据太大而停止。在示例性实施方式中,与大图像相关联的数据可被划分成小的数据集,每个都可由GPU 208单独处理。
图7例示出划分成四个更小的重叠数据集702(1)、702(2)、702(3)和702(4)的示例性大图像702。在所例示的例子中,大图像702被划分成四个子图像,每个大小等于原始图像的1/4加上保护带,以确保与每个子图像相关联的运动矢量不会指向该图像区域的外部。例如,子图像702(1)与子图像702(2)和702(3)重叠。通过将图像数据划分成更小的子集,即使GPU可访问的视频存储器是有限的,GPU 208也能够加速视频解码处理。
结论虽然已经以特定于结构化特征和/或方法逻辑步骤的语言描述了系统和方法,但是,要理解所附权利要求中定义的发明不限于所描述的特定特征或步骤。相反,特定特征和步骤是作为实施所要求的发明的较佳形式而揭示的。
权利要求
1.一种方法,包括接收已编码的视频比特流,所述视频比特流包括帧内编码的帧数据和帧间编码的帧数据;使用中央处理单元来解码所述帧内编码的帧数据;将所述帧内编码的帧数据传送到图形处理单元;使用所述图形处理单元进行对要用作所述帧间编码的帧数据的参考帧数据的帧内编码的帧数据的副本进行缓冲;以及将所述帧间编码的帧数据发送到显示设备以便被显示;使用所述中央处理单元解码所述帧间编码的帧数据;将所述帧间编码的帧数据传送到所述图形处理单元;以及使用所述图形处理单元进行将与所述帧间编码的帧数据相关联的运动矢量应用于所述参考帧数据,以生成经运动补偿的参考帧数据;以及通过将所述帧间编码的帧数据加到所述经运动补偿的参考帧数据来重构与所述帧间编码的帧数据相关联的图像数据。
2.如权利要求1所述的方法,其特征在于,解码所述帧间编码的帧数据包括执行可变长度解码处理。
3.如权利要求1所述的方法,其特征在于,解码所述帧内编码的帧数据包括执行去量化处理。
4.如权利要求1所述的方法,其特征在于,解码所述帧内编码的帧数据包括应用离散反余弦变换。
5.如权利要求1所述的方法,其特征在于,将所述帧间编码的帧数据传送到所述图形处理单元包括识别所述帧间编码帧数据的两个或多个宏块;将所述两个或更多个宏块一起打包成数据包;以及将所述数据包传送到所述图形处理单元。
6.如权利要求1所述的方法,其特征在于,所述帧间编码的帧数据包括不依赖于来自相应的参考宏块的数据的多个帧内编码的宏块、以及依赖于来自相应的参考宏块的数据的多个帧间编码的宏块,其中,将所述帧间编码的帧数据传送到所述图形处理单元包括识别所述帧间编码的帧数据的两个或多个帧间编码的宏块;将所述两个或多个帧间编码的宏块一起打包成仅包含帧间编码的宏块的数据包;以及将所述数据包传送到所述图形处理单元。
7.如权利要求1所述的方法,其特征在于,所述帧间编码的帧数据包括不依赖于来自相应的参考宏块的数据的多个帧间编码的宏块、以及依赖于来自相应的参考宏块的数据的多个帧间编码的宏块,其中,将所述帧间编码的帧数据传送到所述图形处理单元包括识别所述帧间编码的帧数据的两个或多个帧内编码的宏块;将所述两个或多个帧内编码的宏块一起打包成仅包含帧内编码的宏块的数据包;以及将所述数据包传送到所述图形处理单元。
8.如权利要求1所述的方法,其特征在于,所述帧间编码的帧数据包括多个宏块,其中,每个宏块具有相关联的运动矢量,并且其中,将所述帧间编码的帧数据传送到所述图形处理单元包括识别两个或多个宏块,每个宏块具有等于零的相关联的运动矢量;将所述两个或多个宏块一起打包成仅包含带有零运动矢量的宏块的数据包;以及将所述数据包传送到所述图形处理单元。
9.如权利要求1所述的方法,其特征在于,所述帧间编码的帧数据包括多个宏块,其中,每个宏块具有相关联的运动补偿精度,且其中,将所述帧间编码的帧数据传送到所述图形处理单元包括识别两个或多个宏块,每个宏块具有相同的运动补偿精度;将所述两个或多个宏块一起打包成仅包含具有相同运动补偿精度的宏块的数据包;以及将所述数据包传送到所述图形处理单元。
10.如权利要求9所述的方法,其特征在于,所述运动补偿精度是对于最近的像素而言的。
11.如权利要求9所述的方法,其特征在于,所述运动补偿精度是对于最近的1/2像素而言的。
12.如权利要求9所述的方法,其特征在于,所述运动补偿精度是对于最近的1/4像素而言的。
13.如权利要求1所述的方法,其特征在于,还包括使用所述图形处理单元来对要用作后续的帧间编码的帧数据的参考数据的经重构的图像数据的副本进行缓冲。
14.如权利要求1所述的方法,其特征在于,还包括使用所述图形处理单元来将所述帧内编码的帧数据从第一色彩空间转换到第二色彩空间,所述第二色彩空间是所述显示设备所支持的色彩空间。
15.如权利要求1所述的方法,其特征在于,还包括使用所述图形处理单元来将经重构的图像数据从第一色彩空间转换到第二色彩空间,所述第二色彩空间是所述显示设备所支持的色彩空间。
16.一种方法,包括接收已编码的视频数据;使用第一处理单元来解压所述已编码的视频数据;以及使用第二处理单元来执行与所述视频数据相关联的运动补偿处理。
17.如权利要求16所述的方法,其特征在于,所述第一处理单元被实现为中央处理单元。
18.如权利要求16所述的方法,其特征在于,所述第二处理单元被实现为图形处理单元。
19.如权利要求16所述的方法,其特征在于,所述第二处理单元被实现为被配置成执行基于向量的图形处理运算的图形处理单元。
20.如权利要求16所述的方法,其特征在于,所述第二处理单元被实现为被配置成执行基于像素的图形处理运算的图形处理单元。
21.如权利要求16所述的方法,其特征在于,还包括使用所述第二处理单元来执行与所述视频数据相关联的预测图像重构。
22.如权利要求16所述的方法,其特征在于,还包括使用所述第二处理单元来执行与所述视频数据相关联的色彩空间转换处理。
23.一种系统,包括被配置成执行与解码视频比特流相关联的第一运算的中央处理单元;以及被配置成执行与解码视频比特流相关联的第二运算的图形处理单元。
24.如权利要求23所述的系统,其特征在于,所述图形处理单元包括被配置成执行基于像素的图形处理运算的可编程像素着色器组件;以及被配置成执行基于顶点的图形处理运算的可编程顶点着色器组件。
25.如权利要求23所述的系统,其特征在于,所述第一运算包括视频解压运算。
26.如权利要求23所述的系统,其特征在于,所述第一运算包括离散反余弦变换、去量化以及可变长度解码中的至少一个。
27.如权利要求23所述的系统,其特征在于,所述第二运算包括色彩空间转换运算。
28.如权利要求23所述的系统,其特征在于,所述第二运算包括图像重构运算。
29.如权利要求23所述的系统,其特征在于,所述第二运算包括运动补偿运算。
30.如权利要求23所述的系统,其特征在于,还包括用于存储已解码的视频比特流数据的缓冲器。
31.如权利要求23所述的系统,其特征在于,还包括被配置成显示视频比特流的显示设备。
32.一种系统,包括用于解码已编码的视频比特流的中央处理单元;用于执行与所述视频比特流相关联的运动补偿处理的可编程顶点着色器;以及用于执行与所述视频比特流相关联的图像重构的可编程像素着色器。
33.一种系统,包括中央处理单元;图形处理单元;以及视频解码应用程序,它被配置成指示所述中央处理单元执行与解码已编码的视频比特流相关联的第一运算;以及指示所述图形处理单元执行与解码已编码的视频比特流相关联的第二运算。
34.如权利要求33所述的系统,其特征在于,所述第一运算包括对已编码的视频比特流的帧解压。
35.如权利要求33所述的系统,其特征在于,所述第二运算包括将与已编码的视频比特流的帧相关联的运动矢量应用于参考帧数据。
36.一种系统,包括用于利用中央处理单元执行视频解码处理的第一部分的装置;以及用于利用图形处理单元执行视频解码处理的第二部分的装置。
37.一个或多个包括计算机可执行指令的计算机可读介质,当所述计算机可执行指令被执行时,指示计算系统进行使用中央处理单元对接收到的视频比特流解压;以及使用图形处理单元对所述视频比特流进行运动补偿处理。
38.如权利要求37所述的一个或多个计算机可读介质,其特征在于,还包括计算机可执行指令,当所述计算机可执行指令被执行时,指示计算系统进行在所述视频比特流的一特定帧大于所述图形处理单元可处理的最大数据尺寸的情况下,指示所述中央处理单元将与该帧相关联的数据划分成重叠的子图片,每个子图片比所述最大数据尺寸小。
39.如权利要求37所述的一个或多个计算机可读介质,其特征在于,还包括计算机可执行指令,当所述计算机可执行指令被执行时,指示计算系统使用所述图形处理单元应用双线性滤波器以达到与运动补偿处理相关联的1/2像素精度。
40.如权利要求37所述的一个或多个计算机可读介质,其特征在于,还包括计算机可执行指令,当所述计算机可执行指令被执行时,指示计算系统使用所述图形处理单元应用双立方滤波器以达到与运动补偿处理相关联的1/4像素精度。
41.如权利要求37所述的一个或多个计算机可读介质,其特征在于,还包括计算机可执行指令,当所述计算机可执行指令被执行时,指示计算系统使用所述图形处理单元来执行图像重构。
42.如权利要求41所述的一个或多个计算机可读介质,其特征在于,还包括计算机可执行指令,当所述计算机可执行指令被执行时,指示计算系统进行重构包括Y、U和V分量的图像,使得Y、U和V分量排列在由计算机系统所支持、且足够大以保持图像的Y、U和V分量的最小目标纹理上。
全文摘要
加速视频解码系统使用图形处理单元来执行运动补偿、图像重构和色彩空间转换处理,同时利用中央处理单元来执行其它解码处理。
文档编号H04N7/12GK1868211SQ200480008472
公开日2006年11月22日 申请日期2004年2月9日 优先权日2003年3月28日
发明者G·沈, L·朱, S·李, Y·-Q·张, R·F·拉施德 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1