多通道视频译码的系统和方法

文档序号:7755659阅读:221来源:国知局
专利名称:多通道视频译码的系统和方法
技术领域
本发明涉及处理视频流的系统,更具体地说,涉及存储在视频处理中使用的数据的系统和方法。
背景技术
和用于能够利用非常简单的电路,对接收的模拟媒体数据解码的模拟广播系统的模拟调谐器不同,数字媒体数据,例如运动视频,通常需要处理器强化的操作,以便重构数字媒体。如果媒体流具有和媒体流相关的大量数据,例如支持高清晰度电视(HDTV)1920×1080i格式所需的数据传输速率,那么对多个同时的数字媒体流解码的成本和工作量非常高。目前借助利用帧间内容的连续性产生高度压缩的数据的压缩方案解决该问题。运动图像专家组(MPEG)已提出包括将运动估计用于帧间的多块图像,以便实现压缩在内的各种方法。
压缩视频数据的步骤对处理器和存储带宽要求很高。运动估计(一个压缩步骤)需要大量的计算工作,这么大量的计算工作能够用完大量的可用带宽。在常见的运动估计方法中,一帧图像数据首先被分成多个片段或块。随后,对照另一帧或多帧中的一个或多个片段或块组,比较当前帧图像的一个片段或块组。每个交替帧中的最佳片段或块组可能不在和当前帧相同的位置上。在每个交替帧和当前帧之间,该位置经常不同。片段相对于前一帧的位置被表示成运动矢量。通常使用对处理器和存储带宽要求很高的复杂搜索算法构造每个运动矢量,这种搜索算法必须考虑多种片段组合。
在极高的分辨率下,例如1920×1080i格式下,这种压缩流的数据速率很高。高数据速率至少造成三个问题。首先,在任意时间长度内记录或存储这样的流需要大量的存储器,成本高得惊人。其次,可用于观看这种流的许多显示设备不能显示这种高分辨率的数据流。第三,在存在具有多个观看或接收设备的数据网络的情况下(这种网络一般具有固定的带宽或容量),这种网络不能同时支持多个观看设备。另外,建立帧的每个片段或宏块通常需要多个运动矢量。这进一步增加了处理和带宽问题。
因此,需要一种处理视频流的改进系统和方法。


