具体实施方式
在以下描述中,为了说明的目的,对特定细节进行了阐述,以提供本发明的理解。然而,本领域技术人员将明白的是,可以在没有这些细节的情况下实施本发明。此外,本领域技术人员将认识到可以以各种方式实现下述本发明的实施方案,所述方式包括软件、硬件或固件或其组合。因此,本文所述的附图用以说明本发明的特定实施方案,意在避免模糊本发明。
框图中所示的组件或者模块用以说明本发明的示例性实施方案,意在避免模糊本发明。在整个该论述中还应该理解,组件可以被描述为分离的、可以包括子单元的功能单元,但是本领域技术人员将认识到,各个组件或者其部分可以被划分为分离的组件,或者可以被整合在一起,包括整合在单个系统或者组件内。
此外,附图内的组件之间的连接的意图不在于限于直接连接。相反,这些组件之间的数据可以被修改、重新格式化或者以其他方式通过中间组件改变。此外,可以使用附加的或者更少的连接。还应该指出,术语“耦合”或者“以通信方式耦合”应该被理解为包括直接连接、通过一个或更多个中间装置的间接连接和无线连接。
本说明书中“一个实施方案”、“优选实施方案”、“实施方案”的指代表示结合实施方案描述的特定特征、结构、特性或者功能包括在本发明的至少一个实施方案中,并且可以包括在多于一个实施方案中。在本说明书中各个地方的短语“在一个实施方案中”、“在实施方案中”不必全都指代相同的一个实施方案或者多个实施方案。
本发明涉及一种用在视频编码器和/或解码器中以提高视频编码器和/或解码器的效率的分布式存储器架构。与使用单个存储器来储存视频压缩过程期间的数据的常规视频编解码器相反,分布式存储器架构提供层次结构的多个存储器装置,这些存储器装置储存各个处理部件执行视频压缩过程的各个步骤所需的数据。通过使用分布式架构,更少的数据移动穿过单个存储器瓶颈。结果,使用更少的时钟周期来执行相同量的处理。结果,由于单个存储器瓶颈分散在各个存储器装置上,所以在分布式存储器架构中可以减小时钟频率。更低的时钟频率导致视频编码器和/或解码器的功耗更小。
在实施方案中,本发明的分布式存储器架构包括在视频编码器和/或解码器的集成电路实现中实现的水平高速缓存和垂直高速缓存,所述水平高速缓存和垂直高速缓存储存在视频压缩过程期间所使用的数据。在实施方案中,垂直高速缓存和水平高速缓存为处理部件与另一个存储器装置(比如,帧储存存储器)或者另一个处理部件之间的中间存储器装置。处理部件从水平高速缓存和垂直高速缓存存取用于执行如本文进一步论述的视频压缩过程的步骤的数据。
数码相机捕捉视频数据作为个别帧(individual frames)序列。例如,许多现代相机每秒捕捉30帧视频数据。视频编码器按照相机捕捉的顺序对帧进行处理,而压缩的视频数据利用相关联的计算和传输延迟通过物理信道或者无线通信信道实时地被流处理,和/或被储存到存储器以用于稍后回放。大多数视频压缩标准(包括MPEG-2和H.264)将捕捉的视频数据转换到特定颜色空间(例如YCrCb颜色空间)中以进行压缩。YCrCb格式将图像的颜色表示(比如,RGB颜色模型)分成三个分量,即,亮度分量(Y)和两个色度分量(Cr和Cb)。将就4:2:0YCrCb颜色空间表示来描述本发明,在4:2:0YCrCb颜色空间中,色度分量以亮度分量一半的速率被采样。然而,本领域技术人员将认识到本发明不限于4:2:0YCrCb颜色空间。
大多数视频编解码器(包括MPEG-2和H.264)将帧的每个YCrCb分量划分为更小的数据块,当压缩/解压缩视频数据时,视频编码器/解码器按照光栅扫描顺序对这些更小的数据块进行处理。图1示出捕捉的视频序列的帧0至帧n的一系列亮度分量和色度分量。在本文所论述的实施例中,假设色度分量(Cr和Cb)以亮度分量一半的速率被采样。结果,色度分量(Cr和Cb)每个具有亮度分量数据1/4的数据。如图1所示,每个帧的分量被划分为由视频编码器/解码器处理的块101。
如本领域所公知的,许多视频编解码器在宏块中处理每个帧,所述宏块包括来自亮度分量的块和来自每个色度分量的块。一般地,将以处理下述宏块来描述本发明,所述宏块包括16×16亮度像素值块、8×8Cr像素值块和8×8Cb像素值块。然而,本发明不限于这种大小的块。本领域技术人员将认识到,本发明可以与任何大小的块一起使用,所述任何大小的块包括,但不限于,4×4、8×8和16×16像素块。此外,当处理非对称块(例如,8×4、2×4等)时,也可以使用本发明。
图2是根据本发明实施方案的视频编解码器200的框图。在实施方案中,视频编解码器200根据H.264标准对视频数据进行压缩和解压缩。在实施方案中,各个处理部件和存储器部件以硬件来实现。将视频数据写入到各个存储器部件中和从各个存储器部件读取视频数据,以如本文进一步论述地用于各个处理部件。这种分布式存储器架构降低了存储器的设计要求,并且还改进了编解码器的性能。
如图2所示,根据本发明的各个实施方案使用多对象总线架构在视频编解码器200内传输不同的对象。由于各个总线被设计为特定地为独特的视频对象寻址,所以这种总线架构提供更有效的视频数据传输机制,所述视频对象包括在编解码器内被处理的视频数据、分量或者参数。相比较而言,现有技术的中央数字系统试图将视频“调适(fit)”为全系统(system-wide)数据传输和处理架构内的数据,这导致远不及最佳的编解码器效率。
参照图2,多对象总线架构包括色度总线210、亮度总线220、运动矢量总线230和参数总线240,在集成编解码器内这些总线每个对所有其他总线严谨地且自主地传输对象类型。这些不同的对象类型每个包含被对应的一个或更多个总线寻址的不同特性和处理要求。根据本发明的各种实施方案,亮度总线220传输亮度对象。亮度对象的实施例包括,但不限于,亮度像素值块以及水平亮度像素矢量和垂直亮度像素矢量。色度总线210传输色度对象。色度对象的实施例包括,但不限于,色度像素值块以及水平色度像素矢量和垂直色度像素矢量。运动矢量总线230传输运动矢量对象(即,x、y运动矢量数据)。参数总线240传输数据对象,所述数据对象可以包括结构对象(例如切片(slice))和最近邻信息。
在实施方案中,如本文进一步论述的,每个对象总线的宽度基于正在该总线上发送的对象的类型而改变。本领域技术人员将认识到这种大规模并行总线架构允许有效地将大的对象传递到处理部件。通过移除在许多现有技术系统中通常所需的格式化部件,例如串行化器/解串行化器(deserializer),这种架构显著地减小了总线接口硬件的尺寸。在实施方案中,对象总线的宽度可以对应于处理部件内的并行逻辑器件。这使得处理部件可以并行地对大量比特执行操作。为了清晰的目的,大规模并行总线可以被定义为具有128位或者更大的位宽度。
在实施方案中,对象总线的宽度至少等于为表示在该总线上发送的最大各自对象(respective objects)所需的位数。例如,H.264编码器处理下述宏块,所述宏块包括一个16×16亮度像素值块和两个8×8色度像素值块。因此,在一个实施方案中,亮度总线220发送包括16×16=256个像素值的亮度对象。以每个像素八位,亮度总线220的宽度至少为2048位宽度。根据该总线上还提供的控制信息,该总线可以更大。
在实施方案中,视频编解码器200包括对象存储器和中间存储器(或者高速缓存)。对象存储器的实施例为运动矢量存储器281、参数存储器282、上下文存储器299和网络抽象层(NAL)存储器298。在实施方案中,对象存储器为双缓冲并且储存被视频编解码器200处理的块的交替行的对象数据。例如,运动矢量存储器281可以将被视频编解码器200处理的块的最近偶数行的运动矢量储存在第一缓冲器中,并将被视频编解码器200处理的块的最近奇数行的运动矢量储存在第二缓冲器中。因此,在正被视频编解码器200处理的块的当前行的运动矢量被储存到各自的缓冲器的同时,各个处理部件可以从另一个缓冲器读取先前处理的行的运动矢量。
在实施方案中,上下文存储器299储存如本领域技术人员所公知的、在块编码期间所使用的各个块的上下文数据。在实施方案中,上下文存储器299使用上下文总线(未示出)与各个处理部件耦合。在实施方案中,通过上下文对象总线在视频编解码器200内发送上下文数据。例如,上下文对象总线可以将上下文数据传送给视频编解码器200的熵编码处理部件。在实施方案中,参数存储器282储存与帧中的每个宏块的位置相关的信息。例如,参数存储器282可以储存关于特定宏块在帧内是否具有左方、右方、上方或者下方的近邻的信息。作为另一个实施例,参数存储器282可以指示宏块是否是切片的第一个宏块等。如本领域技术人员所公知的,这些参数在每个宏块压缩期间被使用。在实施方案中,基于分辨率、切片数量和其他编码器设置为每个宏块计算这些参数,并在开始视频序列压缩之前,将这些参数储存到参数存储器282。结果,在视频序列压缩期间需要该数据的各个处理部件可获得该数据。参数存储器通过参数总线240将每个宏块的该信息传送给各个处理部件。
在实施方案中,NAL存储器289储存压缩的NAL单元,压缩的NAL单元包括不频繁改变的、关于根据H.264标准的视频序列的编码表示的信息。在实施方案中,通过NAL对象总线(未示出)在视频编解码器200内发送NAL单元。例如,NAL对象总线可以将NAL单元传送给视频编解码器200的熵编码处理部件。在实施方案中,NAL单元包括序列参数集和图片参数集。序列参数集包括如本领域技术人员所公知的与解码一系列连续编码的帧相关的信息。类似地,图片参数集包括如本领域技术人员所公知的与解码一系列帧内的一个或更多个个别帧相关的信息。在实施方案中,储存在这些集中的信息从外部源(例如,视频捕捉装置)输入到编解码器。
在实施方案中,包括序列参数集和图片参数集的NAL单元可以被包括/发送在视频序列的开头,所述参数集应用于大量包括压缩视频数据的在后NAL单元。在可替换的实施方案中,包括序列参数集和图片参数集的NAL单元可以被重复地插入到压缩的比特流中,从而提供对发送信道中的数据损失的鲁棒性。通过将压缩的NAL单元储存在NAL存储器中,这些单元可以被重复地发送,而不必以规律的间隔重新产生它们。
在实施方案中,中间存储器或者高速缓存被用于储存由一个或更多个处理部件在视频数据压缩期间所需的数据(比如,亮度对象、色度对象等)。中间存储器从其他存储器装置(比如,更大容量的帧储存存储器)或者其他处理部件接收数据。中间存储器的实施例为水平高速缓存284、垂直高速缓存283和运动高速缓存286。例如,运动高速缓存286被耦合在帧储存存储器289和运动估计处理部件250之间。通常,中间存储器储存与由处理部件执行其视频压缩过程的各自的步骤所需的、先前被编码的视频数据块相关联的数据(比如,像素值)。由于设计的分布式性质,一些中间存储器的储存容量的大小被精确确定,并被实现为仅满足准确的中间储存需求,从而导致针对功率和速度优化的相对小的电路占位(footprint)。结果,在实施方案中,可以以门级(gate level)实现中间存储器。在可替换的实施方案中,可以使用本领域所公知的易失性存储器装置来实现对象存储器和中间存储器,所述易失性存储器装置包括,但不限于,静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)等。
编码模式
在实施方案中,原始视频存储器288接收被相机传感器捕捉的原始视频数据。为了本发明的目的,假设原始视频存储器288接收根据YCrCb颜色格式被格式化的数据。当接收到原始视频数据时,视频编解码器200将它分组为用于进一步处理的多个块。例如,H.264编码器对下述宏块进行处理,所述宏块包括一个16×16亮度数据(Y)块和两个8×8色度数据(Cr和Cb)块。
在实施方案中,当原始视频存储器288接收到构造宏块的原始视频数据的足够线时,原始视频存储器288按照光栅扫描顺序将视频块输出到主高速缓存287。在实施方案中,主高速缓存287为双缓冲,从而可以在任何给定的时间将两个视频数据宏块储存在主高速缓存287中。在实施方案中,一个缓冲器储存正被视频编解码器200处理的当前块,并且第二缓冲器储存将被视频编解码器200处理的后一块。在实施方案中,各个处理部件从主高速缓存287存取正被处理的当前块,并对当前块执行视频压缩过程的各自的步骤。
在实施方案中,在当前块被视频编解码器200处理的同时,从原始视频存储器288存取将被视频编解码器200处理的后一块。通过交替地将将被视频编解码器200处理的块写入到缓冲器中,当当前块一被处理时,视频编解码器200的处理部件就可立即获得后一块。
在实施方案中,运动估计和帧间预测处理部件250通过试图在视频序列的、先前被编码和重构的帧内定位当前块的匹配块来执行视频压缩处理的运动估计步骤。本领域技术人员将认识到有许多在先前被编码的帧中定位当前块的匹配块的方式,实现方式对于本发明是不重要的。帧储存存储器289如本文进一步论述地储存从去块化滤波器285接收的先前被编码和重构的数据。在实施方案中,如本文进一步所论述的,运动高速缓存286位于帧储存器289和处理部件250之间,并储存从帧储存存储器289接收的一组先前被编码和重构的数据,处理部件250在运动估计过程中使用这些数据。
如所示,处理部件250从主高速缓存287接收当前块的亮度对象和色度对象,并从运动高速缓存286接收先前被编码和重构的亮度对象和色度对象。在实施方案中,处理部件250将当前块的亮度对象(比如,亮度像素值块)与从运动高速缓存286存取的一个或更多个亮度对象进行比较。如果匹配块被定位,则运动估计处理部件250产生如本领域所公知的以参考标识(reference)识别匹配块的运动矢量。处理部件250的帧间预测部分使用运动矢量和从运动高速缓存286接收的各自的亮度对象和色度对象(包括来自先前被编码的帧的匹配块)来如本文进一步论述地产生预测的亮度对象和/或色度对象。处理部件250在总线230上将运动矢量输出到运动矢量存储器281,并将预测的亮度对象和色度对象输出到复用器265。在实施方案中,运动估计处理部分和帧间预测部分可以被实现为分离的处理部件。
在实施方案中,帧内预测处理部件255与运动估计和帧间预测处理部件250并行操作。帧内预测处理部件255执行视频压缩过程的帧内预测步骤。帧内预测处理部件255如本领域公知的那样分别使用来自同一帧内的相邻亮度块和色度块的亮度像素值和色度像素值,来产生正被视频编解码器处理的当前块的一个或更多个亮度预测块和色度预测块。如所示,处理部件255从水平高速缓存284和垂直高速缓存283接收亮度对象和色度对象。在实施方案中,从垂直高速缓存283接收的亮度对象和色度对象包括来自同一帧中位于当前块左方的一列像素值的像素值,并且从水平高速缓存284接收的亮度对象和色度对象包括来自同一帧内位于当前块上方的一行像素值的像素值。
提供复用器265或者其他切换装置,所述复用器265或者其他切换装置基于某些标准从运动估计和帧间预测处理部件250或者帧内预测处理部件255选择亮度对象和色度对象。在一个实施方案中,该选择过程基于处理部件250是否能在限定的时间段内成功定位参考帧中的匹配块。例如,如果及时识别出匹配块,则来自处理部件250的帧间预测部分的预测的亮度对象和色度对象通过复用器265。如果没有及时识别出匹配块,则来自帧内预测处理部件255的预测的亮度对象和色度对象通过复用器265。如所示,预测的亮度对象和色度对象被发送到残余处理部件260,并且在被直接变换之后,被量化和缩放到逆整数变换处理部件290。编码器如本文进一步论述地使用到逆变换处理器部件290的路径来重构储存在帧储存器289中的像素值。
残余处理部件260从复用器265接收预测的亮度对象和色度对象,并通过各自的总线从主高速缓存287接收当前的亮度对象和色度对象。残余处理部件260产生残余色度对象和残余亮度对象。例如,可以通过从预测的亮度块的每个像素值在当前亮度块中的对应像素值减去该每个像素值来产生残余亮度对象。
直接整数变换处理部件262通过各自的总线从残余处理部件260接收残余亮度对象和残余色度对象。处理部件262执行视频压缩过程的直接整数变换步骤。如本领域所公知的,直接整数变换步骤将各自的残余色度对象和残余亮度对象从空间域表示变换为频域表示。
量化和缩放处理部件280通过各自的总线接收变换的亮度对象和变换的色度对象。处理部件280还接收一个或更多个量化参数作为输入。处理部件280如本领域所公知的那样使用接收的一个或更多个量化参数来执行视频压缩过程的量化和缩放步骤。被量化和缩放的亮度对象和色度对象被沿着对应的色度总线和亮度总线传输到熵编码器处理器部件275。如所示,被量化和缩放的亮度对象和色度对象也输出到复用器266来进行重构,以使得亮度对象和色度对象的重构视频数据可以如本文进一步论述地被储存到帧储存器289。
熵编码器处理部件275对接收的被变换、量化和缩放的亮度对象和色度对象以及运动矢量和参考帧索引执行视频压缩过程的熵编码步骤。熵编码器处理部件275通过其各自的总线接收被量化和缩放的亮度对象和色度对象、运动矢量、参考帧索引和其他参数(如果有的话)。例如,如果运动估计处理部件250能识别匹配块,则熵编码器将通过运动矢量总线230从运动矢量存储器281接收运动矢量,并将接收被量化和缩放的亮度对象和色度对象以及一个或更多个量化参数和其他参数。如果没有找到匹配块,则除了运动矢量之外的类似数据被发送到熵编码器,例如被量化和缩放的亮度对象和色度对象以及一个或更多个量化参数。熵编码器275如本领域所公知的那样将接收的亮度对象和色度对象的数据、运动矢量和参数压缩为可变长度代码。处理部件275将用于发送和/或储存的压缩视频数据输出到外部存储器(未示出)。
如图2所示,复用器266(或者其他选择装置)从熵解码器处理部件235接收解码的亮度和色度被变换、缩放和量化的对象。复用器266的选择基于编解码器是以编码模式还是以解码模式工作。本文对解码模式进行进一步的论述。当对视频数据进行编码时,复用器266的选择允许来自量化和缩放处理部件280的亮度对象和色度对象通过重构路径,所述重构路径包括去量化和去缩放处理部件295、逆整数变换处理部件290和去块化滤波器285。重构路径重构刚被视频编解码器200处理的亮度对象和色度对象(即,当前块),从而将重构数据储存到帧储存器289,以供运动估计和帧间预测处理部件250以及帧内预测处理部件255在处理后面的视频数据块(比如,运动补偿和帧内预测处理)时使用。在实施方案中,帧储存器289储存正被处理的当前视频帧和至少一个先前被编码的帧的重构块。
除了亮度对象和色度对象之外,去量化和去缩放处理部件295还接收一个或更多个量化参数。处理部件295如本领域所公知的那样执行接收的亮度对象和色度对象的去量化和去缩放的步骤。去量化和去缩放的亮度对象和色度对象被输出到逆整数变换处理部件290。
逆整数变换处理部件290对接收的亮度对象和色度对象执行直接整数变换的逆变换,以将视频数据重构为在残余处理部件260中计算的残余亮度对象和色度对象。逆整数变换处理部件290还如前所述地接收从复用器265输出的预测的亮度对象和色度对象。逆整数变换处理元件290将预测的亮度对象和色度对象添加到残余亮度对象和色度对象,以产生重构的亮度对象和色度对象。重构的亮度对象和色度对象被输出到去块化滤波器处理部件285。
去块化滤波器处理部件285将滤波器应用于横跨宏块的顶边界和左边界的一个或更多个边界像素,以移除在编码过程中引入的块效应,所述边界像素可选地还沿着内部块(比如,构成宏块的16×16亮度块的16个4×4块)的水平边界和垂直边界。例如,去块化滤波器可以使用帧中位于当前块左方的四列像素值(如果有的话)和该帧中位于当前块上方的四行像素值(如果有的话)来执行滤波。在实施方案中,处理部件285从逆整数变换处理部件290接收重构的亮度对象和色度对象,并从垂直高速缓存283和/或水平高速缓存284接收亮度像素矢量和色度像素矢量,所述亮度像素矢量和色度像素矢量包括来自同一帧的相邻块的像素值。去块化滤波器处理元件285将重构的且经过滤波的亮度对象和色度对象输出到如图2所示的用于储存的帧储存存储器289和垂直高速缓存283。
解码模式
当视频编解码器200接收到作为到熵解码器处理部件235的输入的压缩视频数据时,视频编解码器200作为解码器操作。在实施方案中,视频编解码器200如本文进一步论述地使用许多相同的处理部件来对压缩视频数据进行解码。
熵解码器处理部件235接收压缩视频数据作为输入,并分别将压缩数据的可变长度代码解码回被量化和缩放的变换系数的块、运动矢量、参考帧索引和/或其他参数。熵解码器处理部件235将被量化和缩放的变换系数的块输出到复用器266,并将运动矢量和参考帧索引(如果有的话)输出到运动矢量存储器281。其他参数(比如,切片头等)被输出到对用于解码压缩比特流的参数进行处理的适合的处理部件和/或控制器。
在解码器模式下,去量化和去缩放处理部件295从复用器266接收解码的亮度对象和色度对象以及一个或更多个量化参数作为输入,并对接收的亮度对象和色度对象进行去量化和去缩放。被去量化和去缩放的亮度对象和色度对象被输出到逆整数变换处理部件290。
与去量化和去缩放处理并行地,针对从熵解码器处理部件235接收的当前块产生预测块。例如,如果正被解码的当前块包括运动矢量,则处理部件250的帧间预测部分从与参考帧索引对应的参考帧接收运动矢量以及各自的亮度对象和色度对象。处理部件250的帧间预测部分产生预测的亮度对象和色度对象,并将它们输出到复用器265,复用器265使数据通过并到达逆整数变换处理部件290。或者,如果当前块包括帧内预测参数,则帧内预测处理部件255从水平高速缓存284和垂直高速缓存283接收针对相邻块的帧内预测模式以及对应的亮度矢量和色度矢量。帧内预测处理元件255产生预测的亮度对象和色度对象,并将它们输出到复用器265,复用器265使数据通过并到达逆整数变换处理部件290。
逆整数变换处理部件290对从去量化和去缩放处理部件接收的亮度对象和色度对象执行直接整数变换的逆变换,以将视频数据重构为在原始编码期间计算的残余亮度对象和色度对象。逆整数变换处理部件290还将从复用器265接收的预测的亮度对象和色度对象添加到残余亮度对象和色度对象,以产生重构的亮度对象和色度对象。
去块化滤波器处理部件285从逆整数变换处理部件290接收重构的亮度对象和色度对象,并将滤波器应用于接收的像素值,以减少如前面关于编码所论述的块效应。在解码过程期间,去块化滤波器处理部件285将重构的且经过滤波的亮度对象和色度对象输出到帧形成器(未示出),帧形成器组织输出到显示器的视频数据。
应该指出,可以将上述处理部件中的一个或更多个共同组合成执行视频压缩过程的多个步骤的单个处理部件。例如,在一个实施方案中,可以将直接整数变换处理部件262与量化和缩放处理部件280共同组合成单个处理部件。作为另一个实施例,可以将逆整数变换处理部件290与去量化和去缩放处理器部件295共同组合成单个处理部件。
本发明的分布式存储器架构提供优于常规视频编解码器的许多优点,常规视频编解码器使用单个外部存储(或者有限数量的存储器)来储存各个参考帧、运动矢量、参数和在视频序列压缩期间所需的其他数据。例如,分布式存储器架构的分离的存储器被同时访问,从而减小单个存储器架构中将会存在的瓶颈。此外,分布式存储器架构导致许多更小容量的集成的、耦合的和特制的存储器装置,而不是大容量的外部单个存储器装置。由于这些存储器不需要复杂的存储器仲裁和寻址方案,所以它们没有那么复杂,而且更快。分布式架构还允许存储器在硅上的分布式布置。这对于集成电路的布置和路由是有利的,并可以将数据布置到离目的地更近的地方。
与常规编解码器设计相比,分布式存储器架构还降低了视频编解码器的功率要求。例如,当不使用时,可以关闭更小容量的分布式存储器装置。相反,在常规编解码器中,外部存储器的整个存储器阵列必须持续上电。外部存储器还需要大量以极高频率运行的输入/输出(I/O)管脚,这导致极大的功耗。本发明的分布式存储器架构使得可以将外部存储器完全消除,并将编解码器所需的所有存储器集成在与编解码器的其余部分相同的硅片上。这种架构去掉了与外部存储器互连相关联的I/O管脚,显著地减小了功耗并且也减小了整个电路实现的总的管芯大小。
就执行计算所需的功率量而言,较旧的传统的CPU实现方式花费许多周期在提取、解码和执行指令上。例如,常规设计需要大量软件指令集和固件指令集,这些指令集用以控制和移动存储器中和外的数据并执行为执行视频压缩和解压缩中所涉及的算术所需的指令。典型的实现方式需要上千行软件代码和固件代码,扩大了用以储存、支持和执行软件指令集的实现复杂性和编解码器上的存储器占位。在本发明的编解码器架构中,大部分计算完全由通过编解码器的数据流引导。定制的硅处理部件消除了密集计算机控制的需要,并且导致功耗减小。这几乎完全消除了控制机器和执行操作通常所需的软件。
此外,复杂的算术运算全部由在所有各个处理部件内优化的大规模并行电路执行。这种大规模并行性和随后的在每个时钟周期中可获得的计算功率消除了储存重复使用的大量数据的需要,从而显著地减小了总体所需的存储器。大规模并行性还能以允许管线达到时序平衡的速率得到结果。这能实现优化性能的精细调谐操作。大规模并行性的另一个效果是缩短了计算延迟。由于视频流和音频流的延迟的绝对值和相对值,而导致视频延迟在历史上已经是个挑战。这对于实时视频应用(例如,视频会议)甚至是更重要的。推动了使视频延迟最小和同步的大型工程计划。大规模并行计算结构将延迟缩短到可忽略的值,简化了设计挑战,并改进了当应用于真实世界应用时的鲁棒性。
水平和垂直高速缓存实施方案
图5是根据本发明实施方案的用于对视频序列块执行视频压缩过程的步骤的设备500的框图。设备500包括垂直高速缓存283、水平高速缓存284和通用处理部件510。在实施方案中,处理部件510分别通过对象总线520和530与垂直高速缓存283和水平高速缓存284耦合。如前所述,在实施方案中,对象总线520和530的宽度可以根据正在该总线上发送的对象的类型和/或大小而改变。垂直高速缓存283和水平高速缓存284可以使用本领域所公知的易失性存储器装置来实现,所述易失性存储器装置包括,但不限于,静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)等。在实施方案中,由于相对小的带宽要求,垂直高速缓存283和水平高速缓存284可以在如本领域所公知的集成电路中以门级来实现。
在实施方案中,垂直高速缓存283和水平高速缓存284储存同一帧内与和正被视频编解码器处理的当前块相邻的一个或更多个块相关联的数据。在实施方案中,所述数据包括对象,所述对象包括,但不限于,像素值矢量或块、上下文信息、运动矢量或者其他压缩相关的参数。一个或更多个处理部件在对当前块执行的视频压缩过程期间使用与相邻块相关联的数据。例如,在实施方案中,垂直高速缓存283和水平高速缓存284可以储存同一帧内分别位于当前块左方和上方的相邻块的像素值。如本文进一步论述的,各自的处理部件可以存取这些像素值,以对当前块执行帧内预测处理或滤波。
在实施方案中,单个垂直高速缓存和/或水平高速缓存被用于储存被各个处理部件存取的所有数据。在可替换的实施方案中,可以为被处理部件存取的每种不同类型的数据实现分离的水平高速缓存和/或垂直高速缓存。此外,在实施方案中,多个处理部件可以通过各自的对象总线访问水平高速缓存和垂直高速缓存。
以下实施例描述这样的实施方案,在该实施方案中,如图2所示,帧内预测处理部件255被耦合,以从垂直高速缓存283和水平高速缓存284存取数据。在实施方案中,帧内预测器255使用帧内与当前块相邻的、先前被编码和重构的像素值来产生同一帧内的正被处理的当前块的预测块。在实施方案中,帧内预测器255从垂直高速缓存283和/或水平高速缓存284存取相邻像素值。例如,帧内预测器255可以从水平高速缓存284和垂直高速缓存283之一或这二者存取相邻亮度像素值和/或色度像素值,并如本文进一步论述地产生一个或更多个亮度预测块和/或色度预测块。
在实施方案中,帧内预测器255可以使用特定方式或模式来产生预测像素值块。例如,在H.264标准中,在16×16像素值块中处理帧的亮度块。该标准提供可以用于产生16×16预测块的四种帧内预测模式。另外,可以将16×16亮度块进一步划分为16个4×4像素值块。H.264标准提供可以用于产生针对16个4×4块中的每个的预测块的九种帧内预测模式。关于帧内预测模式的进一步的信息可以在H.264标准文档(推荐ITU-T H.264“Advanced video coding for generic audiovisual devices(用于通用视听装置的高级视频编码)”(03/2009))中找到,该文档通过引用被整体包括在本文中。
图3A-C示出可以用于采样4×4像素值块的三种示例性帧内预测方式(模式)。虽然就4×4块描述它们,但是所述概念易于应用于其他大小的块。本领域技术人员将认识到本发明将与使用相邻像素值来产生预测像素值块的任何帧内预测模式一起工作,而不管块的大小如何。
图3A示出位于当前4×4块上方的像素值的矢量被用于创建预测像素值块的帧内预测模式或方式。在该实施例中,图中标示为A、B、C和D的像素为同一帧中位于4×4块上方的一行中的像素。在这种预测模式下,位于每列上方的像素值被简单地整列复制,以创建预测块。因此,预测块中的左列像素值将全部具有与像素A相同的像素值。类似地,第二列的像素值将全部与像素B相同,第三列的像素值将全部与像素C相同,并且最右列的像素值将全部与像素D相同。
图3B示出位于当前4×4块左方的像素值的矢量被用于创建预测像素值块的帧内预测模式或方式。在该实施例中,图中标示为A、B、C和D的像素为同一帧中位于4×4块左方的列中的像素。在该实施例中,位于每行左方的像素值被简单地跨每行复制,以创建预测块。因此,预测块中的顶行的像素值将全部具有与像素A相同的像素值。类似地,第二行的像素值将全部与像素B相同,第三行的像素值将全部与像素C相同,并且底行的像素值将全部与像素D相同。
图3C示出第三采样帧内预测模式或方式和得到的预测块。在该预测模式下,如预测方式所示,帧内来自当前块上方的行的像素值在预测块中在从右斜向下方向上分布。这导致如图所示的预测像素值块。值得注意的是,用于创建预测块的像素值的子集全部来自当前块上方的行,但是不必全部在当前块的边界上。
在本发明的实施方案中,水平高速缓存284储存来自同一帧中位于当前块上方的一行像素值的像素值的矢量。在实施方案中,水平高速缓存284从另一个存储器装置(例如,帧储存存储器289)接收先前被编码和重构的像素值的矢量。在实施方案中,存储器控制器如本文进一步所论述地协调从帧储存存储器289到水平高速缓存284的数据传送。在实施方案中,帧内预测器255接收储存在水平高速缓存284中的像素值,并基于接收的像素值和一种或更多种预测模式产生一个或更多个预测块。
图4A是正被处理的当前块410和同一帧内位于当前块上方的一行像素值420的表示。在实施方案中,基于帧内预测器255实现一种或更多种预测方式或模式所需的像素值来确定被储存在水平高速缓存284中的像素值的子集。例如,如果帧内预测器255所使用的预测模式仅使用位于当前块正上方的像素的像素值(比如,图3A所示的预测模式),则所述子集可以包括在图4A中标示为F、G、H和I的像素的像素值。如果帧内预测器255所使用的一种或更多种预测模式需要另外的像素值,则储存在水平高速缓存284中的像素值子集可以更大,所述像素值包括例如标示为F、G、H、I、J、K、L和M的像素的像素值。在实施方案中,储存在水平高速缓存284中的像素值子集可以包括来自同一帧内位于当前块上方的一行或更多行的像素值。同样,它可以包括当前块边界左方或右方的上方一行的像素。
在实施方案中,垂直高速缓存283储存亮度像素矢量和/或色度像素矢量,所述亮度像素矢量和/或色度像素矢量包括位于当前块左方的一列亮度像素和/或色度像素(如果有的话)。本领域技术人员将认识到,位于块的左方的一列像素(如果有的话)来自被视频编解码器200处理的先前的块。在实施方案中,垂直高速缓存283从去块化滤波器285接收先前被编码和重构的像素值子集,所述去块化滤波器285为用于视频编解码器200的重构路径的一部分。在实施方案中,帧内预测器255接收储存在垂直高速缓存283中的亮度像素值和/或色度像素值,并基于接收的像素值和一种或更多种预测模式产生一个或更多个亮度和/或色度预测块。
图4B是正被处理的当前块410和同一帧内位于当前块左方的一列像素值430的表示。在实施方案中,基于帧内预测器255实现一种或更多种预测方式或模式所需的像素值来确定被储存在垂直高速缓存283中的像素值子集。例如,如果帧内预测器255所使用的预测模式仅使用位于当前块正左方的像素的像素值(比如,图3B所示的预测模式),则子集包括在图4B中标示为FF、GG、HH和II的像素的像素值。如果帧内预测器255所使用的一种或更多种预测模式需要另外的像素值,则储存在垂直高速缓存283中的像素值子集将更大。例如,如果帧内预测器255使用利用朝右斜向下方式的预测模式(在概念上与图3C所示的采样方式类似),则储存在垂直高速缓存283中的像素值子集将包括标示为BB、CC、DD、E、FF、GG、HH和II的像素的像素值。在实施方案中,储存在垂直高速缓存283中的像素值子集可以包括来自同一帧内位于当前块左方的一列或更多列的像素值。
虽然已经就帧内预测处理部件对以上实施方案进行了论述,但是本领域技术人员将认识到本发明的垂直高速缓存和水平高速缓存还可以与视频编码器和/或解码器的其他处理部件一起使用。例如,在实施方案中,水平高速缓存284和垂直高速缓存283可以分别储存多行和多列的亮度像素值和/或色度像素值,如本文进一步论述的,去块化滤波器处理部件285使用这些亮度像素值和/或色度像素值来执行视频压缩过程的滤波步骤。
在实施方案中,去块化滤波器285可以分别从水平高速缓存284和垂直高速缓存283存取用于执行滤波过程的行和列的像素值。例如,去块化滤波器285可以使用当前块和相邻块之间的每侧边界上的四个像素值来执行滤波。在该实施例中,垂直高速缓存283将储存来自左相邻块的四列像素值,并且水平高速缓存284将储存来自顶相邻块的四行像素值。
在实施方案中,垂直高速缓存283和水平高速缓存284可以储存与正被视频编解码器200处理的当前块相邻的一个或更多个块的上下文信息。在实施方案中,上下文信息基于残余的二维直接整数变换中的非零系数的数量。在实施方案中,与块相关联的上下文被估计为左相邻块中的非零系数的数量和同一帧内的顶相邻块中的非零系数的数量的平均值。在一些压缩标准(例如,H.264)中使用相邻块的上下文信息来执行如本领域所公知的基于上下文的自适应性二进制算术(CABAC)和/或基于上下文的自适应可变长度编码(CAVLC)。在实施方案中,垂直高速缓存283储存在同一帧中与当前块左方相邻的块相关联的上下文信息,并且水平高速缓存284储存与同一帧内与位于当前块上方的块相关联的上下文信息。在实施方案中,熵编码器275从垂直高速缓存283和水平高速缓存284存取一个或更多个相邻块的上下文信息,以如本领域所公知的那样对当前块执行视频压缩过程的熵编码步骤。
在本发明的实施方案中,垂直高速缓存283和水平高速缓存284包括存储器的奇数缓冲器和偶数缓冲器。在实施方案中,奇数缓冲器和偶数缓冲器储存数据,视频编解码器200的一个或更多个处理部件在压缩正被视频编解码器处理的当前块和将被视频编解码器处理的后一块时使用这些数据。在实施方案中,在从缓冲器之一读取数据的同时,将数据写入到另一个缓冲器,并且如本文进一步所论述的,该过程针对每个块在奇数缓冲器和偶数缓冲器之间交替。
例如,假设正被视频编解码器200处理的当前块为奇数编号的块。在实施方案中,奇数缓冲器储存在视频序列帧中与当前块相邻的一个或更多个块相关联的数据,该数据被一个或更多个处理部件在压缩当前块期间使用。例如,奇数缓冲器可以储存当前块上方的行的相邻亮度像素值和/或色度像素值,所述相邻亮度像素值和/或色度像素值通过帧内预测器255从奇数缓冲器被读取,并被用于如前所论述地产生当前块的一个或更多个预测块。
在实施方案中,从帧储存存储器289存取与和后一块(偶数编号的块)相邻的一个或更多个块相关联的数据,并在从奇数缓冲器读取数据的同时将该数据写入到偶数缓冲器。例如,存储器控制器(未示出)可以向帧储存存储器289请求将在偶数块的帧内预测处理时使用的、后一块上方的行的相邻亮度像素值和/或色度像素值,并在帧内预测处理部件255从奇数缓冲器读取当前块上方的行的相邻亮度像素和/或色度像素的同时将接收的像素值储存到水平高速缓存284的偶数缓冲器。类似地,当从偶数缓冲器读取数据时,从帧储存存储器289存取与和下一个奇数编号的块相邻的一个或更多个块相关联的数据,并将该数据写入到奇数缓冲器。
由于数据被存取并被储存到用于将与当前块的处理被并行处理的下一个块的各自的缓冲器,所以设计减小或消除与访问帧储存存储器289相关联的延时。这种设计的另一个优点是仅需要两个缓冲器来实现水平高速缓存284,这减小了水平高速缓存284在视频编解码器200的集成电路实现方式内的占位。
图6是用于将在对于视频序列帧的当前块和后一块的视频压缩过程所使用的数据从第一存储器储存到高速缓存的方法600的流程图。在实施方案中,第一存储器为更长期储存数据的大容量帧储存存储器,并且高速缓存为视频编码器和/或解码器内的较小容量存储器。在实施方案中,从第一存储器发送到高速缓存的数据包括对象,所述对象包括,但不限于,像素值矢量、像素值块、上下文信息、运动矢量或者其他压缩相关的参数。在实施方案中,处理部件使用发送到高速缓存存储器的数据来对帧的当前块和后一块执行视频压缩过程的步骤。在实施方案中,后一块为帧按照光栅扫描顺序的下一个块。
在步骤610中,从第一存储器接收与同一视频帧中与当前块相邻的第一块相关联的第一数据。在步骤620中,将第一数据储存到高速缓存的第一缓冲器。在实施方案中,第一数据包括来自同一帧内位于当前块上方的块的至少一行像素值的像素值。例如,帧内预测处理部件可以从高速缓存存取第一数据,以在视频压缩过程的帧内预测期间产生当前块的一个或更多个预测块。作为另一个实施例,去块化滤波器处理部件可以存取第一数据,以对当前块的顶边界进行滤波。在实施方案中,第一数据可以包括同一帧中与当前块相邻的块的上下文信息。在本实施方案中,熵编码器处理部件可以存取第一数据,以如本领域所公知的那样对当前块执行视频压缩过程的熵编码步骤。
在步骤630中,在对当前块执行视频压缩过程的同时,从第一存储器接收同一帧内与后一块相邻的第二块相关联的第二数据。在步骤640中,将第二数据储存到高速缓存的第二缓冲器。例如,在视频编解码器的处理部件从高速缓存的第一缓冲器读取第一数据的同时可以从第一存储器接收第二数据,并将第二数据储存到高速缓存的第二缓冲器。通过与当前块的处理并行地请求和储存第二数据,可以减小或者消除与访问第一存储器相关联的延时。结果,当与当前块相关联的处理一完成时,就将可获得后一块的视频压缩的至少一个步骤所需的第二数据。这提高了设计的效率和处理速度。如以上就第一数据所论述的,一个或更多个处理部件可以在后一块的压缩处理期间从第二缓冲器存取第二数据。
本领域技术人员将认识到方法600可应用于视频编码器和视频解码器。在视频编码过程期间,在对当前块执行的视频压缩过程期间从第一存储器存取第二数据,导致当前块的压缩。在视频解码过程期间,在视频压缩过程期间从第一存储器存取第二数据,导致压缩的当前块的解码。
应当注意,已经就压缩和解压缩视频数据描述了本发明。然而,本发明还可以用在利用来自同一图像的先前被编码和重构的数据来更有效地压缩图像的静态图像压缩编码器和解码器中。
本领域技术人员将意识到,前面的实施例和实施方案是示例性的,不是用于限制本发明的范围的。意图在于,对本发明的所有置换、增强、等同内容、组合和改进都包括在本发明的精神和范围内,所述置换、增强、等同内容、组合和改进对本领域技术人员来说在阅读本说明书并研究附图的基础上是显而易见的。因此,意图在于,所附的权利要求包括落在本发明的精神和范围内的这样的修改、置换和等同内容。