图1是图解说明根据本发明的至少一个实施例的MPEG变码器处理器的方框图;图2是图解说明根据本发明的至少一个实施例的MPEG变码器处理器的操作的流程图;图3是图解说明根据本发明的至少一个实施例的压缩视频译码系统的方框图;图4是图解说明根据本发明的至少一个实施例的矢量处理器的方框图;图5是图解说明根据本发明的至少一个实施例的压缩视频译码处理器的操作的流程图;图6图解说明使用本发明的至少一个实施例公开的译码系统的方法;图7图解说明根据本发明一个实施例的数据指令分组;图8更详细地图解说明图3的一部分;图9更详细地图解说明图3的一部分;图10图解说明源宏块和目的地宏块与图像帧的关系;图11图解说明在本发明的一个具体实施例中,存储在线性地址空间中的数据指令分组;图12图解说明存储在存储设备中的数据分组信息及其存储在缩放缓存器中的对应宏块信息;图13图解说明根据本发明的另一实施例,存储在线性地址空间中的数据指令分组信息;图14图解说明存储在设备存储器中的数据指令分组信息和数据指令分组指针及其在缩放缓存器中的对应宏块信息;图15-19图解说明根据本发明的具体方法;图20更详细地图解说明位操作器的具体实施例;图21更详细地图解说明位操作器的线路缓存器和寄存器的具体实施例;图22图解说明代表通过位操作器的功能数据流的方框图;图23以方框图的形式图解说明产生位偏移指针的具体方法或系统;图24以流程图的形式图解说明根据本发明一个具体实施例的方法;图25以方框图的形式,图解说明覆盖在一帧源宏块上面的一帧目的地宏块的表现;图26以方框图的形式,图解说明在实现本发明的具体实施例中使用的存储器的表现;图27以表格形式,图解说明根据一个实施例,存储在图26的存储器的一部分中的数据的表现;图28以流程图的形式,图解说明根据本发明一个具体实施例的方法;图29以方框图的形式,图解说明根据本发明的系统。
具体实施例方式
根据本发明的至少一个实施例,提供用于译码的系统。该系统包括接收数字视频数据并提供解析视频数据的第一通用处理器。系统还包括与第一处理器耦接,以便获得解析视频数据的第二处理器,第二处理器包括一个视频变码器。根据在图25-29中图解说明的本发明的一个具体实施例,运动矢量和量化信息存储在存储器中,并利用索引表访问,以便减少系统使用的存储带宽。本发明的优点在于媒体通道可被有效接收和译码。另一优点在于更有效地支持视频通道的实时重放。
图1-5图解说明对多个媒体通道译码的系统和方法。该系统包括解析具有一个或多个媒体通道的媒体数据流的第一处理器,和解压缩,缩放随后压缩解析的媒体通道的矢量处理器。在一个实施例中,解析的媒体通道被打包成解码器指令分组,并通过利用排序器,被传送给矢量处理器。矢量处理器对解码器指令分组解压缩,缩放从所述分组产生的宏块,随后压缩缩放后的结果。从而,缩放并且压缩后的输出具有较少的和媒体通道相关的数据,便于更快和/或更高效的存储或传输。
现在参见图1,根据本发明的至少一个实施例,图解说明了视频处理系统的高级功能方框图。视频处理系统100包括接收代表将提供给MPEG解码器110的视频图像的数据的输入缓存器105。MPEG解码器110在存储器(RAM1 120)中产生视频图像或者视频图像解压缩帧的随意按比例缩小的表现。另外,MPEG解码器110可从解压缩过程中,获得运动矢量和量化信息。我们将每个宏块的运动矢量和量化信息的集合称为宏块信息。宏块信息存储在存储器(RAM2 140)中。注意通常不利用标准MEPG解码器,将宏块信息存储在存储器中。另外注意在其它实施例中,存储器120和140可包括动态随机存取存储器,静态动态随机存取存储器,硬盘驱动器存储设备等。
在一个实施例中,MEPG编码器150执行正常MEPG编码的许多步骤,但是通过检索先前存储在RAM2 140中的运动矢量,避免计算量大的运动估计步骤。通过检索该组环绕(surrounding)运动矢量,并建立一组新的运动矢量,MPEG编码器150能够避免在常规的运动估计中需要的成本极高的搜索。输出缓存器160包括在将数据位输出给最终目的地,例如存储器或者耦接的接收这种数据的设备的任意输出端口之前,累积数据位的位存储桶。
另外注意在每个图像数据内,每个宏块的量化信息可随着每个宏块的内容而变化。使用更大的量化值会产生进一步压缩的数据,导致较小的数据流,但是也会引起每个宏块中细节的丢失。在适当编码源MPEG2流(接收数据)中,来自每个宏块的量化信息将被优化,并且根据本发明,我们可重复使用该量化信息,如同在与本申请同日提出的同时待审的专利申请“METHOD AND SYSTEM FOR RATECONTROL DURING VIDEO TRANSCODING”中公开的那样(该申请作为参考包含于此)。事实上,通过重复使用该量化信息,能够获得更高质量的图像,从而允许宏块的更大量化,所述宏块的更大量化担负得起与过度压缩相关的细节的损失,同时保持应包含更主要细节的宏块细节。
参见图2,根据本发明的至少一个实施例,图解说明了译码方法。参考图2中图解说明的具体实施例,附图标记为205-250的单元表示变码器的解码器部分的功能,单元255-295表示变码器的编码器部分的功能。注意该例子假定1/2×1/2的图像缩小比例。在MPEG术语学中,宏块是单个像素的16×16矩阵。在MPEG术语学中,块是单个像素的8×8矩阵。当以1/2×1/2按比例缩小时,假定一组2×2宏块被转换形成单个宏块。一般借助在以较小的位图呈现最终结果的同时,保持尽可能多的原始图像的内容的努力,实现1/2×1/2比例缩小操作。众所周知,比例缩小意味着按照某一方式组合一组像素,产生由较少的像素组成的另一组。对于1/2×1/2的比例缩小来说,存在几种选择。例如,一种可能的实现是,按照预定方式混合像素。但是,本领域的技术人员会理解存在多个途径混合像素,从而获得相同的结果,或者可能在不进行混合的情况下实现相同的缩放。
在步骤205中,检索正被解码的宏块并进行位解析。在步骤210中,利用霍夫曼解码器进行可变长度解码,所述可变长度解码可以是运行等级或游程长度解码,以便检索和特定块相关的信息。检索的信息包含一系列的运行等级序列,每个运行等级序列代表一个具有由游程含蓄定义的一连串连续零值的8×8备用矩阵(称为块)。当在MPEG范围内称为运行等级时,游程指的不是等级值的反复行程,而是0的连续行程。就MPEG来说,按照交错(zigzag)方式建立块。
解码之后,该过程在步骤215对产生的块去量化(dequantize),这涉及用矩阵中的元素去乘块中的每个元素。本领域中众所周知,去量化是逆量化,可在解码过程的开始,检索或确定固定常数的矩阵,当流被解码时很少发生变化。稀疏矩阵的每个元素被乘以来自该常数矩阵中对应项的常数值。为了理解逆量化过程的重要性,首先应明白的是在压缩过程中,在一个实施例中,块经历离散余弦变换(DCT)步骤,将图像块转换到频域。在图像块的这种表现中,仍然能够无任何损失地检索初始块(up to源于数字表现局限性的算术舍入)。
在频域中,数据块具有有趣的性质。对人眼来说,图像的表现的主要决定因素主要由位于左上角的块(矩阵)的项(始于矩阵的索引
)决定。对人眼来说,对块右下角的项的变化对重构块的视觉影响较小。编码过程中的量化的目的是利用这种性质,试图将接近于0,并且在位置上更接近于右下角的项作为0来处理,同时尽可能多地保持左上角中的信息。
在块被去量化之后,在步骤220中对数据块应用反向离散余弦变换(IDCT)方法,以便获得原始形式的块。宏块判定步骤225结束之后,循环进行步骤205-220,直到获得完整的宏块为止。对于MPEG来说,该宏块通常由4(2×2)块Y(照度或亮度)信息和1块Cr及1块Cb组成。当获得完整的宏块时,过程转到测试解码器运动矢量步骤230,确定或识别宏块的运动矢量。如果不存在特定宏块的任何运动矢量,那么在一个实施例中,在步骤245中,依据某一比例因子,例如1、2、4或8,宏块被比例缩小,并被写出。
在存在一组运动矢量的情况下,在步骤235中,运动矢量将被存储到存储区,例如存储器140(图1)中,所述存储区存储用于建立该帧的所有初始运动矢量。在步骤240中,执行运动补偿,建立新的宏块。随后在步骤245中被按比例缩小并输出。
在步骤250中,如果帧已完成,那么在步骤255,过程初始化帧编码器,这将开始在步骤260中对宏块编码。如果当前宏块没有任何运动矢量(在步骤265确定),那么在步骤282中,从在解码过程中产生的比例缩小和解压缩帧读取该宏块,在步骤284中,该宏块中的每块经历离散余弦变换。如果当前的宏块具有运动矢量(在步骤265中确定),那么在步骤270中,从存储器检索四组相邻的运动矢量,并在步骤275和280中,将其用于建立初始图像帧。本例中,注意使用1/2×1/2的缩放比例。会需要关于其它比例因子的更多运动矢量的检索。例如,如果依据1/3×1/3比例缩放,那么理应使用9个运动矢量。如果依据2/5×2/5比例缩放,那么会使用4~9个运动矢量,取决于如何产生结果的运动矢量。
在步骤275中,可按照多种途径建立新的运动矢量。在一种方法中,可对来自四组运动矢量中每一组的矢量的各个分量应用1/2的简单平均按模计算。在一个备选实施例中,利用破坏联系的任意方法,可选择每组k个运动矢量中最频繁发生的运动矢量(ΔXk,ΔYk)。破坏联系的一种可能方法是选择最接近于左上侧的运动矢量的元素。
借助在步骤275中建立的新的运动矢量,过程转到从存储的解压缩图像帧读取宏块,随后建立包含应用逆运动补偿步骤的结果的delta帧,从而在步骤280中获得该delta帧。此时,delta宏块被发送给在步骤286中对所有块执行离散余弦变换(DCT)的单元(舍入每个元素被矩阵元素的整数除法)。随后在步骤288中,所得到的每个块的量化矩阵表现被变长编码。继续该过程,直到在步骤295中检测到帧的编码器末端为止,用信号通知解码器开始处理下一帧。注意利用运动矢量的双重缓存,并对其它命令流排队,编码器和解码器步骤可并行进行。
至少一个实施例的一个特征在于,在存在运动矢量的情况下,在步骤235中,运动矢量将被存储到存储用于建立处理帧的所有初始运动矢量的存储区中。另外,通过检索存储的运动矢量并在步骤275中,利用简单的处理步骤建立一组新的运动矢量,避免了计算量大,并且成本高的运动估计步骤。通过避免成本高的运动估计步骤,本发明可提供成本效果更高的解决方案,该解决方案基本上实现和从scratch搜索运动矢量的系统相同的译码质量。
参见图3,根据本发明的另一实施例,图解说明了压缩视频译码系统。压缩视频译码系统300(这里称为译码系统300)可在各种实现中包括部分、全部或者不包含视频处理系统(图1)。译码系统300包括媒体源301,变码器设备303,主中央处理器(CPU)305,总线/存储器控制器307(即,北桥芯片),主动态随机存取存储器(DRAM)309,系统输入/输出(I/O)总线315,网络控制器320和设备存储器390。
在一个实施例中,变码器设备303包括处理器330,霍夫曼解码器333,输入位存储桶335,存储器控制器340,解码器指令分组(DIP)排序器345,视频处理器350和系统直接存储器存取(DMA)总线接口380。在至少一个实施例中,处理器330是通用处理器,例如RISC处理器,而DIP排序器345,和视频处理器350是被优化以便高效处理特定任务的专用数据处理器。在一个实施例中,视频处理器350,排序器345和处理器330被集成到一个公共基体上,例如半导体基体或插件基体上。在不脱离本发明的精神或范围的情况下,根据需要,译码系统300可包括另外的部件。
在至少一个实施例中,媒体数据流310代表来自一个或多个源301的数字媒体数据,每个源可具有一个或多个媒体数据通道。媒体源301可包括媒体数据流的任意源,例如MPEG播放器,通过网络控制器320与译码系统300连接的数据服务器等。在一个实施例中,当在系统303接收时,媒体数据流采取字节、或字格式。在其它实施例中,媒体数据流310可以是由系统330组织成字节或适当字大小的位流。一旦采取恰当的字格式,数据被传送给存储器控制器340。在一个实施例中,媒体数据流310被看作存储器控制器340的客户。可通过一组共用或专用输入引线,或者通过系统I/O总线315,媒体数据流可被提供给存储器控制器340。通常,存储器控制器340将根据预定的优先化方案,例如循环方案,或者根据将参考图5更详细说明的固定优先化,对其每个客户判优。
来自媒体数据流310的数据存储在设备存储器390中。设备存储器390可包括快速存储器,随机存取存储器,高速缓存存储器等。一旦数据流被存储在设备390中,那么多个客户机,包括处理器330和视频处理器350能够通过控制器340访问存储器390,并从存储器390获得数据流。这允许系统303并行处理数据。
在一个实施例中,处理器330使用输入位存储桶335作为集结区,以支持对存储在存储器390中的数据的位级存取,以及缓存数据,从而降低处理器330和存储在存储器390中的数据之间的等待时间。例如,通过使用输入位存储桶335,处理器330可请求可变范围内的任意位或位的倍数。例如,处理器可请求始于地址位置的位3的字节或者恰当大小的字。返回的值将具有恰当对准提供给处理器330的实际数据的边界的位3的值。
在一个实施例中,处理器330是通用处理器,例如MIP处理器,或者专用处理器,例如ASIC。通用处理器是执行软件规定的一个或多个功能的数据处理器,这里要明白的是软件理应包括固件。在一个实施例中,处理器330存取接收的视频数据,并执行纠错;过滤,例如媒体数据流310的解析或解码,产生通过媒体数据流310接收的所需媒体数据通道的解码器指令分组(DIP)。DIP包括将由DIP排序器220和矢量处理器230用于产生新的宏块的具体指令和/或控制信息。一旦产生,那么DIP可被存储器控制器340存储在设备存储器390中。在另一实施例中,纠错、过滤或解析功能中的一个或多个功能由设备303的另一组件执行。例如,在存储器控制器340将媒体数据流310存储在设备存储器390中之间,可使用位流过滤器(未示出)对媒体数据流310进行过滤操作。处理器330也可利用专用霍夫曼解码器333执行霍夫曼解码过程。霍夫曼解码器333可包括硬件或软件中,加速解码过程的简单的可变位查寻表。
DIP排序器345起视频处理器350的控制单元的作用。事实上,DIP排序器可被认为是视频处理器350的一部分。排序器345是从其接收数据的存储器控制器340的客户机,并将数据连同控制信号一起提供给视频处理器(变码器)350。
在一个实施例中,视频处理器350是接收来自DIP排序器345的DIP和控制信号,随后着手按照流水线方式进行媒体解码,以使通过量达到最大的视频变码器。在至少一个实施例中,视频处理器350使用解压缩块355解压缩DIP。解压缩块355的数据输出被传送给缩放部件(scalar block)360,在缩放部件360,解压缩视频数据依据比例因子被缩放,随后被输出给压缩部件365。在一个实施例中,压缩部件365压缩缩放部件360的输出,产生压缩数据,例如视频帧,并将压缩数据传送给输出位存储桶370,输出位存储桶370存储压缩视频数据的位,直到整个字准备好由存储器控制器340存储为止。下面参考图4,更详细说明视频处理器350的一个具体实现。
存储器控制器340将视频处理器350看作客户机,从输出位存储桶370检索其数据,并将其存储在设备存储器390中。一旦一帧压缩媒体从视频处理器350检索并存储在存储器390中,那么系统DMA总线接口380可访问该帧压缩媒体,并利用系统I/O总线315将其发送给北桥307。北桥307再将数据发送给主DRAM 309。在一个实施例中,主DRAM 309用作将分配给系统其余部分的最终媒体数据通道的存储器。在一个实施例中,主处理器350安排最终媒体数据通道何时将被发送给网络控制器320,谁负责最终媒体数据通道的分配和广播。在一个实施例中,网络控制器与用于显示传送的信息的多个显示设备连接。注意北桥307代表使主CPU 305与系统(主)存储器308和IO总线315连接的集成或多芯片解决方案。
现在参见图4,根据本发明的至少一个实施例,图解说明了视频处理器350的一种具体实现。回想视频处理器350利用解压缩部件355,对从媒体数据流解析的媒体数据通道(采取DIP的形式)解压缩,利用缩放部件360缩放输出,随后利用压缩部件365压缩缩放后的输出。在本发明的一个实现中,解压缩部件355包括去交错(deZigZag)/去量化部件410,反向离散余弦变换(IDCT)部件420,运动补偿430和宏块缓存器440,而压缩部件365包括缓存运动预测器部件450,离散余弦变换(DCT)部件460,量化/交错部件470和霍夫曼编码器480。要认识到可独立实现解压缩部件355和/或压缩部件365的一个或多个组件。
如前所述,在一个实施例中,通过存储器控制器240,DIP排序器345从设备存储器390(图3)检索解码器指令分组(DIP)。这种情况下,DIP排序顺345随后能够按照将DIP提供给适当位置的方式,将DIP转发给变码器350。例如,通过经变码器350本地总线直接寻址并提供数据,能够向各个块提供数据,或者排序器345能够将控制land和/或数据信息写入寄存器中枢,变码器350部件能够访问所述寄存器中枢。在正常的数据流内,排序器将使去交错/去量化部件410能够检索数据。
在一个实施例中,DIP排序器根据通过媒体数据流310接收的,并存储在存储器390中的基本流数据,检索DIP。回想在至少一个实施例中,媒体数据流310(图3)包括一个或多个MPEG视频数据通道。这种情况下,视频通道的压缩的MPEG算法通常具有离散余弦变换(DCT)阶段,离散余弦变换实现时域-频域变换。作为这种变换的结果,和位于矩阵右下角的元素相比,频域中和所得到的矩阵中索引为(0,0)的左上侧元素最接近的元素post-DCT被更大地加权。如果频域中的矩阵使用较低的精度表示元素矩阵右下方一半的元素,那么如果右下方一半中的较小值低于以量化因子为基础的阈值,那么它们被转换成0。将每个元素除以量化因子是用于产生更多0元素的一种方法。MPEG和相关算法通常应用更大的量化值,以便降低频域中矩阵的精度,导致更多的0元素,从而降低数据传输速率。因此,在一个实施例中,去交错/去量化部件410对媒体数据通道上DCT操作的结果去离化。
类似地,虽然通常用(行,列)格式表示矩阵,不过作为DCT函数的结果产生的矩阵的独特性质提供一种表示post-DCT矩阵的不同方法。在一个实施例中,按照交错方式表示post-DCT矩阵,例如(1,1),(2,1),(1,2),(1,3),(2,2),(3,1),(4,1),(3,2),(2,3)等。通过按照这种方式表示post-DCT矩阵,可能遇到post-DCT矩阵中相当长的一串0。从而,利用(Run,Level)格式,能够更有效地表示post-DCT,这里Run代表连续0的数目,Level代表post-DCT矩阵的下一非0元素的值。随后可借助固定的Huffamn表对(Run,Level)对编码,以便进一步压缩post-DCT矩阵。
在一个实施例中,来自去交错/去量化部件410的输出被发送给,或者以其它方式提供给将所述输出从频域转换到时域的组件。例如,如果先前根据离散余弦变换处理媒体数据流310(由DIP表示)的解析通道,那么来自去交错/去量化部件410的输出可被发送给反向离散余弦变换(IDCT)部件420,在反向离散余弦变换(IDCT)部件420,利用反向离散余弦变换函数将所述输出从频域转换到时域,从而产生一块数据。在不脱离本发明的精神或范围的情况下,可使用频域和时域之间的其它转换方法。IDCT部件420产生的块可被存储在宏块缓存器430中。当产生了足以形成宏块的足够块时,宏块缓存器将将数据的宏块连同宏块信息(包含运动矢量和量化信息)一起发送给运动补偿器440。
在一个实施例中,运动补偿器440可如前参考图2的步骤240说明的那样工作,运动补偿器440存储宏块信息以便以后使用。在一个备选实施例中,存储的宏块信息只包含量化信息。如果传送给运动补偿器440的宏块是基准帧(I-帧)的一部分,那么运动补偿器440对该宏块解码,并利用存储器控制器340,将解码结果和量化信息写入设备存储器390(图3)。基准帧一般被用于译解必须根据运动矢量构成的其它非基准帧。
在一个实施例中,运动补偿器440产生的新的宏块被发送给缩放部件360,在缩放部件360,利用比例因子缩放该宏块。例如,如果宏块包括块的4×4矩阵,并且使用为2的比例因子,那么所得到的缩放宏块会包括块的2×2矩阵。所得到的缩放宏块随后被传送给缓存运动预测器450,以便开始压缩过程。
在一个实施例中,当产生足以形成一个新的完整宏块的足够的缩放宏块时,诸如缓存运动预测器440之类运动矢量发生器处理相关的存储运动矢量,从而产生一组新的运动矢量。在一个备选实施例中,可按照传统方式,根据相邻帧的宏块,产生运动矢量。
每次传送一块数据地将基准帧传送给DCT 460。DCT 460获得每块数据,并通过例如如前所述,进行离散余弦变换,将该数据块从时域变换到频域。在一个实施例中,如果宏块不具有与其相关的任意运动矢量,例如帧内或I帧,那么在不受运动预测器450处理的情况下,利用内部数据通路,直接从缩放部件360将宏块传送给DCT部件460。
在一个实施例中,DCT 460输出的修改块被发送给量化/交错部件470,在量化/交错部件470,该块从(行,列)格式被量化和/或变换,或者“交错”成对于运动等级编码来说更佳的格式。来自量化/交错部件470的量化和/或交错输出随后可被发送给霍夫曼编码器480,霍夫曼编码器480压紧或压缩来自量化/交错部件470的输出,并将压缩结果以位流的形式发送给输出位存储桶370。在一个实施例中,输出位存储桶能够在等待时间较小的情况下,以位级方式,将数据存储在任意位单元。例如,输出位存储桶能够起累积从霍夫曼编码器480输出的位流的缓存器的作用,从而能够高效地将所述位流写入设备存储器390。
变码器350还包括IDCT部分475,它对来自量化器的数据进行IDCT。该数据与来自运动预测器450的数据结合,并被存储以便校正有损压缩的效果。在一些实施例中,使用有损压缩的校正,因为变码器产生的帧可被用作形成其它帧的基准帧。通过提供校正有损压缩的步骤,能够限制误差的扩散,从而提高编码器部分产生的数据的准确性。
图5图解说明了存储器控制器340的一个具体实施例。具体地说,图5图解说明具有接收来自特定客户机的请求的多个客户机接口FIFO 510-514(先进先出存储器)的存储器控制器。客户机接口FIFO分别接收来自特定客户机的数据存取请求。在图解说明的实施例中,在多路复用器520,在多条写数据总线接收写数据。判优器525确定将服务于哪个待决的写请求,并提供适当的控制信号,以便接收对应的输入通道。存储器排序器530按照有效的方式组织读请求。例如,一旦一页存储器打开,那么排序器通常将尝试服务来自同一页的请求,以便降低等待时间开销。除了与存储器,例如双倍数据速率(DDR)存储器连接之外,排序器能够使用与寄存器总线客户机接口连接的寄存器文件。读数据返回通路将获得的数据提供给读返回控制部分535。读返回控制部分535与读数据总线连接,从而将信息返回给多个客户机之一。
参见图6,根据本发明的至少一个实施例说明了利用译码系统300的方法。译码方法600开始于步骤610,在步骤610,媒体数据流310(图3)被变码器303接收,或者被传送给变码器303。如前所述,媒体数据流310可存储在设备存储器390中(图3),以便以后检索。在步骤620中,处理器330解析媒体数据流310,识别所需的数据通道,例如从MPEG播放器发送的视频数据通道。处理器330也可在步骤620对媒体数据流310执行其它处理,例如纠错,过滤等。
在一个实施例中,在步骤630中,解析的数据通道以解码器指令分组(DIP)的形式,被传送给视频处理器350。如前参考图4所述,视频处理器器350的解压缩部件355对DIP解压缩。在步骤640中,缩放部件360利用比例因子缩放解压缩部件355的输出,以便减小与媒体数据流310的所需通道的元素相关的数据量。例如,通过缩放MPEG视频通道的宏块,表现每帧需要的数据减少。在步骤650中,如前参考图4所述,从缩放部件360输出的缩放数据被压缩部件365压缩。来自压缩部件365的压缩输出随后被输出给一个或多个接收器单元。接收器单元可包括各种媒体设备,例如视频显示终端,音频设备等。
作为译码系统300执行的处理的结果,媒体数据流310(图1)的通道被按比例缩小或者被压缩,导致与所述通道相关的较少数据。例如,视频处理器350(图3)能够按比例缩小来自MPEG播放器的视频数据流(媒体数据流310)的通道,导致每帧数据较少的通道。这种按比例缩小随后允许通过网络或者其它媒介,更快和/或更有效地传送视频数据通道。例如,在一个实施例中,媒体数据流310包括将被用于实时重放的多个视频数据通道。这种情况下,通过单独按比例缩小一个或多个视频数据通道,能够更快和/或更高效地传送它们,从而支持视频通道的实时重放。
这里公开的特殊实施例容许各种修改和备选形式。于是附图和详细说明中举例表示了具体实施例。但是应明白,附图和详细说明并不意图将本发明限制于公开的特定形式,相反,在法律允许的最大范围内,本发明将覆盖落入由权利要求及其等同物限定的本发明的精神和范围内的所有修改,等同物和替换物。例如,在图1中图解说明的系统中,解码器110和存储器120及140之间的连接可代表独立总线或共用总线。同样地,编码器150和输出缓存器之间的连接,以及解码器和输入缓存器之间的连接可代表相同或不同的连接,就与存储器120和140的连接来说,甚至可以共用。另外,在本发明的另一实施例中,选择编码器确定运动矢量的标准操作模式和如同这里说明的运动矢量复用模式之一。一种模式的选择通常以先前存储的宏块信息的可用性为基础。注意在另一实施例中,在标准操作模式内,解码器不存储运动矢量。
本发明的一种实现是驻留在如附图中描述那样配置的一个或多个处理系统的随机存取存储器中的多组计算机可读指令。在被处理系统要求之前,该组指令可存储在另一计算机可读存储器中,例如存储在硬盘驱动器或者存储在可拆卸的存储器,例如最终用在CD驱动器或DVD驱动器中的光盘,或者最终用在软盘驱动器中的软盘中。此外,该组指令可存储在另一图像处理系统的存储器中,并通过局域网或广域网,例如因特网传送,这里传送的信号可以是通过诸如ISDN线路之类媒介传播的信号,或者信号可通过空中传播,并被本地卫星接收,从而被传送给处理系统。这种信号可以是包含载波信号的复合信号,包含在载波信号内的是包含实现本发明的至少一个计算机程序指令的所需信息,并且当用户需要时,可照这样被下载。本领域的技术人员会认识到各组指令的物理存储和/或传送物理改变以电、磁或化学方式存储所述各组指令的媒介,以致所述媒介携带计算机可读信息。
数据指令分组(DIP或“DIP分组”)是能够同时包含指令信息和数据的数据分组。图7图解说明了DIP分组的一个例子。
图7中图解说明的DIP具有首标部分,配置部分和数据部分。DIP的首标包括一个操作码和一个尺寸指示符。DIP的操作码部分指示一个指令,或者将与具体的DIP分组相关的其它控制信息。在一个实施例中,首标的尺寸部分指示是否存在与DIP相关的尺寸有效负载。例如,尺寸部分可具有指示不存在与DIP相关的任何配置或数据,只指示首标大小的值。另一实施例允许尺寸部分值指示DIP由DIP(EOD)指示符的末端端接。另一实施例允许尺寸部分值指示用后续的字节数规定DIP的大小。例如,尺寸部分值可指示接下来的两个或四个字节包含规定DIP大小的无符号整数。
DIP的配置部分可包含与其具体操作码相关的配置信息。例如,DIP可具有指示包括图像控制信息的操作码,从而能够预先确定配置部分,以致DIP解码器会从位于预定位置的配置部分获得控制信息注意DIP的配置部分是可选的,取决于实际的DIP。另外,配置部分可包含上面所述的尺寸有效负载数据。
指令分组的数据部分可包含与DIP分组相关的数据。例如,压缩或非压缩视频数据可包含为具体DIP的一部分。注意,数据部分的存在以操作码为基础。在不存在配置或数据部分的模式下,首标部分可规定与配置和操作数据无关的要执行的具体操作。
根据公开内容的具体模式,DIP分组被用于按照视频数据与从中接收视频数据的数据类型无关的方式,分包数字视频数据,例如基本流数据。于是,如果特定的视频标准,例如MPEG标准在未来发生变化,或者如果需要支持一种不同的数字视频标准,用于产生DIPS的程序可发生变化,以适应接收的视频数据,同时保持DIP格式不变。由于能够独立于具体的视频标准设计硬件,因此效率较高。
具体DIP操作码的例子包括指示DIP包含视频时间戳记信息的DIP操作码,指示图像配置信息包含在DIP内的DIP操作码,指示片断或宏块信息包含在DIP内的DIP操作码,指示缩放宏块信息包含在DIP内的DIP操作码,指示量化矩阵数据包含在DIP内的DIP操作码,指示最后的图像DIP应被重复的DIP操作码,和/或指示具体图像位置,例如片段、帧或宏块的末端的DIP操作码。要明白可包括另外的操作码,以支持其它功能,并且包含操作码的实际DIP通常被存储并且随后被解码。
图8以方框图的形式图解说明了用于产生DIP分组的系统300(图3)的一部分。图8包括DIP发生器部分710,在一个实施例中,DIP发生器部分对应于图3的处理器的一部分;设备存储器390;和数据输入控制器715,在一个实施例中,数据输入控制器对应于DIP排序器345的一部分。要认识到在备选实施例中,可利用不同于图解说明的其它硬件或软件解决方案,实现图解说明的各个组件。
DIP发生器710包括基本流读出器712,数据指令分组发生器711和指针控制部分713。在一个实施例中,可用软件在具有输入端口和输出端口的组合物的通用处理器上实现每个部件711-713,所述输入和输出端口用于向单个软件模块提供数据,以及接收来自单个软件模块的数据。在另一实施例中,可用具有使组件相互耦接的输入和输出端口的硬件实现部件711-713。
存储器390包括存储基本流数据391、DIP数据392和DIP指针数据393的各个部分。
操作上,基本流读出器712接收来自存储器部分391的基本流数据或者其它视频数据。在一个实施例中,基本流数据391首先接收自媒体源301,如图3中所示,并被存储在部分391中。一般来说,该数据将被存储为代表视频图像的基本流数据。如同参考图3所述那样,可作为对存储器控制器的客户请求的结果,接收该数据。基本流读出器接收视频数据,从而它可由数据指令分组发生器711分组。数据指令分组发生器产生实际的DIP,所述实际DIP包括图3的视频处理器部分350的后续控制和操作所必需的指令和数据。
除了分包视频数据供视频处理器350使用之外,数据指令分组发生器能够产生DIPS,从而配置视频处理器350。在一个实施例中,数据的每个宏块被存储为单个DIP。在其它实施例中,多个宏块可与单个DIP相关。例如,整段数据可作为单个DIP的一部分被传送。同样地,要认识到可实现任意数目的DIP变化,以传送视频信息。
当具体的DIP由数据指令分组发生器711产生时,它被写回到DIP存储部分392,DIP存储部分392是存储器390的一部分。要认识到DIP存储部分392可以是易失性存储器,或非易失性存储器,例如硬盘。在一个实施例中,DIP存储部分392可以是与视频处理器访问的帧缓存器相关的环形缓存器。通常,相对于正在产生的图像的查看,实时地发生基本流读出器712对基本流数据的存取和DIP的产生。一旦DIP数据被存储在存储单元392中,那么数据输入控制器715能够接收DIP数据,从而将其提供给DIP解码器,如后所述。
根据本发明的具体实施例,指针控制部分713跟踪何时产生新的DIP,并将DIP的指针存储在存储单元393中。这里将更详细地说明DIP指针数据的使用。
图9更详细地图解说明设备303(图3)的一部分和设备存储器390。具体地说,图9图解说明存储器控制器340,DIP排序器345,视频处理器350和高速缓存存储器341。图9中图解说明的DIP排序器还包括可对应于图8的数据输入控制器715的DIP输入控制模块346,DIP解码器模块747,和DIP输出控制模块348。DIP排序器与视频处理器350耦接。
视频处理器350包括和其缩放部件360相关的其它细节。具体地说,缩放部件360还包括缩放缓存器351和缩放引擎352。DIP排序器345与存储器控制器340耦接,存储器控制器340再与一个或多个存储设备,例如设备存储器390耦接。注意图解说明了能够包括存储在存储器390中的数据的高速缓存存储器341。
操作上,DIP排序器345的输入控制模块346将通过存储器控制器340接收具体的DIP信息。在一个实施例中,DIP输入控制模块将客户读取请求提交给存储器控制器340。存储器控制器340将通过高速缓存存储器341或者设备存储器390接收DIP。当收到请求的DIP时,解码器347将根据DIP分组的操作码部分执行操作。在一个实施例中,DIP解码器模块347将包括与每个DIP操作码相关的微代码。根据具体的操作码,DIP排序器345将通过DIP输出控制模块348,与视频处理器部分350连接。
例如,如果具体DIP中的操作码指示包含图像配置数据,那么DIP解码器模块347将用硬件或软件执行写入视频处理器350的恰当寄存器,从而用具体信息配置视频处理器350的功能。例如,具体的缩放信息,例如作为DIP分组的一部分包括的,涉及源图像大小和目标图像大小的信息可被存储到控制缩放引擎352的功能的一个或多个寄存器中。
图10-14与一个具体实施例中,使用视频处理器350的缩放过程内DIP的使用相关。
在本发明的一个实施例中,DIP排序器访问存储在设备存储器390中的DIP,并将代表宏块的信息提供给视频处理器350。一般来说,提供给变码器350的DIP数据是代表视频宏块的压缩数据。通过将该数据连同恰当的解压缩信息一起提供给视频处理器350,视频处理器能够解压缩该数据,得到解压缩的宏块数据。要明白的是,在将非压缩宏缓存器数据存储在缩放缓存器351中之前,可存在由视频处理器350执行的数个解压缩过程。但是,为了便于说明,将认为DIP排序器345将宏块数据提供给缩放缓存器。还应明白的是,在本发明的另一实施例中,DIP排序器会执行视频处理器执行的一些或全部解压缩功能。
一旦宏块数据被存储在缩放部件360的缩放缓存器351中,那么缩放引擎352能够访问存储在缩放缓存器351中的宏块数据,从而提供缩放的宏块,缩放引擎能够使用传统的缩放方法,或者这里公开的缩放方法产生缩放图像。参考图10有益于更好地理解本发明,图10图解说明了宏块与图像帧的关系。
图10图解说明包含宏块M(0,0)~M(n,m)的一帧视频。为了便于说明,图10的宏块被描述成代表一帧数据,但是在其它实施例中,图10的宏块实际上可代表数据一块数据,或者只是一帧或一块数据的一部分。
图10的帧与特定的分辨率相关。例如,图10的帧可被认为是分辨率为1920像素×1080像素的源帧。由于每个宏块代表该帧的16像素×16像素部分,因此用于代表一帧的宏块的数目取决于帧的分辨率。应注意的是,虽然术语宏块具有具体的含义,为了便于说明和/或实现,在本发明的其它实施例中,可使用不同于传统宏块的块大小。
操作上,在被缩放引擎352访问之前,图10中图解说明的帧的宏块被存储在缩放缓存器351中,缩放引擎352产生代表缩放图像的目的宏块。例如,为了产生分辨率小于1920×1080,例如1280×720分辨率的目的图像,缩放引擎352必须访问多个源宏块。如图10中所示,为了产生一个新的目的宏块DM(DMR0,DMC0),需要四个宏块,所述目的宏块DM(DMR0,DMC0)是与行DMR0和列DMC0相关的宏块。换句话说,当图像正被按比例缩小时,根据一个以上的源宏块产生单个目的宏块。
对于缩放引擎352来说,为了有效地进行缩放,缩放引擎352应能够通过缩放缓存器351获得源宏块。根据本发明的一个具体实施例,这是通过装入第一组宏块,例如一段数据(即第一行的宏块(0,0)~(n,0))或者第一批多段数据来实现的。新的目的片断将产生包含由DRM0限制的水平数据的新的一行或者多个宏块。于是,单片源宏块不包含足以产生用于代表新片段的目的宏块的足够宏块数据。根据本发明的一个具体实施例,还只装入一行宏块的一部分。例如,为了产生目的宏块DM(DMR0,DMC0),至少需要第二行宏块M(x,1)的源宏块M(0,1)和M(1,1)。由于允许通过将少于整段视频数据的视频数据存储到缩放缓存器中,产生目的宏块,从而减小了缩放缓存器的大小,因此该具体实施例的效率高于已知的方法。
一旦目的宏块被产生,那么不再需要用于产生后续目的宏块的源宏块可被重写。注意在本实施例中,缩放缓存器的大小将由正在实现的实际比例因子确定,或者由能够实现的最大比例因子确定。例如,参见图10,可看出为了产生所示目的块大小的目的宏块(参见M(DMR1,DMC1),需要多达9个源宏块。在本实施例中,缩放缓存器需要适应于存储两个片段,加上第三个片段的三个额外的宏块。当希望提供额外的缓存能力,以确保缩放引擎352不会停止时,可包括更大部分的第三片段。
本实施例的优点在于由于源宏块被顺序存储,例如相对于扫描顺序,因此代表宏块的DIP分组被顺序访问。图11图解说明了依次存储在地址空间中的各个宏块的DIP分组。根据本发明的一个具体实施例,每个DIP分组可具有不同的大小。通过顺序访问DIP分组,使DIP排序器能够确定一个分组始于何处,另一分组止于何处。于是,与具体的一段宏块相关的所有DIP分组可被顺序存储在存储器390中,从而允许顺序从存储器391获得相邻的宏块。
图12图解说明存储在一部分存储设备390中的DIP数据391,存储设备390可以是帧存储器或者高速缓存存储器。如存储器表现391所示,DIP数据391从DIP(0,0)~DIP(n,m)被顺序存储在存储器中。在一个实施例中,只有在读取当前DIP之后,每个后续DIP的位置才是可识别的。通常,这是通过相对于线性存储空间,将DIP存储在彼此紧邻的存储单元中来实现的。图解说明存储在缩放缓存器352中的数据的存储器表现352代表由DIP数据391产生的宏块数据。注意在图12中,图解说明与第一片段相关的宏块,以及宏块(0,1)~宏块(3,1)被存储。虽然这大于产生目的宏块M(DMR0,DMC0)所需的宏块的数目,但是它允许存储其它信息,以确保缩放引擎352不会停止。要认识到根据本发明选定的等待时间,也可使用另外的缩放缓存器大小。
图13和14图解说明本发明的另一实施例,借助该实施例,通过只存储产生紧接的目的宏块所需的那些源宏块,能够利用具有较小尺寸的缩放缓存器351。要认识到图9的系统必须相对于具体DIP的扫描序列,无次序地访问具体DIP,以便译解特定的目的宏块。图13图解说明存储在特排序列353中的DIP数据,从而指示识别特定DIP的位置的指针。如图14中进一步所示,代表一个特定宏块的各个DIP的指针被存储在存储器390的DIP指针表部分中。
在一个实施例中,以每个指针之间存在已知间隔的方式,将指针值存储在DIP指针部分中。例如,指针值可存储在紧邻的字中。通过将指针存储在已知或者易于计算的位置,DIP输入控制模块346能够根据产生的目的宏块,访问特定的DIP。能够无序访问DIP优于现有技术,以及前面描述的方法,因为由于只需容纳缩放引擎352产生特定目的宏块所需的那些源宏块,实现了尺寸减小的缩放缓存器。于是,DIP输入控制模块346能够只访问产生所希望目的宏块需要的那些源DIP。例如,再次参见图14,为产生目的宏块M(DMR0,DMC0),可以只访问与宏块M(0,0),M(1,0),M(1,0)和M(2,0)相关的DIP。
根据本发明的一个实施例,按照实际扫描顺序,将源DIP存储在存储器390内。在另一实施例中,按照预期的访问顺序,例如缩放顺序,存储源DIP分组。术语缩放顺序用于指示为了适应按照特定顺序的目的宏块的产生,需要被访问的源宏块的顺序。例如,虽然宏块的扫描顺序是从第一行开始直到最后一行,从左到右越过每行宏块,不过缩放顺序以目的宏块将被产生的顺序为基础。于是,在要产生的目的宏块的顺序是M(DMR0,DMC0),之后是M(DMR0,DMR1)的情况下,扫描序列的一个例子应是按照下述顺序访问源宏块M(0,0)、M(1,0),M(0,1),M(1,1),M(2,0),M(3,0),M(2,1),M(3,1)。注意由于宏块M(0,0)和M(1,0)被用于只产生宏块M(DMR0,DMC1),因此一旦不再需要它们,那么它们就可被后续宏块重写。
由于存储有指示每个顺序DIP被存储于何处的指针表,因此对于了解DIP存储于何处来说,DIP本身存储在存储器中的实际顺序并不重要。但是,在另一实施例中,和扫描访问顺序相反,按照缩放访问顺序存储DIPS,以便提高将紧邻访问的数据被存储在相同一页存储器上的可能性,从而减小与从存储器获得DIP数据相关的等待时间。同样地,要认识到存储DIP指针的实际顺序可以缩放序列为基础,或者按照除扫描顺序之外的某一顺序方式。例如,可按照相对于扫描访问序列,访问顺序DIPS的方式,存储指针本身。
图15-18图解说明根据本发明的具体方法。图15图解说明根据本发明的存储信息的具体方法,在步骤810,第一组宏块被存储在缩放缓存器中。在一个实施例中,第一组宏块将包含与特定的图像帧相关的一个或多个片段的视频信息。通过存储与一个或多个整个片段相关的宏块,能够确定每个相邻存储的DIP的起点和终点。
在步骤811,第二组宏块数据被存储到缩放缓存器中。第二组宏块数据代表一段帧数据的一部分。如前所述,在一个实施例中,第二组数据包括开始产生新的一组缩放宏块所需的视频片段的那些宏块。
图16根据本发明的一个具体实施例,图解说明了另一方法。图16的方法包括已参考图15说明的步骤810和811。在步骤812,另外的宏块被存储到缩放缓存器中。例如,虽然步骤810和811只存储允许开始新目的宏块的缩放的足够源宏块,不过在缩放缓存器中存储另外的源宏块允许在不停止缩放引擎352的情况下,产生另外的目的宏块。例如,如果产生单个新的目的宏块所需的第二组宏块的最大数目为3,那么步骤812可存储足够的其它宏块(即6个宏块),以确保缩放缓存器总是具有能够继续产生缩放宏块,而不会停止的足够信息。
在步骤813,确定图16的方法是否已将与帧缓存器相关的所有宏块存储在缩放缓存器中。如果所有宏块已被存储,那么结束该流程。如果还没有存储帧中的所有宏块,那么流程进入步骤814,下一宏块被存储在帧缓存器中。要认识到在步骤814存储下一宏块能够重写不再需要的在先宏块。图16的方法图解说明使用数据的一个或多个整个片断,和数据的后续片段的一部分,避免只存储视频的整个片段的方法。另外,图16的方法简化了在不使用指针表的情况下,已按照扫描顺序方式存储的DIPS的使用。
图17的方法和图16的方法类似。步骤818和814被用于将初始宏块装入缩放缓存器。随后,在步骤820,根据存储的信息产生新的宏块。一旦产生了新的宏块,流程进入步骤830,确定帧缓存器是否已完成。如果否,那么流程进入步骤835,装入下一宏块,流程返回步骤820,产生一个新的宏块。重复该循环,直到已产生整个帧为止。
图18根据本发明的另一实施例,图解说明了产生DIP的方法。在步骤860,帧的第一宏块被识别成当前宏块。一般来说,帧的第一宏块是包含将在显示设备上显示或扫描的第一像素的宏块。通常,这将是特定帧的左上侧宏块。
在一个实施例中,根据存储在存储器中的基本流,识别特定帧的第一宏块。作为接收数字视频数据,例如MPEG流的结果,基本流通常存储在存储器中。
在步骤861,产生当前宏块的DIP。在一个实施例中,通过将DIP操作码和从存储器获得的视频数据的表现包含到DIP分组的有效负载部分中,产生DIP,这里操作码指示DIP分组包含宏块信息。在另一实施例中,可以首先处理从基本流数据获得的宏块信息,从而在宏块数据被存储到DIP中之前,产生宏块数据的特定格式。
在步骤862,当前DIP被存储到存储器中。在一个实施例中,当前DIP可被存储到与帧缓存器相关的环形缓存器中。在该实施例中,视频处理设备的后续部分易于访问DIP。在另一实施例中,DIP被存储到诸如硬盘驱动器之类系统存储资源中,以便视频处理设备以后访问。
在步骤863,当前DIP的指针被存储到DIP指针单元中。由于DIP的大小可变,因此有益的是通过得到指示当前DIP存储于何处的指针,跟踪当前DIP的位置。这允许随后无序地访问当前DIP。按照易于确定的已知方式,将指针存储在存储器的指针单元中。例如,每个指针可具有固定大小,从而导致指针之间固定的距离。当最好是只将产生特定宏块所需的那些宏块装入缩放缓存器,从而减小缩放缓存器的所需大小时,这是有利的。
在步骤840,确定图18的流程是否已完成。在一个实施例中,当通过根据特定帧的基本流产生DIP,处理了整个一帧数据时,或者当不存在要处理的其它数据时,图18的流程结束。如果所述处理结束,那么流程终止,否则流程进入步骤864。
在步骤864,帧的下一宏块被识别为当前宏块。在一个实施例中,下一宏块是按照扫描顺序的下一宏块。在另一实施例中,下一宏块是预期要访问的下一宏块。例如,要访问的下一宏块可以是按照扫描顺序的下一宏块。
图19图解说明根据本发明一个具体实施例的另一方法。具体地说,在步骤851,按照第一顺序存储一组可变大小的DIP。第一顺序可由扫描顺序代表,由缩放顺序代表,或者由任意其它排序代表。
随后,在步骤852,按照不同于第一顺序的第二顺序访问存储的DIPS。例如,如果在步骤851中按照扫描顺序存储DIPS,那么在步骤852,可按照缩放顺序访问DIPS。如前所述,通过获得具有指示每个DIP存储在存储器中何处的条目的指针表,能够按照不同的顺序访问DIPS。于是,如果按照第一顺序,例如缩放顺序存储DIPS,那么将能够无序访问DIPS,而不必解析多个DIPS,以确定特定的DIPS始于何处。在所有只将产生新的特定宏块所需的那些宏块存储在缩放缓存器中的那些实施例中,实现图19中图解说明的具体实施例的实施例理应是有利的。
参见图3,位操作器335与通用数据处理器330耦接。在一个具体实施例中,通用数据处理器330是集成到作为这里描述的专用集成电路(ASIC)一部分的半导体器件上的微处理器/微控制器核心。同样地,位操作器335被集成到ASIC上,并且可由处理器330访问,以便支持数据的位操作。
在一个操作实施例中,处理器330将读取请求提供给微控制器340。处理器330能够响应各种情形,包括当请求位于新地址的数据;在位操作器中缓存的数据达到预定水印时;以及当处理器330确定存在于位操作器335中的数据的数量小于预定字节数时,产生读取请求。在一个实施例中,通过读取与位操作器相关的寄存器,处理器330能够确定位操作器中可用数据的数量。在另一实施例中,通过从位操作器接收指示特定数量的数据已被使用的中断,处理器330能够确定位操作器中可用数据的数量。
在图解说明的实现中,处理器330请求的所有数据通过位操作器335被返回。注意在其它实施例中,处理器330能够向存储器控制器340指示,哪些数据将通过位操作器335返回,哪些数据将直接返回给处理器330。如图所示,通过总线,例如专用总线,读总线或读/写总线,数据被返回给位操作器335。
在一个备选操作实施例中,位操作器335能够与处理器330连接,从而它自己的存储器控制逻辑电路能够向存储器控制器340请求数据。
位操作器335接收的数据随后可被处理器330顺序访问。在一个实施例中,通过读取与位操作器335相关的寄存器,处理器330访问所述数据。例如,位操作器335可具有一组寄存器,所述一组寄存器返回从1到N的特定位数,这里N是处理器330读取总线的总线大小。另外,位操作器可具有一个位偏移量寄存器,位偏移量寄存器指示要返回的数据的第一位的位置。在另一实施例中,通过提供指示数据大小的控制信号,并提供恰当的控制信息,可从位操作器获取数据。
图20图解说明位操作器335的一个具体实现,位操作器335包括线路缓存器910,位存取控制器905,寄存器930和中断逻辑电路920。
在一个实施例中,线路缓存器910是充当先进先出缓存器(FIFO)的环形缓存器,存储通过存储器控制器340从存储器返回的数据。在一个实施例中,接收的数据具有根据来自存储器的数据总线的大小测定大小的字。例如在存储器支持32位字的情况下,线路缓存器能够接收32位的数据字。在另一实施例中,数据总线的大小以通用处理器330的数据总线的大小为基础。
位存取控制器335接收来自处理器330的关于特定数据的请求,并通过处理器的数据总线提供所请求的特定位。注意处理器335和位操作器335之间的数据总线的大小可不同于存储器和位操作器之间的数据总线的大小。在图解说明的例子中,处理器330的数据总线是16位总线。根据来自处理器330的请求,将返回1~16位的数据。注意当小于最大数目的数据位被返回给处理器330时,根据预定设置(它可以是固定或可变设置),可用1或0填充未使用的位。
寄存器930可被处理器330访问,在操作上与位存取控制器905和线路缓存器910耦接。在一个实施例中,如前更详细所述,处理器330能够监视位操作器335的状态,控制位操作器335,并通过访问寄存器930,从位操作器335获得数据。
中断逻辑电路920被用于跟踪位操作器335中可用数据的数量。在一个实施例中,每次使用线路缓存器910中预定数量的数据时,向处理器330提供一个中断。在另一实施例中,通过对寄存器组930的一个寄存器编程,以指示每次从线路缓存器910读取特定数目的数据时,应产生一个中断,用户可选择预定数量的数据。例如,寄存器可被编程为监视8位、16位、32位、64位或128位数据已被使用。在另一实施例中,存储在线路缓存器中的数据的当前字节的总数被存储在寄存器组930的一个寄存器中。
通过向处理器330提供监视线路缓存器中可用数据的数量的途径,处理器330能够向存储器控制器340发出存储器访问请求,从而确保数据被存储在位操作器中。另外,通过向处理器330提供监视线路缓存器中可用数据的数量的途径,处理器330能够确保在数据请求被发送给位操作器335之前,数据适用于高速缓存存储器。这允许处理器330延迟给位操作器335的数据请求,除非确保对位操作器的读取不会停止将被高速缓存的数据存取请求。
图21更详细地图解说明了图20的各个部分,包括寄存器组930和线路缓存器910。
寄存器组包括多个寄存器,包括规定线路缓存器存储单元存在的地址范围的栈顶寄存器和基址寄存器。尾部寄存器指向数据将被访问的线路缓存器的下一有效线路。注意指针可指示数据将被访问的线路缓存器的实际线路,或者线路缓存器的某一线路,所述某一线路偏离数据将被访问的线路缓存器的实际线路。
位偏移寄存器指示相对于要访问的下一组位的第一位的偏移量。例如,图21指示指向位3的位偏移指针。位偏移值指示的位将是由位操作器输出左对齐的位。注意,在备选实施例中,返回的位可被右对齐。
水印寄存器存储指示何时需要将另外的数据装入线路寄存器的值。水印值可指示分别与头部或尾部指针相比,确定数据何时被访问的与尾部或头部指针的偏移量。另一方面,水印值可指示与尾部指针的位置相比,确定数据何时被访问的固定位置。不同的实施例使用水印启动中断处理器330的过程,或者允许处理器330读取水印和其它寄存器,以确定另外的数据何时将被装入位操作器中。
如前所述,线路缓存器计数寄存器能够存储指示与线路缓存器相关的有效数据的数量的值。例如,线路缓存器计数寄存器能够指示存储在还要被访问的线路缓存器910中的字节的数目。
图22图解说明表示经过位操作器335的功能数据流的方框图。存储单元955存储大小至少为处理器330的数据总线大小的2倍的数据。由于将被提供给处理器330的数据字的第一位可被定位于任意位单元,因此要提供的字可被定位于下面的两个当前字内。多路复用器950被用于响应从存储单元955的一个字转变到下一字的位偏移值,将下一字装到存储单元955。注意在图解说明的实施例中,多路复用器955的输出是16位。要认识到可以使用另外的逻辑电路(未示出)将下一16位提供给多路复用器950。
图23以方框图的形式,图解说明了更新位偏移值的一个具体实施例。该实施例图解说明接收当前位偏移值的数值和要读取的位的数目大小的模加法器。加法器的输出提供新的位偏移值。
移位器960根据位偏移量,对准存储在单元955中的位值,从而移位器960输出的数据的最左侧位是由位偏移值指定的那些位。屏蔽器(mask)962用0或1填充未被数据请求明确请求的那些位。例如,在一个实施例中,如果数据的3位被请求,那么它们将被左对齐,而屏蔽器将用0填充右侧的13位。
在本发明的一个实施例中,响应GET_BIT(X)函数访问位操作器335,这里X规定要返回的位数。代替使用内部寄存器和处理器操作,处理器330访问对应于位操作器335的寄存器的特定地址单元。例如,可使用16个特定的地址单元(寄存器)实现16个命令GET_BIT(1)~GET_BIT(16),这里位操作器335返回请求数量的数据,并恰当地更新寄存器,包括位偏移值,所述位偏移值被递增读取数据的数量。在另一实施例中,可向位操作器提供其它命令,位操作器访问特定数目的位,但是并不递增位偏移寄存器或尾部寄存器。例如,在一个实施例中,在不递增尾部寄存器的情况下,可访问整个字的数据。
在前面说明的实施例中,数据指令分组被用于将宏块数据发送给变码器350。例如,源宏块信息数据可作为DIP的一部分在变码器350被接收。参见图3,作为媒体数据流310一部分的视频数据(即源运动矢量和量化信息)在设备303被接收,并被存储在设备存储器390中,以便进一步处理。随后,系统303检索存储的数据,包括源运动矢量,产生将由变码器250使用的DIP。在一个实施例中,DIP在变码器350被接收,控制解码和编码功能的操作。在一个实施例中,第一DIP包含解码器用于产生源像素数据的源宏块信息,第二DIP包含编码器用于允许按照2001年3月27日提交的申请号09/819147的同时待审专利申请“Device and Method for Compression of a VideoStream”(该专利申请作为参考包含于此)中所述那样,执行运动矢量预测的源信息。
当运动矢量和量化信息作为DIP的一部分被传送时,特定宏块的宏块信息数据可在存储器控制器330和设备存储器390之间传送多达7次。当最初收到宏块信息数据时,传送第一次,当被检索以便装配解码器DIP时,传送第二次,当被检索以便装配编码器DIP时,传送第三次,当存储解码器DIP时,传送第四次,当存储编码器DIP时,传送第五次,当解码器访问解码器DIP时,传送第六次,当编码器访问编码器DIP时,传送第七次。这里说明本发明的一个备选实施例,该备选实施例减少在存储器控制器340和设备存储器390之间传送宏块信息的次数,从而减少存储带宽的数量。在图24-29中描述了提高存储带宽利用率的这种备选实施例。
图24图解说明描述本发明的一个具体实施例的方法。参考图3、25-27说明图24的方法,图25以方框图的形式图解说明的相互重叠的源宏块和目的宏块的视频帧,图26以方框图的形式图解说明与图24的方法相关的数据的内存映像。
在图24中图解说明的方法的步骤1010,接收源视频信息。参考图3,源视频信息是媒体数据流310的一部分。在一个实施例中,源视频信息包含宏块信息,例如与MPEG型信息相关的宏块信息。图25图解说明用轻实线绘制的源帧,所述源帧具有构成X×Y阵列的多个宏块,这里X是表示具体宏块的数字,Y是代表特定一行宏块的数字。例如,源宏块(1,2),也称为SMB(1,2)是存在于源帧的列1和行2的源宏块。
在步骤1012,存储源视频信息。就这里的具体实施例来说,公开内容将集中于源视频信息的宏块信息部分。图26图解说明存储源数据阵列的内存映像。在一个实施例中,源数据阵列中的每个节点包括对应宏块的特定宏块配置数据(MBCONFIG),以及与该特定宏块相关的宏块信息。参考图3,源视频信息可存储在存储器390中。
存储在MBCONFIG字段中的宏块配置数据包括和特定宏块相关的各种信息。例如,MBCONFIG字体能够指示是否将利用正向预测,反向预测,或者正向预测和反向预测,处理运动补偿操作。另外,MBCONFIG字体能够存储指示运动矢量的第一或第二最低有效位是否识别要使用的半像素信息的数据,可包括间距指示符的值,以便指示如何访问源运动矢量阵列中的下一节点,以及与对接收的源视频解码或编码相关或者有用的任意其它类型的信息。
在步骤1014,接收目的图像信息。通常,目的图像信息包括目的图像的分辨率信息。图25图解说明一个目的帧,参见重叠在源帧上的粗体虚线。目的帧具有排列成M×N阵列的多个宏块,这里M是代表目的帧中的一列宏块的数字,N是代表目的帧中一行宏块的数字。例如,目的宏块(1,2)或DMB(1,2)是存在于目的帧的列1和行2的目的宏块。
在步骤1016,根据目的图像信息和源图像信息,产生索引表。具体地说,可确定为了产生每个目的宏块,需要访问哪些源宏块。例如,当将相对于源图像按比例缩小目的图像时,如图25中所示,来自源帧的多个宏块包含为了产生每个目的宏块,解码器所需的信息。例如,为了产生目的宏块(0,0),宏块(0,0)是图26的阵列的左上侧目的宏块,解码器/编码器需要源宏块SMB(0,0),SMB(0,1),SMB(1,0)和SMB(1,1)的源宏块信息。需要这四个宏块,因为目的宏块包含来自这些宏块中每个宏块的至少一些数据。
根据宏和目的图像分辨率信息,产生具有多个条目的索引表,每个条目具有先前在步骤1012存储的宏块的源运动矢量和量化信息的指针。相对于其它索引表条目排列索引表中的条目,以致当按照预定方式,例如从第一条目到最后条目访问索引表时,条目内的指针可被用于按照解码器和编码器产生目的宏块信息所需的顺序,访问在步骤1012存储的源运动矢量。
在步骤1016产生的索引表被存储在存储器中。参见图26,第一宏块信息(包括运动矢量和量化信息)索引表包括POINTER 1~POINTER LAST,这里POINTER LAST指示为了完成视频数据的特定帧的产生,需要寻址的源宏块的最后运动矢量。参见图25的实施例,可看出每个目的宏导体需要四个源宏块的数据,于是,图26的索引表1中条目的总数为M×N×4。
除了包含特定源节点的指针之外,索引表条目还包括指示与要产生的特定目的宏块相关的最后源宏块的字段。该最后源宏块指示符可被解码器或编码器用于确定何时收到足以产生目的宏块的足够源数据。
图27以表格形式,图解说明了具体索引表的内容的表现。图27的第一列表示具体索引表内的条目位置,第二列表示条目指针指向哪个目的宏块信息,第三列表示哪些条目对应于产生新的目的宏块所需的最后源宏块信息。列3中的“1”表示该条目是产生特定目的宏块所需的最终源宏块。
在一个实施例中,条目位置1对应于图26中图解说明的源数据阵列的第一项,并包含POINTER1。要注意的是特定的源宏块通常被索引表的一个以上的条目引用。例如,在图27中,条目2和条目5都指向源宏块SMB(0,1)。这是因为源宏块SMB(0,1)包含目的宏块DMB(0,0)和DMB(0,1)需要的数据。
在步骤1018,产生引用索引表的一个条目的一个或多个数据指令分组。通常,该DIP将引用索引表中,解码器和编码器用于访问数据并产生目的宏块的第一条目。注意,如果存在多个目的地目标,那么可产生并存储另外的索引表。通过每次存储宏块信息数据,并产生解码器和编码器通过其能够按照特定顺序访问矢量的索引表,和存储器必须为正在产生的每个目的图像存储两组DIP的实施例相比,减小了存储带宽。
图28图解说明根据本发明的另一方法。在步骤1050,访问第一索引表。如前所述,该索引表被这样存储,以致索引表的顺序指示为了产生目的宏块,需要被访问的特定宏块信息,例如某一宏块信息的顺序。
在步骤1052,根据第一索引表条目的顺序,按照第一顺序访问多个源宏块信息。参见图27,根据存储在INDEX TABLE1的条目内的指针值,访问第一批多个源宏块信息。在步骤1054,根据在步骤1052获得的数据,产生特定的图像数据。在一个实施例中,解码器利用获得的宏块信息,产生源像素组。在另一实施例中,变码器的编码器部分根据在步骤1052获得的数据,产生估计的运动矢量。
像素组和估计的运动矢量的产生通常与源像素组的产生同步实时进行。注意同步实时意味着通过利用独立的处理模块,满足系统的实时要求,这两个功能能够在时间上同步进行(在完全相同的时间),或者通过利用一个或多个处理模块,这两个功能能够顺序进行,从而处理模块足够快地实现这两个功能,以适应取决于这两个结果的完成的应用的实时要求。
例如,视频应用的实时同步意味着足够快地产生来自解码器的源像素和来自编码器的估计运动矢量,以便用于以所需的帧显示速率产生目的宏块。例如,特定的实时显示速率可以是每秒20、30或60次。
对于第二目的系统来说,步骤1056、1058和1060类似于步骤1050、1052和1058。例如,两个监视器能够接收源图像的表现。要认识到根据该具体实施例,只将附加源数据,即源宏块信息的一个副本存储在存储器中,以便支持一个或多个目的图像。
应注意的是,对于指定图像来说,索引表通常是静态的,因为源图像和目的图像之间的缩放很少发生变化。通过使用固定大小的节点存储源数据,新的源帧的每个宏块可被存储在和前一组宏块相同的宏块覆盖范围(footprint)中,从而在不发生变化的情况下,允许使用相同的索引表访问多帧的宏块数据。
图29图解说明了根据本发明的具体系统。在控制器部分1120接收视频源数据,控制器部分1102负责解析来自输入源的数据,并且至少将一部分源宏块信息存储在存储器中。例如,控制器1102负责存储在图26中图解说明的源数据阵列信息。注意由于根据索引表条目中的指针值,单独访问包含宏块信息的节点,于是所述节点不需要被存储为阵列的形式。在一个实施例中,利用处理器330,可用软件或固件实现控制器1102。
控制器1102与存储器控制器1104连接,存储器控制器1104与存储器1111连接,以便存储该数据。另外,控制器1102从视频源获得信息,确定接收的源视频图像的尺寸。源视频图像的尺寸指示用于表现每个源帧的分辨率和/或宏块的数目。源图像尺寸被存储在部件915,它可以是存储单元,例如寄存器或存储器1111的一部分。另外,第一目的图像尺寸被存储在部件1116中,第二目的图像尺寸被存储在部件1117中。目的图像尺寸指示编码器1106产生的理想输出图像的分辨率。为了便于说明,将只引用存储在部件1116中的第一目的图像尺寸。另外,要认识到,如果理想的是产生两个以上的目的图像,那么可包括两个以上的目的图像尺寸部分。在一个实施例中,控制器1104对应于如图3中所示的存储器控制器340。类似地,存储器1111对应于特定实施例中的设备存储器390。
索引表发生器1109接收或者以其它方式获得存储在1115中的源图像尺寸和存储在1116中的目的图像尺寸。根据源图像尺寸和目的图像尺寸,索引表发生器将产生具有如前所述格式的索引表。存储器控制器1104协调将发生器1109产生的索引表存储到存储器1111中。在一个实施例中,通过用软件或固件执行代码,可由处理器330实现索引表发生器1109。
编码器1106随后通过参考索引表内特定条目的指针,使用存储器控制器1104检索存储在存储器1111的源宏块信息。按照类似的方式,解码器也可访问存储在存储器11 11的源宏块信息。注意编码器和解码器可被设计成允许对存储器1111的公共读取获得特定的运动矢量。另外,编码器和解码器能够共享公共高速缓存存储器,以便减小存储器总线上的活动。在一个实施例中,编码器1106可由一部分压缩部件365(图3)实现,解码器1107可由一部分解压缩部件355实现。
在前面的详细说明中,参考了构成本发明一部分的附图,附图中举例表示了可实践本发明的具体优选实施例。足够详细地描述了这些实施例,以使本领域的技术人员能够实践本发明,显然可以利用其它实施例,并且在不脱离本发明的精神或范围的情况下,能够做出逻辑、机械、化学和电学变化。为了避免对于使本领域的技术人员能够实践本发明来说不必要的详细,说明省略了本领域技术人员熟知的一些信息。此外,本领域技术人员易于构成包含本发明教导的许多其它变化的实施例。因此,本发明并不局限于这里陈述的具体形式,相反,本发明意图覆盖能够合理地包括在本发明的精神和范围内的所有这种替换、修改和等同物。于是,前面的详细说明不是对本发明的限制,本发明的范围只由附加的权利要求限定。
权利要求
1.一种方法,包括下述步骤访问第一索引表;在视频解码器,按照第一顺序访问第一批多个宏块信息,以产生第一解码后的图像,其中所述第一顺序基于所述第一索引表,所述第一批多个宏块信息与源宏块相关;访问所述第一批多个宏块信息,以产生第一估计的目的运动矢量;和其中所述宏块信息包含运动矢量和量化信息。
2.按照权利要求1所述的方法,还包括下述步骤根据所述第一解码后的图像和所述估计的目的宏块信息,产生编码后的目的视频图像。
3.按照权利要求1所述的方法,其中所述第一索引表包括多个条目,所述多个条目中的每个条目包含保持指示源宏块信息的位置的值的指针部分,以及保持指示所述多个条目中的一个条目是否是与所述第一目的宏块信息相关的最后条目的值的目的宏块部分的尾部。
4.按照权利要求1所述的方法,其中所述多个条目中的每个条目具有预定大小。
5.按照权利要求4所述的方法,其中每个条目的预定大小相同。
6.按照权利要求1所述的方法,其中相对于所述多个条目中的每个其它条目,排列所述多个条目中的每个条目,从而指示所述第一顺序。
7.按照权利要求1所述的方法,还包括下述步骤产生第一目的宏块的第一估计宏块信息,其中所述第一目的宏块信息至少基于所述第一批多个宏块信息的一部分,所述第一目的宏块可相对于源宏块而被按比例缩小。
8.按照权利要求5所述的方法,其中所述第一索引表包括多个条目,所述多个条目中的每个条目包含保持指示源宏块信息的位置的值的指针部分,以及保持指示所述多个条目中的一个条目是否是与所述第一目的宏块信息相关的最后条目的值的目的宏块部分的尾部。
9.按照权利要求8所述的方法,其中相对于所述多个条目中的每个其它条目,排列所述多个条目中的每个条目,从而指示所述第一顺序。
10.按照权利要求9所述的方法,其中所述多个条目中的每个条目具有预定大小。
11.按照权利要求10所述的方法,其中每个条目的预定大小相同。
12.按照权利要求7所述的方法,还包括下述步骤访问第二索引表;在视频解码器,按照第二顺序访问所述第一批多个宏块信息,以产生第二解码后的图像,其中所述第二顺序基于所述第二索引表,所述第一批多个宏块信息与源宏块相关;访问所述第二批多个源宏块信息,以产生第二估计目的宏块信息。
13.按照权利要求10所述的方法,还包括下述步骤根据所述第一估计目的矢量产生第一宏块,根据所述第二估计目的矢量产生第二宏块,所述第一和第二宏块将被实时地同步显示。
14.一种方法,包括下述步骤存储第一批多个源宏块的每个源宏块的视频源宏块信息;确定具有多个条目的索引表,所述索引表基于视频源分辨率和视频目的分辨率,其中所述索引表的对应条目引用每个宏块的每个源宏块信息的位置;和存储所述索引表。
15.按照权利要求14所述的方法,还包括下述步骤确定将由视频变码器的一部分处理的数据指令分组,其中所述数据指令分组用以识别所述索引表的位置。
16.按照权利要求14所述的方法,其中所述视频变码器的一部分是视频解码器部分。
17.按照权利要求14所述的方法,其中所述视频变码器的一部分是视频编码器部分。
18.按照权利要求14所述的方法,其中所述视频变码器的一部分是视频编码器部分和视频解码器部分。
19.按照权利要求14所述的方法,其中所述索引表的每个条目具有相同大小。
20.按照权利要求14所述的方法,其中所述索引表包含用以指示与目的宏块相关的索引表的一部分的宏块指示符的尾部。
21.按照权利要求20所述的方法,其中所述宏块指示符的尾部被存储为索引表条目的字段内的数值。
22.一种系统,包括接收源视频数据的第一输入端口;与所述第一输入端口耦接、用以确定对应于所接收的源视频数据的宏块信息数据的控制器部分,其中所述宏块信息包含运动矢量和量化信息;与控制器部分耦接、用以存储对应于所述源视频数据的多个源宏块信息的第一存储器控制部分;和耦接地用于接收目的图像的尺寸指示符,并产生索引表的索引表发生器,其中所述索引表识别将用于产生第一目的源矢量的多个源宏块信息的第一部分,所述索引表基于目的图像的尺寸指示符。
23.按照权利要求21所述的系统,还包括耦接地用于根据索引表条目,检索源宏块信息的第二存储器控制部分;与所述第二存储器控制部分耦接,以根据所检索的源宏块信息产生目的矢量的编码器部分。
24.按照权利要求21所述的系统,其中利用通用处理器核心实现所述索引表处理器。
全文摘要
公开一种处理通过媒体通道接收的视频数据的系统和方法。所述方法包括利用索引表引用存储的视频数据,包括运动矢量,从而变码器的编码器和解码器能够高效访问存储的视频数据,解码器产生源像素图像,编码器根据存储的运动矢量数据,产生估计的运动矢量。
文档编号H04N7/50GK1615653SQ02827338
公开日2005年5月11日 申请日期2002年11月7日 优先权日2001年11月21日
发明者尹德拉·莱克索诺 申请人:Vixs系统公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1