首页> 中国专利> 利用切片速率控制的有界率压缩

利用切片速率控制的有界率压缩

摘要

一种系统实现用于编码和解码操作的速率控制,例如,在诸如图像数据的数据片上进行的操作。该系统实现从实际缓冲器充溢度到速率控制的充溢度的变换。通过速率控制的充溢度模型,编码器和解码器响应于速率控制的充溢度而非实际的充溢充溢度调整比特分配。

著录项

  • 公开/公告号CN104718753A

    专利类型发明专利

  • 公开/公告日2015-06-17

    原文格式PDF

  • 申请/专利权人 美国博通公司;

    申请/专利号CN201380052238.2

  • 申请日2013-10-03

  • 分类号H04N19/124(20060101);H04N19/152(20060101);

  • 代理机构11240 北京康信知识产权代理有限责任公司;

  • 代理人田喜庆

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-18 09:13:55

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-11-06

    专利权的转移 IPC(主分类):H04N19/124 登记生效日:20181018 变更前: 变更后: 申请日:20131003

    专利申请权、专利权的转移

  • 2018-05-11

    授权

    授权

  • 2017-03-29

    专利申请权的转移 IPC(主分类):H04N19/124 登记生效日:20170308 变更前: 变更后: 申请日:20131003

    专利申请权、专利权的转移

  • 2015-07-15

    实质审查的生效 IPC(主分类):H04N19/124 申请日:20131003

    实质审查的生效

  • 2015-06-17

    公开

    公开

说明书

相关申请的交叉引用

本申请要求于2012年10月3日提交的临时申请序号61/709,316以及 于2013年2月14日提交的临时申请序号61/764,807的优先权,这两个申 请的全文通过引用结合于此。

技术领域

本公开涉及图像处理。本公开还涉及用于图像传输和显示的压缩和解 压缩技术。

背景技术

巨大的客户需求促使了显示器技术、图像分析算法以及通信技术的高 速发展和复杂图像显示装置的广泛应用。仅举几例,这种装置的范围从驱 动家庭影院的高分辨率显示器的DVD和蓝光播放器到也具有非常高的分 辨率显示器的现在普遍存在的智能电话和平板电脑。图像处理技术的提高 继续扩大这些装置的功能。

附图说明

图1示出了源(source)将编码数据传送给接收器(sink)的一个实 例架构。

图2为编码器的一个实例。

图3示出了并行处理架构。

图4示出了预测器和量化器的一个实例。

图5示出了实例样本位置。

图6示出了压缩样本的编码格式的实例。

图7示出了虚拟缓冲模型的一个实例。

图8示出了一个实例解码器。

图9示出了编码的实例逻辑。

图10示出了解码的实例逻辑。

图11示出了一个实例编码和解码系统。

图12示出了图片和图片参数集的一个实例。

图13示出了编码器的另一个实例。

图14示出了解码器的另一个实例。

图15示出了块搜索的样本组。

图16示出了索引颜色历史的实例。

图17示出了使用子流多路复用的切片(slice)的一部分的实例。

图18示出了子流多路分解逻辑的实例。

图19示出了子流多路复用逻辑的一个实例。

图20示出了切片定时和延迟的一个实例。

图21示出了形成9x1SAD的3x1部分SAD的实例。

图22示出了用于编码器平坦度检查的原始像素的实例。

图23示出了编码逻辑的实例。

图24示出了缓冲等级跟踪器的实例。

图25示出了可以实现切片的速率控制的编码器逻辑的实例。

图26示出了随着时间的比特轨迹的一个实例。

图27示出了偏移充溢度(offset fullness)和实际充溢度的实例。

图28示出了实例阈值范围。

图29示出了短期速率控制的一个实例。

图30示出了QP递增逻辑的一个实例。

图31示出了在解码器中的子流多路分解的一个实例。

图32示出了在解码器中的索引颜色历史逻辑。

具体实施方式

图1示出了源150通过通信链路154与接收器152通信的一个实例架 构100。源150或接收器152可以存在于操控图像数据的任意装置内,例 如,DVD或蓝光播放器、智能电话、平板电脑或任意其他装置。源150 可以包括保持虚拟缓冲器114的编码器104。接收器152可以包括解码器 106、存储器108以及显示器110。编码器104接收源数据112(例如,源 图像数据),并且可以保持预定容量的虚拟缓冲器114,以模制或模拟临时 储存压缩输出数据的物理缓冲器。编码器104还可以评估编码符号,以通 过预定的比特率进行传输。编码器104可以指定比特率,仅举两例,以每 个像素的比特为单位或者以每个时间单位的比特为单位。

例如,通过保持用于编码的比特数减去输出的比特数的累计计数,编 码器104可以确定比特率。虽然编码器104可以在将编码数据116传输给 存储器108之前,使用虚拟缓冲器114来模制数据的缓冲,但是预定容量 的虚拟缓冲器和输出比特率不必等于编码器内的任何缓冲器的实际容量 或者实际输出比特率。而且,编码器104可以响应于虚拟缓冲器的充溢度 或空虚度,调整用于编码的量化步长。下面,描述示例性编码器104和编 码器104的操作。

解码器106可以从存储器108中获得编码数据116。而且,解码器106 可以确定预定的虚拟缓冲器的容量和比特率,并且可以确定编码器104用 于编码该编码数据116的量化步长。在解码器106将编码数据116解码时, 解码器106还可以确定虚拟缓冲器114的充溢度或空虚度,并且调整用于 解码的量化步长。即,解码器106可以跟踪编码器104的操作,并且确定 编码器104所使用的量化步长。解码器106对编码数据116解码,并且将 视频数据118提供给显示器110。在一些实施方式中,在编码数据116内 没有量化步长,节省了大量带宽。下面描述解码器106和编码器104的实 例及其操作。

存储器108可以实施为静态随机存取存储器(SRAM)、动态RAM (DRAM)、固态驱动器(SSD)、硬盘或其他类型的存储器。显示链路154 可以是无线或有线连接或有线和无线连接的组合。编码器104、解码器106、 存储器108以及显示器110可以存在于单个装置(例如,智能电话)内。 或者,编码器104、解码器106、存储器108以及显示器110的任意子集 可以存在于给定的装置内。例如,蓝光播放器可以包括解码器106和存储 器108,并且显示器110可以是与蓝光播放器进行通信的分体显示器。

图2示出了编码器200的实例。编码器200对视频数据202编码。例 如,视频数据202可以采用一系列连续帧202,…,202-x的形式。帧202,…, 202-x可以采用像素分量的二维矩阵的形式,可以在任意颜色空间内表示 该形式,例如,红/绿/蓝(RGB)、YUV、亮度Y/色度蓝色Cb/色度红色 Cr(YCbCr)、亮度Y/色度橙色/色度绿色(YCoCg)、α、红色、绿色、蓝 色(ARGB)或其他颜色空间。每个像素分量可以与空间位置对应。虽然 矩阵可以重叠,以形成图片,但是在矩阵内的每个像素分量不必与在其他 矩阵内的像素分量共同定位。

可以使用包括预定数量的比特(例如,每个像素分量具有8、10或 12比特)的值,编码每个像素分量。作为实例,编码可以使用10比特YCbCr 4:2:2、8比特YCbCr 4:2:2、10比特YCbCr 4:4:4、8比特YCbCr 4:4:4、8 比特ARGB 32或8比特RGB 24编码。编码器200可以按照光栅扫描顺 序接收帧的像素分量:从左到右、从上到下。在某些实现方式中,视频编 码器200可以以预定速率接收像素分量。预定速率可以与每秒显示速率的 实时帧对应。

视频编码器200可以包括输入、预测器&量化器204、映射和可变长 度编码器(VLC)206、速率控制器208、速率缓冲器210以及存储器(例 如,DRAM)212。视频编码器200接收和编码像素分量。虽然表示进入 视频编码器200内的像素分量的比特数可以恒定(每个像素分量),但是 表示每个编码的像素的比特数可以显著改变。编码器200可以通过减小量 化步长来增大表示编码像素的比特数,或者通过增加量化步长来减少比特 数。

输入、预测器&量化器204预测并且量化像素分量,产生量化残差。 在某些实现方式中,输入、预测器&量化器204可以由相同帧(例如,202-0) 内的先前编码并且重构的像素分量预测像素分量。映射器和可变长度编码 器206编码量化残差,产生编码比特。

输入、预测器&量化器204可以使用预定的初始量化步长来量化预定 量的数据,例如,视频像素数据。映射和可变长度编码器206向速率控制 器208发信号,该速率控制器反过来指导输入、预测器&量化器204递增、 递减或不改变量化参数,在下面更详细地进行描述。

映射和可变长度编码器206可以使用其自然数2的补码的二进制值编 码量化的样本值。映射和可变长度编码器206用于编码每个值的比特数量 可以由相同像素分量的编码值和与每单位样本相关联的前缀值的最近历 史的组合动态地确定。

速率控制器208确定递增、递减还是不改变量化参数。速率控制器 208可以执行量化步长分析,例如,通过模拟或模制以预定比特率评估的 预定容量的缓冲器。模制的缓冲器可以称为虚拟缓冲器。如果虚拟缓冲器 变满,那么速率控制器208可以增大或递增量化步长。如果虚拟缓冲器变 空,那么速率控制器208可以减小或递减量化步长。下面相对于切片的速 率控制,描述其进一步的方面。

速率控制器208可以确定虚拟缓冲器的充溢度,例如,通过对用于编 码在给定数量的输入样本上接收的输入的比特计数然后减去每个样本的 的预定比特率(以比特为单位)与输入样本的数量的乘积。输入样本的数 量可以是一个样本。

解码器可以从初始量化步长开始对编码数据解码。在解码器对编码数 据解码时,解码器还可以确定虚拟缓冲器的充溢度。通过观察用于编码与 输入样本的数量对应的量的解码数据的比特量,解码器可以确定充溢度或 空虚度。然后,解码器可以确定在编码器200处做出的量化步长决定。因 此,编码器200不需要将量化步长显式(explicitly)传输给速率控制器或 解码器内的任何其他逻辑。

图3示出了并行处理架构300。多路分解器302接收输入像素分量 304,并且将每个像素分量分成组成部分,例如,α306、红色308、绿色 310以及蓝色312。预测&量化块314、316、318以及320与像素分量的一 个特定组成部分相关联。可以具有任何数量的这种块,这些块可以并行操 作。在具有四个像素分量的格式的情况下(例如,ARGB),每个预测&量 化块处理特定的分量部分。在架构300处理具有比预测&量化块更少的组 成部分的像素分量时,然后,一些预测&量化块不需要操作,用于处理那 些像素分量。预测&量化块314–320可以将量化残差提供给一个特定的分 量映射器322、324、326以及328。分量映射器322–328还可以并行操作。

映射器322–328将映射的量化残差'E'提供给多路复用器330。多路 复用器330将映射的量化残差'E'多路传输到提供给可变长度编码器334的 残差流332内。或者,可以具有与每个分量映射器相关联的可变长度编码 器,并且多路复用器330可以多路传输由多个可变长度编码器输出的可变 长度编码的量化残差。

图4示出了预测器和量化器400的实例。预测器和量化器400包括缓 冲器402、第一延迟逻辑404(实现(例如)6个样本延迟)、预测引擎406 以及第二延迟逻辑408(实现(例如)3个样本延迟)。缓冲器402可以储 存前一个重构图像行。预测引擎406接收当前像素分量'x'、来自第一延迟 块404的前一行重构像素分量'w'、't'、's'、'g'、'c'、'b'、'd'以及'h'以及来自 第二延迟块408的当前行左边的重构像素'k'、'r'、'f'、'a'。

为了使用重构的像素分量,而非输入像素分量,量化器410可以将量 化残差E'提供给反向量化器412。反向量化器412反向量化所量化的残差。 重构像素'Rx'由量化残差E'和来自预测引擎的预测值生成。

预测引擎406可以包括边预测引擎414、LS预测引擎416、左预测引 擎418以及ABCD预测引擎420。如上所述,预测引擎406预测前一行的 重构像素分量'w'、't'、's'、'g'、'c'、'b'、'd'以及'h'的当前像素分量'x'以及在 当前行的左边的重构像素'k'、'r'、'f'、'a',从而产生表示像素分量'x'的残差 E"。

现在,参照图5,描述预测引擎406的操作,图5示出了实例像素分 量500。预测引擎406可以由上一行的相邻重构像素以及待预测像素的相 同行的左边像素自适应地预测像素分量。例如,预测引擎406可以由任意 重构像素't'、's'、'g'、'c'、'b'、'd'、'h'、'k'、'r'、'f'以及'a'的组合预测像素'x'。

空间预测自适应地选择边预测引擎414、LS预测引擎416、左预测引 擎418以及ABCD预测引擎420这四个候选预测引擎中的一个的输出作为 其用于当前像素分量的预测。考虑候选预测器,可以根据为一个或多个先 前重构的像素分量确定的预测误差,进行选择。这个操作在编码器和解码 器中可以相同,并且在编码数据内不需要包括任何预测控制信息。解码器 可以实现相同的预测模式算法,并且推断出由编码器使用的预测模式。一 旦选择了预测器,就使用所选择的预测器来预测每个样本的值。残差值 E"作为预测值与实际的样本值之间的差值来计算。

LS预测引擎416

LS预测引擎416可以根据以下内容产生当前样本'x'的预测值Rx:

ABCD预测引擎420

ABCD预测引擎420可以产生预测值Px=(a+b+c+d+2)/4。这是四个 相邻样本的平均值。

左预测引擎418

左预测引擎418可以将当前样本的左像素的重构值用作其预测值。换 言之,Px='a'。

边预测引擎414

边预测引擎414可以使用比LS预测引擎416更多的相邻像素。边预 测引擎414可以检测在当前样本'x'周围的成几个可能角度的边,并且在预 测中使用该边信息。作为实例,边预测引擎414可以搜索水平的、垂直的、 45度、135度、大约22.5度以及大约157.5度的边的方向。边预测引擎414 可以通过两个阶段实现。第一阶段是边检测。第二阶段是边选择。

可以为预测函数指定一些选择。通过使边预测引擎414配置有参数 (例如,NOLEFT=1),可以禁止使用挨着'x'位于'x'左边的重构样本值'a'。 避免使用样本'a',可以允许预测、量化以及反向量化路径运转更多的时间, 这可以是高吞吐量系统的一个优点,在该系统中,电路定时会导致难以快 速地重构样本'a'。通过使边预测引擎414配置有参数NOLEFT=2(也称 为NO2LEFT),可以禁止使用重构样本值'a'和'f','a'和'f'是挨着'x'位于'x'左 边的两个样本。这允许预测、量化以及反向量化路径运转甚至更多的时间。 在电路定时需要三个时钟周期来预测、量化以及反向量化时,使用 NOLEFT=2,促进每个时钟一个样本的吞吐量。

可以选择性启用和禁止上面列出的四个引起的单独预测引擎。对于某 些类别的内容,通过使用预测函数的子集,可以获得更好的性能。在沿着 图像的左上边预测样本时,例如,可以使用左预测引擎418,下面进行规 定。

NOLEFT=1选项

在NOLEFT=1时,根据以下内容,使用重构样本值'f'、'g'以及'c',由 其预测Pa代替在LS预测引擎416、左预测引擎418以及ABCD预测引擎 420内的重构样本值'a':

NOLEFT=2选项

在NOLEFT=2时,使用重构样本值'r'、's'、'g'以及'c',由其预测Pf 和Pa代替在LS预测引擎416、左预测引擎418以及ABCD预测引擎420 内的重构样本值'f'和'a'。'a'的预测可以使用与在NOLEFT中相同的方法, 除了根据以下内容由Pf代替'f'以外:

Pf=(r+g+s+c+2)/4,-

NOLEFT=0、NOLEFT=1、NOLEFT=2的边预测引擎

在NOLEFT=0时,在预测中使用左边样本,并且以下内容可以应用 于边检测中:

在NOLEFT=1时,在预测中不使用左边样本,并且以下内容可以应 用于边检测中:

在NOLEFT=2时,在预测中不使用这两个左边样本,并且以下内容 可以应用于边检测中:

参数'max_strength'可以定义为在两个样本之间差的最大可能绝对值。 这个参数可以与像素数据格式相关,例如,对于8比特数据,max_strength =255,并且对于10比特数据,max_strength=1023。可以在NOLEFT=0、 NOLEFT=1以及NOLEFT=2的各种情况下,应用相同的边选择逻辑,除 了在NOLEFT=1或NOLEFT=2时,可以由其预测Pa代替样本值'a',并且 在NOLEFT=2时,可以由其预测Pf代替样本值'f'以外:

预测选择

单元(unit)可以被视为相同分量的相邻样本的逻辑分组。例如,单 元尺寸可以选择为等于2。单元尺寸可以是由单元包括的样本的数量。在 替换的实施方式中,单元尺寸可以选择为具有值1、3、4或另一个值。在 一个实施方式中,在单元尺寸选择为等于2时,对于一个分量的每对样本, 可以使用相同分量的前一对样本评估所选择的一组(高达所有)候选预测 器,并且为当前对选择为前一对执行最佳的预测器。可以在与单元未对准 的界限上进行预测器的选择。可以具有某些例外,在这些例外之下限制这 组候选预测器,例如,在位于左边或上面的样本不能使用时,或者例如, 在不能使用一个或多个预测器时。

对于图像的第一对样本,例如,在头一行的左边的两个样本,可以选 择左预测引擎418,作为预测器。进一步,对于每行的第一对样本而不是 第一个样本,可以选择LS预测引擎418。可以为不能用于预测的样本值 分配预先确定的值,例如,样本值的最大范围的一半。

对于其他样本对,可以根据左边这对样本的估计预测误差选择预测 器,可以由所有四个预测器计算这些估计预测误差。在发现当前样本'x'的 重构值时,可以如下计算当前样本的估计预测误差:

err_sample=ABS(x'-Px)

在以上方程中,Px是这四个预测器中的每个的当前样本的预测值。 一个预测器的预测误差是预测器的一对样本中的两个样本的err_sample的 总和。然后,选择具有最小预测误差的预测器作为相同分量的下一对样本 的预测器。

要注意的是,在NOLEFT=1时,左边样本的预测误差不可用。假设 当前样本是图5中的'x',那么如果NOLEFT=0,那么由左边这对样本'f'和 'a'选择的预测引擎用于当前的样本对。如果NOLEFT=1,那么可以使用由 可用的左边这对的最小预测误差选择的预测器,例如,如果'x'是这对中的 第二样本,那么样本'r'和'f',或者如果'x'是这对中的第一样本,那么样本'r' 和'k'。如果NOLEFT=2,如果'x'是这对中的第一样本,那么可以使用由样 本'r'和'k'的最小预测误差选择的预测器,或者如果'x'是这对中的第二样本, 那么样本'k'及其紧接在左边的样本。残差或误差值E"可以确定为E"=x– Px。

可以如下获得用于未来预测中的重构样本值'x':

x'=Px+E'*QuantDivisor;

if(x'<0)x'=0;

else if(x'>MAXVAL)x'=MAXVAL;

下面限定值QuantDivisor。MAXVAL是可以由未压缩的视频样本字 长编码的最大值,例如,对于10比特视频,为1023,并且对于8比特视 频,为255。在一个实现方式中,Cb和Cr是非负整数。

参照图6,描述映射器和可变长度编码器206的操作,该图示出了也 称为单元的样本单元600的实例。映射器和可变长度编码器206可以使用 熵编码来对使用其自然数2的补码二进制值的样本值编码。用于编码每个 值的比特数可以由相同分量的编码值的最近历史和与样本的每个单元605 相关联的前缀值的组合动态地确定。在某些实现方式中,单元605包括特 定分量类型的两个样本610,例如,Y、Cb或Cr、或α、R、G或B。在 一些实现方式中,Cb和Cr在一个单元内共同编码。相同的一组分量可以 用于预测比特的数量。

样本的每个单元605具有单元样本尺寸。单元样本尺寸可以是主单元 内的每个样本的比特的尺寸。单元605样本尺寸可以足够大,以便编码包 含在单元505内的每个样本,并且可以更大。一个样本的尺寸可以是用于 以2的补码编码的样本值的比特数。例如,值0具有尺寸0,值-1具有尺 寸1,值-2或1具有尺寸2,值-4、-3、2或3具有尺寸3,以此类推。

单元605可以具有最大样本尺寸,该尺寸是在单元605中的所有样本 的尺寸的最大值。单元605还可以具有预测尺寸。在一个实现方式中,如 果预测尺寸大于或等于最大样本尺寸,那么单元605样本尺寸等于预测尺 寸。在一个实现方式中,如果最大样本尺寸大于预测尺寸,那么在前缀值 612中编码始终是非负的差值,并且最大样本尺寸可以用作单元605样本 尺寸。在另一个实现方式中,如果最大样本尺寸与预测尺寸不同,那么在 前缀值612中编码可以是正或负的差值。前缀值可以使用一元编码,例如, 对于非负前缀值的实现方式,值0具有代码1(二进制),值1具有代码 01、值2具有代码001,以此类推。单元样本尺寸是预测尺寸与前缀值612 的总和。对于10比特视频,最大可能样本尺寸是10,并且最小可能样本 尺寸是0,因此,最大可能前缀值是10,占据了11比特,即,0000 0000 001。 对于带符号的前缀值的实现方式,带符号的前缀值可以是一元编码。

预测尺寸可以是先前编码的样本的尺寸的函数。在一个实现方式中, 假设单元尺寸是2,预测尺寸是前两个样本(例如,先前单元)的相同分 量的样本的尺寸的平均值(通过四舍五入)。如果单元尺寸是4,那么预测 尺寸可以是先前单元的相同分量的四个样本的尺寸的平均值。如果单元尺 寸是3,那么预测尺寸可以由先前单元的相同分量的最后两个样本的尺寸 的平均值生成,从而避免除以3。或者,如果单元尺寸是3,那么预测尺 寸可以生成为相同分量的先前单元的3个样本的加权总和。加权可以是(例 如)(1/4,1/4,1/2)。

例如,如果在量化之后,图像的分量促使样本的尺寸对于很多连续的 样本是2,那么预测尺寸是2,并且前缀值是0。因此,前缀代码是‘1’, 每个样本使用2比特编码,并且两个样本的单元总共具有5比特。在一个 瞬态造成样本尺寸突然增大的情况下,前缀值编码尺寸的增大。在另一个 瞬态造成样本尺寸突然减小的情况下,前缀值可以是0,并且单元样本尺 寸可以等于预测尺寸,该预测尺寸可以超过在单元中的样本的尺寸。因此, 即使其自身的尺寸更小,也可以使用等于预测尺寸的比特数编码每个样 本。在瞬态之后,在样本尺寸没有另一个变化时,单元样本尺寸和预测尺 寸再次聚集。考虑样本的尺寸在单元之间不同,尤其在尺寸不非常快速地 频繁变化时,这种技术能非常有效地编码样本。

Δ尺寸单元可变长度编码(DSU-VLC)方案促进在硬件内高速地有 效编码和解码,这部分是因为这不取决于VLC表。由前缀值(计数0)和 预测尺寸确定待解码的单元内的比特数,这可以在编码或解码当前单元之 前确定。编码或解码每个时钟的一个单元可行,并且更快速解码的方法也 可行。对于更大的吞吐量,编码可以并行编码多个单元。由于各种原因, 单元尺寸可以选择为大于2。例如,在使用提出单元尺寸2实际上不能满 足的吞吐量要求的情况下,可以选择更大的单元尺寸,在这种情况下可以 使用单元尺寸3或4。

再次参照图4,量化器410使用量化参数Quant来量化残差E",这通 常包括无损编码的情况。Quant可以采用的值的范围从0(代表无损)到 与QuantDivisor[]的最高值对应的值(见下文)。通过下面显示的 QuantDivisor和QuantOffset的一组示例性值,Quant的值的范围从0到17。

量化器410可以如下对残差值E"进行量化:

其中,可以通过截断,进行除法,例如,与在'C'语言中一样。

这组除数可以是:

int QuantDivisor[]={1,3,5,7,9,10,12,14,16,18,20,24,28,32,48, 64,128,256};

这组相关联的偏移(舍入常数)可以是:

int QuantOffset[]={0,1,2,3,4,4,5,6,7,8,9,11,13,15,23,31,63, 127};

在这种方法中,具有4个奇数值除数(3、5、7以及9),7个是这些 奇数值除数中的一个和五个其他值中的一个的乘积,每个都是2的幂: 2**N。结果,在一个实现方式中,量化函数支持4个奇数值除数。

使用QuantDivisor[]的这组特定的值,为良好的压缩提供低复杂度。 要注意的是,可以使用乘以一小组优化常数值,来在硬件内进行除以奇数。

在其他实施方式中,可以选择除数,以便除数没有奇数因子。例如:

int QuantDivisor[]={1,2,4,8,16,32,64,128,256,512,1024,2048, 4096};

int QuantOffset[]={0,0,1,3,7,15,31,63,127,255,511,1023, 2047};

速率控制

通过速率控制技术,确定Quant的值,速率控制技术可以在编码器和 解码器内同样地进行。速率控制技术可以使其决定基于最近编码的确定数 量的像素分量的活动的测度(measure,度量)以及缓冲模型的充溢度。 预定数量可以是(例如)3、2或某个其他数。每个编码的预定数量的像素 分量可以更新Quant的值一次。

图7示出了虚拟缓冲模型700的实例。虚拟缓冲模型700与比特流源 702、速率控制器208以及比特流用户706通信。虚拟缓冲模型700模制 速率缓冲器的行为,其中,输出比特率是额定比特率。额定比特率可以在 每个像素或每组像素的比特单元内,或者可以在其他单元内,例如,每个 单位时间的比特,例如,每秒的比特。比特流用户706可以以额定速率模 制比特的消耗。例如,比特流源702可以是映射器和可变长度编码器206 的输出。一组像素可以包括预定数量的像素,例如,2、3、4或某个其他 数量。

在创建比特时,比特进入虚拟缓冲模性700内。例如,在编码组时, 将用于编码组的比特数加入模型700中。比特根据预定的方案离开虚拟缓 冲模型700。例如,该方案可以在每组的比特单元内规定恒定的速率。虚 拟缓冲模型700可以作为累加器708实现,其中,每个组加入一个值,并 且减去其他值。或者,从虚拟缓冲模型700中移除比特的方案可以以每秒 的比特为单位。或者,将比特加入缓冲模型700中或者从缓冲模型700中 减去比特的时间可以比组更精细或更粗糙,并且可以使用除了组以外的结 构,例如,样本、宏模块、切片或图片。为了模制先进先出(FIFO)缓冲 器的行为,在从充溢度中减去比特数(这可能另外产生充溢度的负值)时, 虚拟缓冲模型700的充溢度可以固定为0。

在用于虚拟缓冲模型700内的输出比特率小于或等于在编码器中从 速率缓冲器中移除比特的实际比特率并且速率控制器704确保虚拟缓冲模 型700不溢流时,速率缓冲器也不溢流。更一般地,编码器可以使用虚拟 缓冲模型700来管理编码器产生比特的速率,以便稍后可以应用于编码器 的比特流中的另一个虚拟缓冲模型不溢流或下溢。比特离开虚拟缓冲模型 的比特率可以在任意时间变成任一个支持值。如果比特离开速率缓冲器的 实际速率等于或接近比特离开虚拟缓冲模型的速率,那么编码器的比特率 可以通过有效瞬时响应设为任何支持的比特率。由于速率控制使用虚拟缓 冲模型管理产生比特的速率,所以速率控制函数不需要监控比特离开速率 缓冲器的速率。

在一个实现方式中,编码器和解码器进行相同的速率控制(RC)决 定,这些决定控制量化器的值或Quant,编码器不传输特别表示量化控制 的任何比特。速率控制可以取决于先前组的由样本的尺寸测量的活动以及 虚拟缓冲模型的充溢度和在先前样本中的(如果有的话)边的强度的测度。 速率控制可以使用几个可配置的阈值。单元605被组织到组710内。组710 用于组织样本,以促进缓冲模式和速率控制。在另一个示例性实施方式中, 解码器不进行与编码器相同的速率控制决定,并且编码器传输指示至少一 部分量化控制的比特。

在一个实现方式中,编码器(包括速率控制器208)确保虚拟缓冲模 型700决不超过限定的最大充溢度,同时选择量化等级,以使总体主观图 像质量最佳。可以比较容易地实现某些图像和比特率,而对于其他图像和 比特率,缓冲器充溢度可以变化并且偶尔接近或达到虚拟缓冲模型700的 尺寸,并且量化可以改变并且可以偶尔达到最大容许值。

虚拟缓冲模型700可以表示预定尺寸BufferSize的FIFO。可以根据 特定的应用,选择BufferSize的值。更大的尺寸通常促进更好地压缩规定 的比特率和图像内容,反之亦然。更大的尺寸还表示在物理速率缓冲器内 可用的更大量的空间以及潜在增大的潜伏期。在一个示例性实施方式中, 在图片的开始,缓冲模型700初始化为空。或者,虚拟缓冲模型700充溢 度可以从一个图片中保持到下一个图片中,或者可以初始化为某个其他 值。

在对样本的每个组710编码时,将用于编码组的比特数加入在虚拟缓 冲模型700内的累加器。在编码每个组之后,从累加器中减去等于每个组 的比特的预算的数量(例如,额定比特率),结果固定为0,以实施非负充 溢度。在解码器模仿编码器的速率控制的实施方式中,在解码器中发生相 同的操作:在对每个组解码时,将组占据的比特数加入模型中,并且减去 额定比特率,例如,每个组的比特的预算数量,结果固定为0。这样,编 码器和解码器缓冲模型在每个图片内为每组精确地追踪。通过调整Quant 值,速率控制器208可以保证缓冲器充溢度决不超过定义的最大值,例如, 缓冲尺寸。

在一个实施方式中,在每个图片的开始,量化值Quant初始化为0, 与无损编码对应。在另一个实施方式中,Quant值初始化为非零值。可以 动态地调整Quant值,以免缓冲模型溢流,同时使压缩图像质量最佳。速 率控制算法可以促进以低比特率对困难图像的编码,具有最小可见的量化 误差,以及以更高的比特率对困难图像的编码,没有可见的量化误差。

在一个实施方式中,测量每组的活动等级。活动等级可以是在组中的 每个单元的最大量化残差尺寸,乘以在单元内的样本数(例如,2、3或4), 加上1(与前缀值0对应),在该组内的所有单元计算总和。在量化之后, 量化残差尺寸使用Quant的当前值。作为每个单元的2个样本以及每个组 的3个单元的实例,样本0和1的比特数分别是SampleSize[0]和 SampleSize[1]。假设单元0的这两个样本的最大值是MaxSizeUnit[0]= MAX(SampleSize[0],SampleSize[1]),那么该组的活动等级是RcSizeGroup =MaxSizeUnit[0]+1+MaxSizeUnit[1]+1+MaxSizeUnit[2]+1。在下面显 示的实例中计算在最后的组中编码的比特的实数的另一个参数(例如, BitsCodedCur)也用于确定Quant值应增大、减小还是不变。

下面描述虚拟缓冲尺寸是16Kbits的实例的量化参数Quant的控制。 在这个实例中,“MaxBitsPerGroup”表示在每组比特内的预定的数据速 率。Offset[]是根据缓冲模型的充溢度(由“Buffer_fullness”表示,并且 与由BufTh1、BufTh2等表示的各种阈值进行比较)调整 “target_activity_level”的一组值:

可以为16Kbits(16,384比特)的缓冲模型尺寸设置以比特为单元的 缓冲器充溢度的14个阈值(BufTh1到14),作为{1792,3584,5376,7168, 8960,10752,12544,13440,14336,15232,15456,15680,15960,16240}。可 以为Target_activity_level设置15个偏移值(offset[0到14]),作为{20,10, 0,-2,-4,-4,-8,-10,-10,-10,-10,-12,-12,-12,-12}。

通过由两个连续的阈值限制的任何范围的缓冲器充溢度(例如, BufThl<=Buffer_fullness<BufTh2),具有由MIN_QP和MAX_QP规定的 Quant范围,允许使用速率控制器208。这有助于调节Quant的变化,以 在缓冲器等级较低时避免过度量化,并且避免在缓冲器充溢度较高时,表 面使用过多对视觉质量没有帮助的更低有效位。根据缓冲器充溢度等级, 分别从具有实例默认值{0,0,1,2,2,3,4,8,8,8,13,14,15,16,17}的15个 值的阵列minQP[0to 14]以及具有实例默认值{2,2,2,3,3,7,9,10,11,12, 13,14,15,16,17}的15个值的阵列maxQP[0to 14]的中选择与缓冲器充溢 度等级的每个范围相关联的这对参数MIN_QP和MAX_QP。

根据测量的活动等级、目标活动等级、由MIN_QP和MAX_QP指定 的允许的Quant范围以及强边的强度,调整Quant值。在具有强边时,如 果Quant值依然固定,那么活动等级通常大幅增大。通过检查当前组的活 动等级以及先前组的活动等级以及Quant的相关值,速率控制算法检测强 边的存在。在检测到强边时,速率控制算法不增大紧接在强边的存在之后 的Quant值,以便避免在可以循着强边的光谱区域内更加容易可见的潜在 量化噪声。可以在(例如)某个动画片内容内观察到这个因素。速率控制 可以在强边之后的第二组中增大Quant值。下面,在检测强边时用作阈值 的一个参数在伪码中定义为EdgeFactor。

一些实施方式避免Quant在高量化值周围过度波动,这会在一些图像 中造成可见的高频率量化噪声。这些实施方式调节Quant的增大,以便在 Quant值已经较高时,对于像素的两个连续组,Quant不增大。具有某些 例外。然而,一旦所测量的活动等级较低,就可以允许减小Quant。在以 下实例中定义为Quantlncrl_imit[0]和Quantlncrl_imit[1]的两个参数控制这 些调整;其默认值可以设为11。在以下实例中,cSizeGroup表示活动等级, BitsCodedCur表示用于编码最近编码组的比特的实际数量,并且 RcTgtBitsGroup表示Target_activity_level。RcTgtBitOffset[0]和 RcTgtBitOffset[1]是调整目标活动等级的范围的偏移值。EdgeFactor是用于 检测强边的参数。最后组的量化步长是Quant,在为当前组分配该值之前, 其作为QuantPrev进行保存。

可以如下实现Quant调整的操作:

在缓冲器充溢度接近最大容许等级时,由活动等级确定的以上Quant 值可以由max_QP代替:

if(Buffer_fullness>=BufTh_overflow_avoid)

*Quant=max_QP;

其中,BufTh_overflow_avoid是可编程参数。

图8示出了实例解码器800。解码器800包括速率缓冲器802、可变 长度解码器(VLD)804、预测器、映射器和反向量化器(PMIQ)806以 及速率控制器808。解码器800可以位于与编码器相同的装置内或者不同 的装置内,并且可以从任意源中接收比特流输入,例如,存储器或通信接 口。例如,解码器800可以远离编码器,并且可以通过网络接口接收输入 比特流。

速率缓冲器802可以是FIFO存储器,在编码器800接收数据速率之 后,该存储器可以临时储存压缩数据速率。速率缓冲器802可以与视频解 码器的剩余部分整合,或者可以位于另一个模块内,并且可以与另一个存 储器组合。速率缓冲器802的尺寸可以至少与用于视频编码器内的虚拟缓 冲器一样大。例如,在视频编码器使用16kbits虚拟缓冲器(例如,2048 个字节)的情况下,速率缓冲器可以具有相同的尺寸,即,2048个字节或 更大。可以在速率缓冲器802与VLD 804之间使用准备接受的流量控制, 以在速率缓冲器802空着时,控制解码操作悬挂,直到具有在速率缓冲器 802内可使用的数据。

在任何规定的时间,速率缓冲器802的充溢度可以与虚拟缓冲模型的 充溢度不同。这部分因为解码器虚拟缓冲模型模仿编码器虚拟缓冲模型的 操作,而非解码器的操作,并且缓冲模型对指定数量的编码比特/像素乘以 每次对组解码时从缓冲模型中去除在组中的像素的数量进行运算,而非比 特到达解码器的实际进度。压缩比特的传输可以模制为与解压缩函数精确 地同步,而在实际操作中,可以以比这个速率更快或更慢地的速率从存储 器中读取速率缓冲器802的输入。这就是上述速率控制对缓冲模型(而非 对速率缓冲充溢度)进行操作的一个原因。

VLD 804的输入是压缩比特流812。压缩比特流812可以包括一系列 组。这些组可以包括一组单元。每个单元可以具有前缀和某个数量的样本, 例如,2、3或4个样本。VLD 804运算是可变长度编码器(VLC)206函 数的反函数。由于VLD 804的输入是比特流(例如,VLC编码的样本流), 所以可以依次执行一部分或所有VLD运算。然而,一些VLD功能可以是 流水线式。

在一个实施方式中,VLD 804使用单元尺寸2,即,每个单元具有2 个样本。对于任何给定图像的编码器和解码器,单元尺寸的选择可以相同。 单元尺寸通常是编码比特流的属性。

VLD 804解码操作需要在与目前编码的元件相同的元件的先前单元 内确定样本的实际尺寸(例如,有效位的数量),并且从这个信息中产生 预测的单元样本尺寸。这个分析可以是流水线式的。VLD 804可以对每个 单元的前缀解码,每个单元的前缀可以时一元编码的。将将解码的前缀值 加入预测的样本尺寸值中。所产生的样本尺寸信息表示在单元内包含的每 个样本的比特的数量。VLD 804从输入比特流中提取等于前缀尺寸加上确 定的样本尺寸乘以每个单元的样本数量的比特数。一旦VLD 804提取这 些比特,可以通过可以是流水线式的后续解码步骤对这些比特进行多路分 解和处理。

与VLC一样,计算当前组所消耗的比特数以及当前组的活动等级并 将其传递给速率控制器808,用于进行速率控制。VLD 804生成 RcSizeGroup和BitsCodedCur的值,并且将这些值传递给速率控制器808。

一旦提取了编码样本,这些样本就被转换成合适的格式,用于后续处 理。例如,这些样本就可以转换成11比特2的补码带符号格式,具有负 样本值的符号扩展。这些恒定的宽度样本值被多路分解成样本的单独的分 量流,并且被发送给预测器、映射和l-Quant(PMIQ)块体806。

图9示出了用于编码的实例逻辑900。逻辑900将量化步长初始化为 0(902),然后接收像素分量的单元(904)。逻辑900还使用量化步长进 行量化,并且编码量化值(906)。逻辑900测量虚拟缓冲器的充溢度(908) 并且基于测量的充溢度调整量化步长(910)。如果完成编码(912),那么 流动可以返回(902)或完全结束;否则,流动可以在(904)处继续。

图10示出了用于解码的实例逻辑1000。逻辑1000将量化步长初始 化为0(1002)。逻辑1000对编码单元解码,并且更新虚拟缓冲器(1004)。 逻辑1000还使用量化步长参数去量化(1006),并且测量虚拟缓冲器的充 溢度(1008)。而且,逻辑1000可以基于测量的充溢度,调整量化步长 (1010)。逻辑1000确定是否完成了帧的解码(1012),如果完成的话, 那么流动可以返回(1002)或完全结束;否则,流动可以返回(1004)。

操作描述

以上描述提供了支持额外特定的图像处理操作的实例架构。接下来提 供这些操作中的一些的介绍。下面还进一步讨论支持图像处理操作的额外 架构实现方式。

图11基于图1的实例示出了实例编码和解码系统1100。系统1100 支持实时操作。可以解压缩的源数据112(例如)实时地并且按照光栅扫 描顺序进入编码器104。编码器104压缩输入的像素,以形成比特流并且 在其比特缓冲器210内临时储存部分比特流。比特缓冲器210的输出是显 示流压缩(DSC)比特流1106的切片层。DSC比特流1106可以(例如) 从编码器104实时传输给解码器106。在这方面,大量通信链路1104可以 将DSC比特流1106传输给解码器106。大量传输层可以位于通信链路1104 的下面,并且通信链路1104可以包括(例如)本地高速总线、WiFi链路、 以太网链路、卫星链路、蜂窝(例如,3G或4G/LTE)链路。

解码器106将DSC比特流1106接收到其速率缓冲器802内,速率缓 冲器802临时储存部分DSC比特流1106。解码器106对速率缓冲器802 中的比特解码,以获得未压缩的像素。解码器106(例如)实时地并且按 照光栅扫描顺序为显示器110输出未压缩的像素。从解码过程中输出的图 像可以与输入编码过程内的图像具有相同的格式。

DSC比特流可以包括使用图片层语法编码的一系列帧。图片层语法 可以包括PPS(图片参数集)和切片语法。PPS包含解码器106用于正确 地解码切片层的参数。图12示出了PPS 1200的实例。

图片层可以以整个图片为单位进行操作。例如,在渐进格式视频的情 况下,图片可以是帧,或者在交错格式视频的情况下,图片可以是场。每 个图片可以包括整数个连续的、非重叠的、相同尺寸的、矩形切片。在编 码器104中,通过该切片层指定切片编码。在解码器106中,每个切片可 以单独地解码,而不干扰其他切片。每行可以具有一个切片,或者每行可 以具有多个切片。在每行具有多个切片的情况下,覆盖一行的切片的比特 在DSC比特流1106中通过下面描述的切片多路复用过程多路复用。每个 切片可以包括一组群组,每个组可以是按照光栅扫描顺序由三个连续像素 构成的组。而且,编码器104可以编码具有多个(例如,三个)熵代码的 每个组,每个元件具有一个代码,并且每个代码可以是特定类型的可变长 度代码(VLC)。而且,一些组可以包括一个或多个额外比特,该一个或 多个额外比特用信号通知特定的解码操作。

图13示出了编码器1300的另一个实例。DSC编码过程生成可以精 确地符合独立指定的bpp(每个像素的比特)速率的比特流。可以根据每 个像素时间的比特,指定bpp率,可以在算法上指定,这是因为像素时间 的单元在编码器1300的输入和输出都相同。编码每个像素或一组像素的 比特数可以大幅变化。在编码器1300中,速率缓冲器1302促进将用于编 码每个组的可变数量的比特转换成(例如)恒定的bpp率。为此,编码过 程包括速率控制器1304。

编码器1300可以包括颜色空间转换逻辑1306,例如,RGB输入到 可逆YCoCg转换逻辑。输入缓冲器1308储存转换的输入。预测、量化以 及重构(PQR)逻辑1310实现样本值的预测和残差值的生成。预测、量 化以及重构(PQR)逻辑1310可以包括多个(例如,3个)预测器:改进 的中值自适应预测(MMAP)、中点预测(MPP)以及块预测(BP)。PQR 逻辑1310还实现残差值的量化和样本值的重构。还具有索引颜色历史 (ICH)1312,与可以使用Δ尺寸单元可变长度编码(DSU-VLC)实施熵 编码的VLC编码逻辑1314一样。输入缓冲器1308将样本提供给平坦度 确定逻辑1318。还要注意的是,具有子流多路复用逻辑1320,以准备到 速率缓冲器1302的多路复用输出流。

图14示出了解码器1400的另一个实例,该解码器被配置为对编码器 1300编码的图像数据进行解码并且产生图像输出1418。解码器1400可以 实现由编码器1300执行的逆操作。解码器1400可以包括速率缓冲器1402、 子流多路分解器1420以及用于Δ尺寸单元的可变长度编码(DSU-VLC) 的VLC熵解码逻辑1404。解码器1400还包括PQR逻辑1406,该逻辑可 以实现多个(例如,3个)预测器:改进的中值自适应预测(MMAP)、 中点预测(MPP)以及块预测(BP)。PQR逻辑1406还执行残差值的反 向量化和样本值的重构。还具有ICH 1408、速率控制逻辑1410以及颜色 空间转换逻辑1412。平坦度指示可以从编码器中在比特流中用信号传送, 并且提供给速率控制逻辑1410。

编码过程可以产生符合HRD(假设参考解码器)约束的显示流编码 的比特流。HRD可以是包括速率缓冲器的模型的解码器的理想模型,该 模型应不上溢,也不下溢。

DSC比特流和解码过程促进在实际的硬件实现方式中每个时钟周期 解码3个像素。在其他实现方式中,解码过程每个时钟可以处理1个、3 个或其他数量的像素。通过并行编码和解码多个切片,可以增大每个时钟 的像素的额外吞吐量,这通过在DSC比特流中利用每行的多个切片来促 进。

颜色空间转换逻辑1306、1412

输入到编码过程中的RGB视频可以转换成YCoCg,用于后续处理。 可以使用可逆形式的YCoCg,同样,这两个色度分量中的每个的比特数 在YCoCg中比在RGB中更大。在YCbCr输入的情况下,不需要进行颜 色空间转换。在解码过程中进行反向颜色空间转换。

PQR逻辑1319、1406

使用预测性编码(P模式)或索引颜色历史编码(ICH模式),对每 组像素编码。对于P模式,具有3个预测器:改进的中值自适应预测 (MMAP)、块预测(BP)以及中点预测(MPP)。编码器和解码器可以在 每个中使用相同的算法自动选择MMAP、BP或MPP,而不在DSC比特 流中发信号通知进行选择。

在编码器1300中,使用所选择的预测器预测每个样本。比较原始样 本值和预测值,并且量化差异。然后,如果选择P模式,那么每个量化误 差进行熵编码。编码器1300还执行重构步骤,在该步骤中,将反向量化 误差加入预测中,以便编码器和解码器可以使用相同的参考样本。

在解码器1400中,使用所选择的预测器预测样本。通过解码DSC比 特流获得的残差值被反向量化,并且将结果加入预测中,形成重构样本值。

中值自适应预测(MAP)可以是在JPEG-LS中使用的预测方法。然 而,进行修正以允许解码器1400在一个组内同时处理三个像素,并且提 高编码。改进的中值自适应预测(MMAP)有利于解码器以3个像素/时 钟运行的硬件实现方式。MMAP根据位于当前样本的左边和上面的先前 编码的重构样本预测当前样本值。为此,编码器1300和解码器1400可以 使用相同组的重构样本,因此,MMAP在编码器1300和解码器1400内 产生相同的结果。MMAP可以是默认预测器,并且在大部分情况下,在 预测样本值时有效。

MPP从大约位于样本的有效范围的中点的值中预测当前样本。MPP 具有限制残差的最大尺寸的优点。当在一组的一个分量内的样本编码所需 要的比特数大于或等于该分量的比特深度减去量化位移时,可以选择 MPP,代替MMAP。

BP根据相同的扫描线中的位于当前样本左边的先前编码的重构样本 预测当前样本。从当前样本到预测器位置的偏移是BP向量。BP函数自动 确定BP向量以及是否使用BP的决定,该BP函数在编码器和解码器内相 同。

块预测

在预测值是相同的行中位于当前样本的左边的样本的情况下,块预测 可以预测当前样本。参考样本的相对位置可以位于(-3)与(-10)之间, 包括(-3)和(-10)。使用额外像素位置,可以提高质量。相对位置是在 相同行的样本内的向量;这称为块预测向量。

可以在前一行样本上进行找出最佳向量的搜索,而非在当前编码的行 中。在一个实现方式中,块搜索使用具有从-3到-10的范围的值的各电势 向量比较一组9个连续的样本和参考样本。所比较的当前样本和参考样本 位于相同的扫描线内,例如,位于待编码的样本行之上的一行。对于考虑 的每个向量,对当前和参考组的每个中的9个样本计算SAD(绝对误差 和)。选择具有最低SAD值的向量。在束缚的情况下,选择最接近0的向 量。

还使用向量-1的9个像素SAD,以便确定应使用BP还是MMAP。 下面提供预测器选择的更多细节。

一旦选择,向量就应用于每组3个样本中。因此,每3个样本进行块 搜索。

向量表示像素X的预测值是位于在同一行的像素X的左边的像素, 在像素单元中到左边的距离等于向量值。

图15说明了块搜索的实例样本组1500,示出了几个参考样本1502 和向量1504、1506。还显示了当前样本'x'1506和当前SAD计算样本1508 的一个实例。

索引颜色历史(ICH)逻辑1312、1408

图16示出索引颜色历史1600的一个实例。

在多个类型的内容中,例如,计算机生成的文本和图形中,相似的像 素值常常相当接近,同时不一定彼此相邻。正因为如此,在索引颜色历史 (ICH)内保持跟踪多个最近使用的像素值是会有帮助的。在编码器1300 为特定的组选择ICH模式时,发送ICH内与所选择的像素值对应的索引 值。这些索引值直接用于输出像素流内。

ICH逻辑包括储存单元,该储存单元保持使用另一种编码方法(例如, 预测编码)编码的一组最近使用的颜色值。编码器1300和解码器1400可 以保持ICH的相同状态。ICH可以具有32个条目,索引值指向每个条目。 对于ICH编码的组,每个像素可以使用5比特ICH索引编码,该索引指 向一个条目。在每组像素以P模式在编码器内编码或者在解码器内解码 时,将组中的所有像素的值输入ICH内。可以管理ICH,作为移位寄存器, 其中,最近最多使用的(MRU)值在顶部,并且最近最少使用的(LRU) 值在底部。新条目在顶部增加,并且所有其他条目向下移动,底部条目从 ICH中掉落出来。在以ICH模式对组编码时,用于编码那些像素的三个索 引引用在ICH中的条目。在引用ICH条目时,该条目移动到ICH的顶部, 并且在条目的先前位置之上的其他值下移1。对于每个ICH编码组的所有 3个条目,并行进行这个操作,并且该组的最近(例如,最右边的)像素 组变成MRU。结果,最近最多使用的(MRU)值位于历史的顶部,并且 最近最少使用的(LRU)值位于历史的底部。每当在历史的顶部增加三个 像素的P模式组时,便移除三个LRU值。

对于第一行的每个切片,所有32个ICH条目被视为移位寄存器的一 部分。对于在第一行切片之后的行,最后7个索引值被限定为指向当前行 之上的行中的重构像素,而非ICH中的条目。这可用于有效地编码不在历 史移位寄存器内的像素值,并且提高了某些内容的编码。

编码器1300可以逐个组地选择ICH模式。编码器1300使用亮度子 流DSU-VLC中的转义码,发信号通知组的ICH模式的使用。对于以ICH 模式编码的每个组,使用固定长度5比特代码,编码在这个组中的每个像 素,其中,索引值指向历史。通过经由比特流语法确定使用ICH模式,并 且通过读取由构成像素的编码值的ICH索引指向的值,解码在组中的每个 像素,从而解码器1400对每个ICH编码的组解码。通过将P模式像素插 入ICH内并且通过响应于ICH模式组将ICH条目重新排序,编码器1300 和解码器1400为每个组相同地更新ICH状态。

熵编码逻辑1314、1404

显示流编码在多个层上限定语法。最低层称为子流层。在每个切片内 可以具有三个子流,每个分量具有一个子流。这三个子流可以由子流多路 复用(SSM)过程共同多路复用,以形成编码切片。如果每行具有多于一 个切片,那么编码的切片可以由切片多路复用过程多路复用;并且如果每 行仅仅具有一个切片,那么不使用切片多路复用过程。所有切片的所产生 的比特级联,以形成编码图片。图片参数集(PPS)可选地位于每个编码 图片之前。

子流层

显示流编码可以使用上面称为DSU-VLC的熵编码技术,用于编码与 预测编码相关联的残差。像素的ICH编码为每个像素使用固定长度的代 码。专用值用于发信号通知ICH模式的使用,并且其他代码发信号通知与 像素的平坦区域相关联的量化调整。

残差值 比特的尺寸 表示 -3 3 101b -2 2 10b -1 1 1b 0 0 <空>

1 2 01b 2 3 010b 3 3 011b

表1-用于不同的残差值的尺寸的实例

在每个切片中的像素均可以组织成三个连续的像素的组。组是由编码 和解码过程使用的逻辑结构,但是不需要直接在比特流中表示。DSU-VLC 将样本组织成单元。单元是一个分量的三个连续样本的残差的编码组。每 个单元具有两部分:前缀和残差。基于相同分量类型的前三个残差的尺寸 以及可以发生的QP的任何变化,预测每个残差的尺寸。前缀可以是表示 单元中最大残差的尺寸与预测尺寸之间的非负差值的一元代码。如果差值 是负数,那么由前缀编码的值是0。每个单元的残差部分包含3个值,单 元中的每个样本具有一个。以2的补码对残差值编码。分配给残差的比特 数可以在单元之间变化;然而,在一个单元中的全部3个残差可以分配给 相同数量的比特。

此外,亮度单元的前缀还表示ICH模式是否用于每个组。从P模式 到ICH模式的转换可以由转义码表示,例如,表示大于亮度的最大可能残 差尺寸的尺寸的前缀值。亮度的最大可能残差尺寸取决于应用于该组中亮 度的QP值。紧随另一个ICH模式组之后的ICH模式组可以由包括单个“1” 比特的亮度前缀代码表示。紧随ICH模式组之后的P模式组可以由修正一 元代码表示。

对于ICH模式组,对于每个元件,残差部分可以是5比特,其中, 每5比特代码是编码完整像素的ICH索引,并且色度分量不使用前缀。对 于在开始ICH模式组之后的后续CH模式组,每个组可以为使用每个组的 16比特,例如,1比特前缀和(3)5比特ICH代码。

亮度子流还可以在语法中包含一些有条件的固定长度代码,用于编码 器传输关于从忙碌区域到光滑区域的过渡的信息。下面更详细地讨论这个 “平坦度指示”。

子流多路复用

可以使用没有报头的固定长度的子流多路复用方案,将三个元件状子 流多路复用在一起。在美国专利公开号2011-0305282 A1中,描述了一种 这样做的技术,该案并入本文中,以作参考。错误!未发现参考源(Error! Reference source not found)。图17示出了子流多路复用1700的结果的实 例,包括各种多路复用字和分量1702。每个多路复用字可以具有相同的尺 寸,例如,对于每个分量的8或10比特(bpc),具有48比特,或者对于 12bpc,具有64比特。从并行子流解码器使用数据以便实时解码的顺序, 获得多路复用字1702的顺序。

图18示出了子流多路分解逻辑1800的实例。逻辑1800包括存储器, 例如,速率缓冲器1802、多路分解器1804以及具有VLD的漏斗移位器 1806、1808以及1810。漏斗移位器和VLD的组合称为子流处理器(SSP)。 在每个组时间,SSP的任意组合可以请求多路复用字或什么都不请求。如 果从SSP接收到请求,那么多路分解器1804将多路复用字发送给这个 SSP。如果在相同组时间内接收到多个请求,那么多路分解器1804将多路 复用字发送给做出请求的每个SSP。

在切片结束时,SSP可以在子流层数据结束之后请求多路复用字。因 此,编码器1300可以根据需要在切片结束时插入填充的多路复用字。

图19示出了子流多路复用逻辑1900的实例,包括VLC和漏斗移位 器1902、1904、1906、平衡存储器(例如,FIFO)1908、1910、1912、 多路复用器1914、速率缓冲器1916以及多路分解器模型1918。多路分解 器模型1918有助于编码器1300正确地命令多路复用字。平衡FIFO 1908、 1910、1912可以存储价值多组的数据,以便在合适的时间提供多路复用字。

速率控制

编码器1300和解码器1400可以使用相同的速率控制(RC)算法, 其相同地配置。在解码器1400内模仿由RC算法做出的在编码器内调整 QP的决定,以便在每个像素处,解码器1400具有与编码器1300相同的 QP值,不消耗任何比特来传送QP值,除了平坦度指示以外。基于先前 传输和接收的信息,在编码器1300和解码器1400内做出RC决定。RC 可以改变每组的QP值。

速率控制目标

RC为编码器1300和解码器1400提供量化参数(QP),以供每组使 用。由于RC函数在编码器侧和解码器侧上相同,所以编码器1300和解 码器1400已知基础QP值,并且不需要在比特流中传输。然而,可以在用 于下面描述的平坦度指示的比特流中发送基础QP值或者对基础QP值的 调整。

RC试图确保假设参考解码器(HRD)一致性。具有理想的速率缓冲 器(FIFO)的模型,该模型将用于编码每个组的不同数量的比特转换成特 定的恒定比特率。RC被设计为确保这个FIFO不上溢或下溢,假设通过假 定的恒定比特率去除比特。

RC在其QP决定中优化图片质量。由于知觉掩蔽,在较平坦的区域 上使用较低的QP,并且在忙碌区域使用较高的QP是可取的。此外,所 有像素保持恒定的质量;例如,第一行切片具有有限的预测是可取的,因 此,可以使用额外的比特分配。

HRD缓冲模型

假设参考解码器(HRD)模型描述了解码系统中的理想的速率缓冲 器的性能。编码器速率缓冲模型可以在解码器侧上反射。编码器模型试图 确保没有上溢或下溢。由于DSC可以是恒定比特率(CBR),所以HRD 模型充溢度等于缓冲器尺寸-编码器缓冲充溢度;因此,解码器缓冲模型 不上溢或下溢。DSC编码器速率缓冲模型可以定义比特进入和离开速率缓 冲器的方案。

在初始延迟期间,例如,初始传输延迟,编码器将比特生成其每组的 速率缓冲,而不移除任何比特。在这个期间,编码器模型充溢度根据所生 成的比特的数量增大。例如,可以根据组时间或像素时间,指定延迟周期。

只要在切片内具有更多待编码的像素,编码器就根据内容生成比特。 以指定的恒定速率移除比特。为了防止缓冲充溢度降低为低于0,使用预 测模型可以优先于使用MPP,这执行最小的数据速率。一旦编码了最后一 组切片,就不将更多的比特加入速率缓冲器中。比特继续以恒定速率离开 速率缓冲器,直到缓冲器变空,然后,编码器发送零比特,以确保在CBR 操作中,以比特为单位的压缩切片尺寸等于bpp*切片中像素数量。

将解码器初始延迟指定为编码器初始延迟的补充;例如,HRD延迟 减去编码器初始延迟。然后,解码器速率缓冲充溢度作为编码器缓冲充溢 度的补码追踪。

CBR对VBR

在编码器速率缓冲器另外下溢时的条件下,具有编码器是否插入比特 以防止下溢的设计选择,或者使用VBR。为了防止下溢,RC确定在下一 个编码组之后是否能够具有下溢,并且在发生这个条件时,促使实施最小 的比特率的MPP模式。由于解码器解码额外比特,正如任何其他组一样, 所以解码器不要求任何特定逻辑处理填充物。

能够支持可变比特率(VBR)。在另外下溢并且不发送任何比特(关 闭)时的某些情况下,通过VBR,编码器1300停止发送比特。然后,编 码器1300再次在具有某个识别事件(打开)时开始发送比特。为了使开 关VBR与不取决于传输的实时行为的一般HRD兼容,可以指定关闭和打 开事件。

在另外下溢并且不发送任何比特时,通过VBR,编码器停止发送比 特。编码器的RC过程每组操作一次。在每个组中,将编码该组的比特数 加入缓冲模型中,并且通常,从缓冲模型中减去每组的比特的标称数,该 标称数是3*bpp,必要时进行调整,以形成整数比特。通过VBR,如果从 缓冲模型充溢度中这样减去比特/组,会造成负值充溢度,那么RC减去标 称数量的比特,然后,将缓冲充溢度固定为0,即,决不允许模型充溢度 为负数。在具有真实传输和真实解码器的真实系统中,在编码器不发送任 何比特时,即,在其真实速率缓冲器为空时,输送不发送任何比特,并且 解码器不接收任何比特。解码器的真实速率缓冲器可以为满,但是不上溢。 在编码器发送比特时,预期输送通过正常的速率传输比特,并且解码器通 过该速率接收比特。解码器的真实缓冲器不上溢或下溢,并且解码器不需 要做任何特殊的事情来处理VBR。输送应理解具有以及没有可用于发送 和接收的有效数据的时间。

切片

编码图片的比特数可以等于该图片的像素数乘以指定bpp率。而且, 通过重写先前版本的每个相应切片,可以在压缩这缓冲器内的适当位置 中,更新图片的切片的任意子集。结果,可以传输完整的图片,作为包括 整个图片的一系列连续的切片,并且作为一系列连续的切片传输的整个图 片满足与切片相同的要求,例如,比特数等于像素数乘以bpp率,而且, 包括切片的整个图片应符合合适的HRD模型,以通过这个操作模式,确 保正确的实时缓冲器行为。结果,从开始传输到开始解码的延迟以及从结 束传输到结束解码的延迟彼此相同并且对于每个切片都相同。

算法使用可以称为速率缓冲器的速率缓冲模型。在每个切片的结尾, 算法允许编码器的速率缓冲器具有高达指定的充溢度,例如,最大比特数。 如果在编码切片的结尾,编码器的缓冲器具有比这个最大数量少的比特, 那么可以在结尾使用(例如)0填充剩余的比特,以正好产生所需要的比 特数。这个最后的比特数占据了指定的像素时间数,以通过指定的bpp率 传输。这个像素时间数是从编码结束到传输结束的延迟,这可以称为最终 传输延迟。在理想的编码器和解码器的组合中,以像素时间为单元的总速 率缓冲延迟等于速率缓冲器尺寸除以bpp率。从开始编码切片到开始传输 该切片的初始传输延迟与最终传输延迟相同。从开始接收切片到开始解码 切片的初始解码延迟(例如,在HRD定时模型中的延迟)被设为等于总 端对端速率缓冲延迟减去初始传输延迟。这允许每个以上描述具有正确的 操作。

图20示出了切片定时和延迟2000的实例。图20示出了切片输入视 频定时2002、切片传输定时2004以及切片解码定时2006。对于在切片结 尾可以在编码器缓冲器中的最大比特数,该算法可以具有固定的参数值, 通常是~4kbits。所产生的结束传输延迟是bpp率的函数;该延迟被设为ceil (4096/bpp_rate)。通过8bpp,这个延迟是170组时间,并且通过12bpp, 这个延迟是114组时间。最初延迟可以设为这个值。

端对端HRD延迟等于HRD缓冲器尺寸除以bpp率。例如,如果HRD 缓冲器尺寸是19,836比特,并且速率是12bpp,那么端对端HRD延迟是 floor(19,836/36)=551组时间。这实际上是上限,并且HRD延迟可以设 为更低值,然而,如果使用更低值,那么该算法不能充分利用可用缓冲器 尺寸,用于RC的目的。

直接应用于HRD并且间接应用于真实的解码器的初始解码延迟应设 为HRD延迟-初始传输延迟。在此处的实例中,初始传输延迟如上所述设 为114组时间,初始解码器延迟是551-114=437组时间。这是应用于 HRD的延迟,即,理想的假设解码器。真实的解码器当然自由地具有额 外延迟。

该算法的速率缓冲器尺寸也是HRD缓冲器尺寸,只要不超出兼容解 码器的能力,该尺寸就可以由编码器选择。最佳速率缓冲器尺寸是几个因 素的函数,包括bpp率和切片的宽度。

要注意的是,初始传输延迟通常是bpp率的函数。只要不超出解码器 的能力,HRD速率缓冲器尺寸就可以由编码器设置。通过可调的比特率 以及从在编码器内的视频到在解码器外面的视频的恒定端对端延迟,并且 通过从在解码器内的压缩数据到在解码器外面的视频的恒定延迟,设计真 实系统是切实可行的。编码器可以将初始传输延迟和初始解码器延迟设为 所选值,以促进通过恒定延迟无缝地改变比特率。

切片的选项

编码器1300和解码器1400支持广泛的切片宽度和高度。一个配置是 切片宽度=1/4图片宽度,切片高度=32行。另一个可能的配置是切片宽度= 图片宽度,切片高度=8行。切片尺寸可以由图片宽度乘以图片高度规定。 为了尽可能减小需要发送的额外数据,可以在整个图片中使用相同尺寸的 切片。

更高的切片可以造成更好的压缩。将额外比特分配给每个切片的第一 行,以尽可能提高质量,并且防止在切片之间的界限处具有伪影。通过在 PPS中的参数,设置在第一行上为每组分配的额外比特的数量。可用于每 个切片的第一行之后的所有行的比特数可以减少,以便每个切片的总比特 数是像素数乘以bpp率。在每个切片中的第一行之后具有更多的行,就要 求更少地减少比特分配。因此,32行的切片高度通常提供比8行的切片高 度更好的性能。没有与切片高度相关联的成本,没有额外缓冲,也没有任 何其他额外资源。编码器1300和解码器1400支持等于整个图片尺寸的切 片尺寸。

为了各自实际目的,具有比全屏幕宽度更窄的切片是可取的。更窄的 切片提供通过部分更新来更新更窄的切片或者促进通过低成本进行并行 处理的能力。实际上,每行的多个切片可以使用一个行缓冲器,即,图片 宽度的尺寸。对于每行的多个切片以及比一行高的切片,用于不同切片的 速率缓冲器可以独立(independent)。例如,对于每行4个切片,实际的 实现方式使用4个速率缓冲器。虽然不确切地成比例,但是在最佳速率缓 冲器尺寸是切片宽度的函数时,与通常为1个切片/行的情况规定尺寸相 比,可以规定每个速率缓冲器的尺寸对于4个切片/行的情况更小。因此, 在每行具有多个切片时,速率缓冲器空间的总量小幅增大,而缓冲空间的 行总量不增大。

切片多路复用

在被配置为每个扫描线使用多于一个切片的系统中,可以根据特定的 模式多路传输压缩数据,以便尽最小化编码器和解码器的成本。所推荐的 模式如下。对于每行整数S个切片,每个切片具有每行P个像素,并且图 片具有W个像素的宽度。优选地,P对于所有切片相等,等于W/S,其优 选地为整数。多路传输的比特流包含的比特数=第一行切片的第一切片的 P*bpp率,第一行的第二切片的P*bpp率,以此类推第一行的所有切片。

这个模式的一个迭代具有W*bpp率比特,这可以是与(如果每行具 有一个切片)要使用的比特数相同的比特数。如果P*bpp率不是整数, 那么可以进行调整,以便每个切片产生整数个比特。例如,一个切片的一 行所包括的比特数可以是P*bpp的整数截断值加上先前截断的累积残余 量。然后,这个模式根据需要重复多次,以传输第一行切片中所有切片的 所有比特。应用规格(例如,被设计为携带DSC压缩图像数据的传输规 格)可以在分开的数据包内携带不同切片的数据。在这种情况下,与其他 切片的比特相比,一个切片的最后比特可以在与其他切片的数据包分开的 数据包内,包括紧接在第一个之下的垂直相邻的切片的第一比特。或者, 应用规格可以选择封装一个切片的最后比特和另一个切片的第一比特,例 如,水平相邻的邻近切片或垂直相邻的邻近切片。对于整个图像,总体模 式可以重复。在比特流中不需要包括标记或指示,表示哪些比特用于哪个 切片。相反,输送层可以提供这种指示符。

关于切片多路复用的附加信息如下。

在禁止VBR时,可以发生切片多路复用,即,启用填充。在禁止填 充时,编码每个切片的比特数可以变化,例如,DSC操作是VBR。图片 包括某个数量的切片。在可能的情况下,例如,在图片宽度与切片宽度的 比率是整数时,切片可以具有相同的尺寸。在这个比率并非整数的情况下, 切片的列宽可设为相差不超过1的整数值,并且其总和是图片宽度。在也 启用VBR时,也能够进行切片多路复用。所使用的存储器和多路复用模 式取决于链路的特征,包括(例如)进入或离开低功率状态所需要的开销。

通过禁止VBR(启用填充),使用相同数量的压缩比特,编码相同宽 度的切片。在切片宽度等于图片宽度时,依次发送切片层数据(切片0、 切片1、…切片N-1,其中,N是切片的数量)。在切片宽度比图片宽度更 短时,在相同行上的所有切片的切片数据可以多路传输到固定长度的数据 块内。每个数据块的长度可以等于floor(bits_per_pixel*slice_width)。由 于bits_per_pixel可以是分数,所以使用floor()(向下取整)函数。例如, 在图片在每行上分成两个相同尺寸的切片的情况下,多路传输的比特流包 含:

切片0数据块/切片1数据块/切片0数据块/切片1数据块…

由于ceil()函数,所以如果需要的话,那么每个切片的最终数据块可 以填充有0比特。

通过启用VBR,编码每个切片的比特数可以与P*bpp率不同。例如, 比特数可以小于这个值。每个数据块的比特数可以与floor(bits_per_pixel *slice_width)不同,例如,比特数可以小于这个值。可以使用不同比特 数的数据块,多路传输切片。每个数据块的比特数可以(例如)由在传输 层内的数据包长度信息或标记代码指示。

可以根据标记为Y、Co以及Cg的分量指定显示流编码。如果在当 前的PPS内convert_rgb标志等于0,那么编码器可以接受YCbCr输入。 可以将Cb分量映射到Co分量标签中。可以将Cr分量映射到Cg分量标 签中。在这种情况下,Cb/Co和Cr/Cg分量的位深度可以等于Y分量,使 用在当前的PPS内的bits_per_component字段指定Y分量的位深度。如果 在当前的PPS内convert_rgb标志等于1,那么编码器可以进行从RGB到 YCoCg的颜色-空间转换。颜色空间转换可以是:

CSCCo=R–B

t=B+(cscCo>>1)

cscCg=G–t

y=t+(cscCg>>1)

与Y相比,cscCo和cscCg值具有动态范围的一个额外比特。最终的 Co和Cg值的中心可以在中点周围:

Co=cscCo+(1<<bits_per_component)

Cg=cscCg+(1<<bits_per_cornponent)

要注意的是,在此处,bits_per_component变量可以表示R、G以及 B分量中的每个的比特数,该比特数小于Co和Cg分量的每个分量的比特 数。如果切片延伸超过图片的右边,那么在每行图片中的最右边的像素可 以重复,以将切片填充到正确的水平尺寸中。如果切片延伸超过图片的底 边,那么在图片的每个像素列中的最底部的像素可以重复,以将切片填充 到正确的垂直尺寸中。

线路储存器

显示流压缩可以包括缓冲存储器,用于保持前一行的重构像素值,用 于MMAP预测和ICH。在某些情况下,解码器线缓冲器可以具有充足的 存储,以包含全范围的重构样本。然而,一些解码器可以选择使用较小的 位深度来降低实现成本。

如果使用更小的位深度,那么解码器可以将该深度传送给编码器。编 码器可以根据解码器实现方式所支持的内容设置linebuf_width。可以使用 比特减少的样本的以下方法:

shiftAmount=MAX(0,maxBpc-linebuf_width);

round=(shif Amount>0)?(1<<(shiftAmount-1)):0;

storedSample=(sample+round)>>shiftAmount;

readSample=storedSample<<shiftAmount;

其中,maxBpc是当前分量的位深度,storedSample是写入线缓冲器 中的样本值,并且readSample是回读的值。

预测类型

在P模式中可以支持三种预测类型:MMAP、BP以及MPP。

改进的中值自适应预测(MMAP)

下面在表格中规定改进的中值自适应预测。

c b d e a P0 P1 P2

表2-包围当前组的像素

表2显示了包围预测的在该组中的三个像素(P0、P1以及P2)的像 素的标记惯例。像素'c'、'b'、'd'以及'e'位于前一行,并且像素'a'是直接位于 左边的重构像素。

在用于以下MMAP公式中之前,QP自适应滤波器可应用于前一行 的参考像素中。水平低通滤波器[0.250.50.25]可以应用于前一行中,以获 得过滤的像素filtC、filtB、filtD以及filtE。例如,

filtB=(c+2*b+d+2)>>2;

过滤的像素可以与原始像素混合,以获得用于MMAP(blendC、 blendB、blendD、blendE)内的值。以下方法用于混合:

diffC=CLAMP(filtC-c,-QuantDivisor[qlevel]/2,

QuantDivisor[qlevel]/2);

blendC=c+diffC;

diffB=CLAMP(filtB-b,-QuantDivisor[qlevel]/2,

QuantDivisor[qlevel]/2);

blendB=b+diffB;

diffD=CLAMP(filtD-d,-QuantDivisor[qlevel]/2,

QuantDivisor[qlevel]/2);

blendD=d+diffD;

diffE=CLAMP(filtE-e,-QuantDivisor[qlevel]/2,

QuantDivisor[qlevel]/2);

blendE=e+diffE;

下面提供每个的预测值:

P0=CLAMP(a+blendB-blendC,MIN(a,blendB),MAX(a, blendB));

PI=CLAMP(a+blendD-blendC+R0,MIN(a,blendB,blendD), MAX(a,blendB,blendD));

P2=CLAMP(a+blendE-blendC+R0+Rl,MIN(a,blendB,blendD, blendE),MAX(a,blendB,blendD,blendE));

其中,R0和R1是组中的第一和第二样本的反向量化残差。

在第一行的切片的情况下,前一行的像素不可用。因此,每个像素的 预测变成:

P0=a;

PI=CLAMP(a+R0,0,(l<<maxBpc)-1);

P2=CLAMP(a+R0+Rl,0,(l<<maxBpc)-1);

其中,maxBpc是正在预测的分量的位深度。

块预测(BP)

BP预测值是从位于当前像素的左边的某个数量的像素中提取的像素 值。“块预测向量”(bpVector)是表示位于左边的像素的数量的值的负数, 以用于预测。在一个实现方式中,块预测向量始终在-3与-10之间,包括 -3和-10,这表示使用位于当前组的外面的样本。

BP预测值用于预测由块预测向量引用的像素的全部三个分量:

P[hPos]=recon[Pos+bpVector];

因此,3x1组的预测值与由块预测向量所指向的3x1组像素的重构像 素值对应。

中点预测

中点预测值是等于或接近该范围的中点的值,并且取决于紧挨当前像 素(在表2中,像素"a")左边的重构像素的值。

midpointPred=(1<<(maxBpc-1))+(a&((1<<ql_evel)-1));

其中,maxBpc是正在预测的分量的位深度,并且qLevel是应用于当 前分量中的量化水平。

预测选择

块预测由编码器1300支持。通过将PPS信号中的block_pred_enable 设为0,编码器1300可以选择禁止在流中进行块预测(例如,因为连接的 解码器不支持块预测或者因为图片不从块预测中受益)。在这种情况下, 通过块预测选择MMAP,并且不使用在这个部分中的算法。

可以使用前一行的信息,在组的基础上,做出使用BP还是MMAP 的决定。这表示如果有助于实现,那么在处理当前组之前,可以对线路时 间做出决定。在这个部分中提及的组从切片的最左边像素列中在hPos像 素的水平位置开始。

图21示出了形成9x1SAD的3x1部分SAD的实例2100。首先,可 以进行搜索,以找出最佳的块预测向量。用于SAD的参考像素可以是前 一行中的9个像素的组,在hPos–6的水平位置开始。在参考像素与指向 前一行的像素的9个不同块预测candidateVector’s(-1、-3、-4、-5、-6、 -7、-8、-9以及-10)之间计算SAD。9像素的SAD计算为3个3像素SAD 的总和(见图21)。首先,根据以下公式,在3像素SAD中计算总和之前, 每个绝对差可以截断并且削减:

modifedAbsDiff=MIN(absDiff>>(maxBpc-7),0x3F);

其中,maxBpc是当前分量的位深度。

在三个相邻的样本的每组之上并且在3个分量之上,计算所产生的6 比特imodifiedAbsDiff值的总和,产生10比特值,表示一个分量的3x1部 分SAD;这个10比特值固定为9比特(例如,大于511的值固定为511)。 计算三个9比特的3像素部分SAD的总和,以获得最终的9像素SAD, 这是11比特数。在比较之前,截断每个9x1SAD的3个LSB:

bpSad[candidateVector]=MIN(511,sad3xl_0[candidateVector]+ sad3xl_l[candidateVector]+sad3xl_2[candidateVector]),

9个9像素SAD彼此进行比较,并且可以选择最低的SAD,通过选 择最小幅度的块预测向量,打破僵局。如果最低的SAD块预测向量是-1, 那么bpCount计数器重设为0,并且为这个组选择MMAP。如果最低的 SAD块预测向量并非-1,那么候选的BP向量变成具有最低SAD的向量, 并且bpCount计数器增加,除非hPos<9。

如果以下条件都成立,那么可以选择BP:

bpCount值大于或等于3。

lastEdgeCount小于9。lastEdgeCount值表示经过的(由于出现“边”) 像素的数量。对于任何分量,在ABS(当前样本-剩下的样本)>32<< (bits_per_component-8)时,“边”出现。

在BP/MMAP与MPP之间选择

如果选择BP/MMAP,编码器可以基于所生成的量化残差的尺寸决定 是否使用BP/MMAP。例如,编码器可以为这三个分量的每个确定 BP/MMAP的最大残差尺寸。如果任何分量的最大残差尺寸大于或等于这 个分量的阈值,例如,maxBpc–qLevel,那么可以为这个分量选择MPP。

此外,编码器可以选择MPP,以便实施最小的数据速率,以防止下 溢。

量化

从相应的输入样本中减去像素的每个样本的预测值,以形成残差样本 值E,像素的每个分量具有一个值。

E=x–Px,其中,x是输入,Px是预测值。

可以使用由作为2的幂的除数截断的除法,并且使用通过小于除数的 一半的四舍五入值(即,1)进行的四舍五入,量化每个残差值E。

If E<0QE=(E-ROUND)/DIVISOR

Else QE=(E+ROUND)/DIVISOR

//"/"运算符是通过截断进行的除法,与在C语言中一样。

其中:

DIVISOR=2**qLevel=1<<qLevel

ROUND=DIVISOR/2-1

对于亮度和色度,qLevel的值可以不同,并且由速率控制(RC)函 数决定。

可以检查MPP量化残差,以确保其尺寸不超过阈值,例如,maxBpc –qLevel,其中,qLevel是分量类型(亮度或色度)的量化等级,并且maxVal 是分量类型的最大可能样本值。如果MPP残差超过这个尺寸,那么编码 器可以将该残差变成具有maxBpc–qLevel的尺寸的最近残差。

反向量化和重构

加密器可以遵循在解码器中使用的相同过程,以得到重构像素值。对 于使用MMAP、BP或MPP预测的像素,重构样本值可以是:

reconSample=CLAMP(predSample+(quantized_residual<<qLevel),0, maxVal);

其中,predSample是预测样本值,quantized_residual是量化残差, qLevel是分量类型(亮度或色度)的量化等级,并且maxVal是分量类型 的最大可能样本值。

平坦度QP覆盖

图22示出了用于编码器平坦度检查的原始像素的实例2200。如果即 将来临的输入像素比较平坦,以允许QP快速降低,那么编码器生成“平 坦度信号”。下面描述用于在语法中确定平坦度比特的编码器算法,与编 码器和解码器为了修改QP所遵循的算法一样。

编码器平坦度决定

一组4个连续的组称为超群。在编码之前,编码器检查每个超群,以 便确定(如果有的话)那些组是“平坦的”。第一超群以在图22中所示的 切片中的第二个组开始。可以连续地在切片内定义超群。包括一行的最后 一个组的超群可以缠绕在周围,以在后续的行上包括组。

可以在超群内为每个组单独地进行平坦度决定,并且该决定包括用于 每个组的“平坦度类型”(例如,略微平坦或非常平坦)的决定。使用原 始的未压缩图像的像素,可以进行两个平坦度检查。

平坦度检查1在图22中所示的样本之间为每个分量确定MAX和 MIN值。为每个分量确定flatQLevel值:

flatQLevel=MapQpToQlevel(MAX(0,masterQp-4));

所使用的masterQp值是用于位于正在测试的超群左边的第二组的速 率控制的值。MapQptoQIevel将masterQP值映射到用于亮度和色度的 qLevelY(亮度)和qLeveIC(色度)值中。例如,masterQP值0可以映 射到qLeveIC和qLevelY值0中,值1和2可以分别映射到qLeveIC值1 和2中,并且masterQP中的连续单元增大可以映射到在qLevelY与 qLeveIC之间交替的单元增大中。

如果用于任何分量的MAX–MIN大于(2<<(bits_per_component- 8)),那么非常平坦的检查未通过平坦度检查1;否则,通过该检查。如果 用于任何分量的MAX–MIN大于QuantDivisor[flatQLevel],那么略平坦 的检查未通过平坦度检查1;否则,通过该检查。

如果平坦度检查1指示该组略微平坦或者非常平坦,那么该结果是用 于该组的最终结果。如果都未通过,那么在图22中指示的6个像素之上 进行平坦度检查2。与在平坦度检查1中一样,进行相同的比较,除了在 6个样本(而非4个)上计算MAX和MIN以外。然后,平坦度检查2的 最终结果用作该组的最终结果。

对于规定的超群,然后,具有不平坦、略微平坦或者非常平坦的四个 平坦度指示。如果先前的超群具有平坦度指示,那么prevlsFlat值初始化 为1;否则,初始化为0。以下算法用于将平坦度信息提取到单个平坦度 位置和类型内:

Loop over four groups in supergroup{

If!revlsFlat&&group is either very flat or somewhat flat

Current group and flatness type is signaled

Else

prevlsFlat=0;

}

如果未选择组,那么不进行QP修改,并且在熵解码器中,将超群的 flatness_flag设为0。如果选择组,那么将超群的flatness_flag设为1,并 且用信号传输相应的组,与在比特流中的first_flat组及其相关的 flatness_type一样。如果masterQp值在flatness_min_qp和flatness_max_qp 的范围内,那么熵编码器仅仅用发信号告知flatness_flag,因此,如果相 应的masterQp超出范围,那么在RC内不进行任何调整。

编码器平坦度搜索不跨越到下一行。如果在超群内的一个组落在下一 行上,那么不将其视为平坦。然而,一行的第一组可以包含 next_flatness_flag语法元素,假设语法允许其在这个点(见部分错误!未 发现参考源(Error!Reference source not found.))。

平坦度QP调整

编码器和解码器对组做出了相同的QP调整,其中,做出了平坦度指 示。RC接收与超群内的特定组对应的可以为“略微平坦”或“非常平坦” 的平坦度信号。应注意的是,如果当前的masterQp小于7<<(2 *(bits_per_component-8)),那么可以假设平坦度指示“略微平坦”。

对于“非常平坦”的信号,如下调整QP:

masterQp=1<<(2*(bits_per_component-8));

对于“略微平坦”的信号:

masterQp=MAX(stQp-4,0);

如果特定组没有平坦度信号,那么:

masterQp=stQp

如果平坦度QP覆盖修改masterQp,那么修改的masterQp用作在下 一个RC周期上的短期速率控制的起始点。

缓冲器模型和速率控制

除了上述实现方式以外或者作为上述实现方式的扩展,例如,参照图 7,接下面描述一些额外的速率控制技术。在一些实现方式中,编码器和 解码器确保完整的图像在固定数量的比特内配合。所描述的虚拟缓冲器模 型采用所定义和所控制的比特率/像素和比特率/单位时间。在一些实现方 式中,每个图片的比特总数可以比像素数乘以比特/像素的乘积大高达缓冲 模型的尺寸。在一些实现方式中,编码器将整个编码图片尺寸限制为像素 数乘以比特/像素率的乘积。在这方面,可以编码整个图片,以便可以在等 于图像中行数的多个行时间上传送,并且在那些行内,每个像素时间可以 具有固定的或限制比特数。

上述虚拟缓冲器模型的一个变型例是,对编码器和/或解码器使用的 缓冲器模型的充溢度增大充溢度偏移。可以算法规定充溢度偏移的值。预 先确定从开始编码到开始传输的延迟以及从开始接收到开始解码的延迟。 例如,初始传输延迟可以是一个行时间,并且初始解码延迟可以是一个行 时间,而缓冲器模型尺寸可以足够大,以便按指定的传输速率容纳6个行 时间。

在这个实例中,充溢度偏移可以具有5*R*TI(5*指定速率*一个行 时间)的初始值。由于偏移造成缓冲其模型的底部5*R*TI部分不可使用, 所以这促使编码器确保缓冲器模型的充溢度不超过1*R*TI。然后,编码 器可以将偏移值减小,针对每个预定像素数减少预定量(例如,每个像素 一次,或者每3个像素的组一次,或者其他量)。例如,可以选择偏移值 减小的预定量,以便在第一行视频结束时,偏移变成4*R*TI。结果,编 码器可以用于编码第一行的最大比特数是2*R*TI,并且结果,确保在2 个行时间内完成第一行的传输,从开始传输开始。解码器在传输开始加上 任意延迟开始接收数据。稍后,解码器在一个行时间后(例如,初始解码 延迟)开始解码,并且在此时间的一个时间行后,解码器完成第一行的解 码。因此,解码器确保到需要数据的时间,接收解码第一行所需要的所有 数据。

编码器可以继续将充溢度偏移减少,例如,相同的预定比特数/像素, 直到偏移值达到0。在这个实例中,在第五行的结尾偏移达到0。偏移保 持0,直到偏移开始增大的另一个时间。例如,在从图像的结尾往上第五 行的行开始,充溢度偏移可以开始增大相同的预定比特数像素,并且继续 增大,直到在图像的结尾像素处达到值5*R*TI。由于充溢度偏移值,编 码器对图像完成编码,在缓冲器模型中具有不多于1*R*TI比特。可以在 1*TI或更少的时间内传输这个比特数。由于在这个实例中,解码器在开 始接收压缩数据1*TI之后开始解码图像,所以在数据接收的最后行时间 1*TI之后,完成对最后一行图像的解码。如上所述,编码图像结尾的所 有比特在1*TI内被传输并因此被接收,所以到需要的时候,解码器接收 到了图像的所有比特,包括图像的最后像素。

在这个实例中,在等于图像的行数的多个行时间内,以预定的速率R 传输图像的所有比特。缓冲器模型性能有助于整个图像的高质量编码,在 第一和最后一行具有大幅速率控制自由,并且其他行具有甚至更大的速率 控制自由。在缓冲器模型的尺寸是6*R*TI的这个实例中,对于除了前五 行和最后五行以外的所有图像,编码器具有利用缓冲器模型的整个6*R*TI 尺寸来有效地对图像内容编码的自由。

相同的技术可以应用于图像的区域中。例如,对于编码器将图像分成 固定数量的切片是可取的。每个切片可以具有基本上相同数量的行。例如, 在具有1080行的图像中,可以具有8个尺寸相同的切片,每个切片135 行。本文公开的技术可以用于确保在135个行时间内完全传送每个切片。 在以上解释中,切片的开始可以代替图像的开始,并且切片的结尾可以代 替图像的结尾。

速率控制的缓冲器模型将用于编码每个组或其他组样本的不同数量 的比特转换成规定的恒定比特率。在对每个组编码时,将用于编码该组的 比特数加到缓冲器充溢度中,并且从缓冲器充溢度中减去每个组待传输的 比特数。结果称为缓冲器模型充溢度,或者简称为bufferFullness。这个缓 冲器充溢度通过线性变换(例如,偏移和标度)进行修改,以产生称为 rcModelFullness的值。变换可以将额外比特分配给每个切片的第一行,并 且将较少的比特分配给其他行,以便在每个切片结尾,将编码器缓冲器内 的最大比特数限制为任何规定的界限。第一行分配和切片界限的结尾可配 置。

由于每组指定数量的比特可以包括分数分量,所以在CBR操作中, 每组从缓冲器模型中去除的比特数在一个组到下一个组可以略有出入。指 定bits_per_pixel率可以使用4个分数位,例如,提供每个像素1/16比特 的分辨率。如果指定每组的比特数是整数,那么每组从缓冲器模型中移除 的比特数等于指定的整数。如果分数分量并非0,那么每组移除整数个比 特得到的分数残差被保持并且应用到下一个组中。

在一个实现方式中,rcModelFullness可以限定为使用负值,其中,空 状态由-rc_model_size的值表示,并且满状态由0值表示。RC算法可以设 计为将rcModelFullness值保持在空(例如,-rc_model_size)与满(例如, 0)之间。偏移值rcXformOffset和标度值rcXformScale被设计为将始终非 负的实际缓冲器充溢度bufferFullness转换成速率控制缓冲器模型充溢度 rcModelFullness。如下面所述,空等级在数字上是负并且满等级是0的原 因涉及设计线性转换的方式。

RC算法动态选择量化参数(QC),以在其有效范围内保持 rcModelFullness,并且优化主观质量。通常,RC试图用大约目标数量的 比特编码每个组,而编码每个单独的组所消耗的比特数可以能幅变化。这 种行为允许有效地编码异常困难的图像特征;这有助于在图像上保持几乎 相同的主观质量,而不浪费比特。

在图23中显示了速率控制技术2300的整体结构。整体技术包括缓冲 等级跟踪器2350、线性转换2352、参数选择2354以及QP调整2356。下 面详细描述其中的每个。

上述速率控制技术对于稳态操作非常良好,例如,在编码器对整个图 像编码时。下面描述的切片速率控制技术解决了对图像的初始部分(例如, 切片的第一行)编码的问题,同时满足对每个切片的总比特数num_pixels *bpp(比特/像素率)的限制。

上述速率控制技术的一种自适应是保持比特总数小于或等于规定数 量的像素(num_pixels)乘以bpp的乘积。在一个实现方式中,通过在编 码最后一个像素时限制编码器的缓冲器内的比特数,并且根据这个限制, 延迟每个图片或切片的开始传输,这些技术可以这样做。切片可以具有一 行或多行的高度,其中,每行通常具有1个像素的高度。每个切片或图片 的初始部分(例如,第一行)的编码与切片的剩余行的编码共同优化。“切 片”可以包括整个图片是一个切片的情况。这些技术根据预测信息在第一 行的不可用性为第一行分配额外比特,并且相应地为在切片内的所有其他 行分配更少的比特。

编码器为第一行分配的额外比特数取决于用于每个切片的第一行实 现期望的主观质量等级的比特数并且取决于正在编码的内容。编码器可以 平衡这个数量和分配给剩余行的减少的比特数,以便满足total_bits<= num_pixels*bpp的约束条件。

待压缩的图像内容广泛地变化。为了确定在第一行和其他行的比特数 的值,可以检查代表性图像,例如,被视为难以编码的图像。经验证据指 示,例如,对于12bpp(比特/像素)恒定比特率编码,在第一行中的像素 均应平均分配额外的5bpp。即,用于编码在第一行中的像素的平均比特数 可以大约为17bpp。然而,串流率在CBR(恒定比特率)编码中保持12bpp。 CBR率表示离开速率缓冲器的比特的率,而用于编码每个像素的多个比特 进入速率缓冲器。对于编码不太具有挑战性的图像,可以获得充足的质量, 编码每个像素平均消耗更少的比特。对于不是特别难以适当地编码的图 像,无损地编码或者至少以降低的质量编码是可取的。

编码器可以实施上限,即,无论对每个图像编码多么困难,在每个切 片结尾,编码器缓冲器内的最大比特数。可以凭经验确定在每个切片结尾 解码器缓冲器内可以允许的最大比特数。实验表明,4kb(4,096比特)是 合适的值,但是可以根据应用,选择其他值,例如,2kb或8kb。

在一个实现方式中,速率控制适应功能利用编码器缓冲模型充溢度的 变换形成速率控制(RC)缓冲器模型充溢度。这两个值可以分别称为“实 际充溢度”和“RC充溢度”。变换可以是线性转变换,例如,乘以标度值 并且加上偏移值,或者可以是非线性变换。

RC充溢度影响量化步长或参数(QP)。具体而言,随着RC充溢度 的增大,QP也可以增大,并且编码单个像素的比特数总体上减少。随着 RC充溢度的减小,QP也减小,并且编码单个像素的比特数总体上增加。 编码器可以实现RC充溢度范围,并且对于任何给定范围,可以具有最小 QP和最大QP。下面的RC控制技术将每个像素的额外比特分配给第一行, 以帮助避免图像伪像,尤其是考虑到任何在先预测信息不能用于第一行, 以帮助第一行编码。这些技术可以给第一行分配每个像素的预定数量的额 外比特,造成第一行切片具有更好的编码一致性。对于后面的行,可以去 除每个像素预算的额外比特。

在一个实现方式中,RC充溢度的值可以计算为RC充溢度=(实际的 充溢度+偏差)*比例。

缓冲等级跟踪器

图24示出了缓冲等级跟踪器2350的实例。

codedGroupSize输入2402是熵编码器或熵解码器的输出,指示用于 编码前一个组的比特数。bitsPerGroup输入2404是给每个组分配的比特数, 如果bits_per_pixel包含非零分数比特,那么该比特数可以通过+/-1而变化:

bpgFracAccum+=(3*bits per pixel)&Oxf;//4fractional bits

if(groupCount<initial enc delay)

bitsPerGroup=0;

else

bitsPerGroup=floor(3*bits per pixel)+(bpgFracAccum>>4);

bpgFracAccum&=Oxf;

如果vbr_enable等于1,那么如果最终的修改值小于0,那么 bufferFullness输出2406固定为0。在这种情况下,forceMpp输出2408可 以始终是0。

如果vbr_enable等于0,那么比特填充检测逻辑2410检查下一个组 是否可以潜在地造成下溢条件(例如,造成bufferFullness小于0)。如果 这样的话,那么forceMpp输出2408设为1,这表示熵编码器使用MPP模 式,以便保证最小的比特率或者防止缓冲器下溢。可以如下确定forceMpp 输出2408:

forceMpp=(groupCount>initial enc delay)&&(bufferFullness<ceil (bits_per_pixel*3)-3);

其中,groupCount是在0处开始每个切片并且增大每个组的计数器。 寄存器2412储存缓冲器充溢度的当前值。

图25示出了可以实现速率控制的编码器逻辑2500的实例。编码器逻 辑2500实现缓冲器模型2502、变换逻辑2504(其可以实现变换逻辑2352) 以及量化调整2506逻辑(作为实例,其可以实现逻辑2354和2356)。编 码器逻辑2500还包括产生偏移值2508的偏移值发生器2512以及生成比 例值2510的比例值发生器2514。实现方式可以是硬件、软件或这两者的 形式,并且下面进一步详细地描述。

为了说明速率控制,假设bpp速率是12bpp,每个切片的第一行应分 配17bpp,并且切片具有8行的高度。每个切片的比特总数是12bpp* slice_width*8行。由于为第一行分配17bpp,所以剩余行的预算是(12bpp *8lines-17bpp*1line)/(8-1)行,或者大约是11.29bpp。假设在每个切 片结尾,在缓冲器内允许的最大比特数=4kb(千比特)。与传输4kb对应 的像素时间数是ceiling(4096b/12bpp)=342像素时间。因此,初始传输延 迟设为342像素时间。换言之,在每个切片开始时,前342个像素时间不 传输任何数据,随后,对于等于切片中的像素数的大量像素时间,以12bpp 传输数据,包括在编码最后的像素之后的342像素时间。

对于第一行的前342个像素,数据以大约17bpp的速率累积在编码 器缓冲器内,总共大约342*17=5,814比特。假设图像宽度是1920个像 素,在第一行中具有1920-342=1,578额外像素。在这些像素编码时,期 望用于对每个像素编码的比特数平均为17bpp,而传输速率为12bpp,因 此,编码的数据以大约5bpp的速率累积在编码器缓冲器内。这个额外的 累积大约为1578*5=7,890比特。在这种情况下,在第一行的结尾在编 码器缓冲器内的比特的总累积数大约为5,814+7,890=13,704比特。

编码器可以使用偏移值发生器2512为偏移值2508生成值。发生器可 以产生偏移值,这些偏移值遵循轨迹,以便在切片或图片的编码中,实际 充溢度+偏差的总和在各个点处具有期望值。例如,继续以上实例,在编 码切片的前342个像素之后,预期的实际缓冲充溢度可以是5814比特, 并且期望的RC充溢度可以是2048比特,因此,紧接在编码第342个像 素之后,偏移值可以是2048-5814=-3766。在编码第一像素之前的偏移 值可以是0。在编码第一整行之后的预期的实际缓冲充溢度可以是13704 比特。如果期望的RC充溢度在这个点是2kb,那么偏移值可以是2048- 13704=-11656。在切片结尾,偏移值可以是0。偏移值可以从第一指定值 线性地进展为第二指定的值,然后,进展为后续指定的值。即,偏移值可 以在拐点之间分段成线性,例如,在图26中,从0到-3766、从-3766到 -11,656、从-11,656到0。要注意的是,以上实例使用正速率控制阈值(见 图28),并且在沿着偏移值的轨迹的任何指定的点,偏移值可以是负或正。 在其他实现方式中,速率控制阈值可以是负值阈值。在这种情况下,偏移 值可以严格地是负值,这是因为实际充溢度是非负的,并且负偏移值用于 使变换的充溢度值向下进入负阈值范围内。

编码器逻辑2500可以使用比例值发生器2514为比例值2510生成值。 比例值发生器2514可以被设计为产生遵循指定轨迹的比例值。例如,比 例值在切片的开始处可以是1,并且保持1,直到在切片内的某个像素, 然后,在切片结尾,线性进展成诸如2的另一个值。在图24的实例中, 在切片结束时,偏移值是0,并且比例值是2。结果,实际充溢度值4k产 生RC充溢度值8k。如果设计目标是将编码器缓冲器内的最大比特数限制 为4k,同时RC算法使用将RC充溢度限制为8k的控制算法,那么这是 可取。与偏移值2508一样,比例值2510可以在拐点之间分段成线性,例 如,在图26中,在一段时间保持1.0,然后,从1.0线性增大为2.0。比特 轨迹可以在实现方式之间不同。例如,在切片开始和结尾,比特轨迹可以 试图将有效速率控制阈值的底部保持为大约0。而且,这种比特轨迹的近 似值可以用于降低实现方式复杂度或出于其他原因。

图26示出了随着时间的比特轨迹2600的实例,如上所述,包括比例 参数2510和偏差2508。图26还说明了参数对RC充溢度2602的影响, 并且还显示了预期的最大实际缓冲器充溢度2604。如图所示,将17bpp (标称的12bpp加上额外的5bpp)分配给前342个像素,并且将5bpp 分配给这行的剩余部分。在时间段2650期间,比特累积在缓冲器内,用 于342像素的传输延迟,并且随后,在时间段2652期间,以12bpp离开 缓冲器。由于将17bpp分配给第一行,在时间段2652期间在缓冲器内以 5bpp累积。在第一行之后,在时间段2654期间,随着比特继续以12bpp 离开缓冲器时,所分配的bpp降低为低于12,并且实际缓冲充溢度相应地 下降。在切片结尾,在缓冲器内实际上依然保留2kb,但是由于比例值是 2.0,所以RC充溢度是4kb。并且用于第一行的额外比特预算可以广泛地 变化。例如,标称bpp的数量可以在6与24之间的范围内。

RC技术允许在切片结尾的实际缓冲充溢度非零。这有助于避免在切 片结尾重量化,重量化会造成视觉伪像。响应于图像内容,RC技术允许 速率缓冲器追踪到通常要去的地方。要注意的是,将比例值2510被应用 于缓冲充溢度。因此,比例值2.0将标称缓冲范围(例如,8kb)有效地 降低为更小的范围(例如,4kb)。即,在编码器希望真实的缓冲器充溢度 在更小的范围内追踪时,编码器可以应用比例值,以减小有效的缓冲范围。

或者,偏移值发生器2512可以被配置为生成偏移值,例如在切片结 尾偏移值达到4k。例如,在切片结尾的实际充溢度4k加上偏移值4k在切 片结尾产生RC充溢度值8k。

或者,偏移值2508可以遵循以负值(例如,-4k)结束的轨迹。在这 个实例中,RC算法可以具有从-8k到0的RC充溢度的有效范围,其中, -8k可以与空缓冲模型对应,并且0可以与满缓冲模型对应。比例值可以 遵循多个不同的轨迹。例如,一个轨迹从切片的开始具有大于或等于1的 值,然后,在对切片的内部编码时降低为(例如)等于1的值,然后,在 切片结尾增大为大于或等于1的比例值。

图27示出了对于不同类型的内容关于比例参数2510的偏差充溢度和 实际充溢度的一个实例2700。具体地,实例2700说明了被视为最糟糕情 况内容、困难内容、容易内容以及中等内容的偏差充溢度和实际充溢度。 在图27中引用“WC”表示“最糟糕情况”场景。

变换逻辑2504进行的比例值2510和偏移值2508的线性变换对切片 的过程中的缓冲充溢度进行管理。该变换逻辑具有三个主要功能:1)在 切片期间,包括初始延迟,保持质量恒定;2)为每个切片的第一行分配 额外比特;以及3)通过限制最终编码器缓冲器充溢度,确保切片在正确 数量的比特内编码。

图27示出了由比例值2510造成的范围压缩。在左边,以实际缓冲器 充溢度0到8kb的范围开始,并且在右边,以0到4kb的范围结束切片。 图27示出了位于第一行2702结尾的右边的比特轨迹。要注意的是,用于 ‘容易’内容的实际充溢度不低于0,但是,可以生成额外比特以保持实 际充溢度高于0。

在图27的下部,显示了缓冲器模型充溢度的范围0到-8k。下部显示 了在应用比例和偏差之后充溢度发生的情况以及充溢度如何落在范围内。

在一个实现方式中,线性变换逻辑2352或2504实现以下内容,其中, 比例值2510称为rcXformScale,并且偏移值2508称为rcXformOffset:

rcModelFullness=(rcXformScale*(bufferFullness+

rcXformOffset))>>3

rcXformOffset被设计为执行上面列出的功能。在整个切片中应用 rcXformScale因子,以将减小的实际缓冲器充溢度范围变换成切片结尾处 满缓冲器模型充溢度范围,对切片开始处的范围变换具有一定影响,并且 在切片的过程中逐渐改变变换,例如,在第一行之后开始。

编码器可以选择rcXformOffset值的负范围,以便产生rcModelFullness 的负范围。由于由粗糙量化乘以接近0的值造成的误差项产生几乎为0的 值,所以这样做,以便在几乎为满时,rcXformScale因子的粗糙分辨率对 rcModelFullness的值具有最小影响。rcXformScale因子量化误差反而移动 到rcModelFullness范围的空端,其中,具有微不足道的影响。

rcXformOffset值在已知的初始值initial offset-rc_model_size处开始每 个切片。每个组的rcXformOffset修改包括几个物体的叠加:

在一个实现方式中,在初始延迟期间,rcXformOffset以每组 (bits_per_pixel*3)比特的速率减小。

在整个切片期间,rcXformOffset以slice_bpg_offset速率增大。

在第一行切片期间,rcXformOffset以每组first_line_bpg_offset比特的 速率减小。

在非第一行切片期间,偏移通过每组nfl_bpg_offset比特的速率增大。

虽然在接近切片的结束之前,不可能实施这个限制,但是在非第一行 切片期间,可以防止rcXformOffset超过final_offset-rc_model_size。

例如,以11个分数位的精度跟踪rcXformOffset值。因此,以11个 分数位的精度,规定每组调整,例如,slice_bpg_offset或nfl_bpg_offset。 在切片开始,初始rcXformScale值设为initial_scale_value。因此,在切片 开始时,初始比例因子可以大于1。在切片开始,对于每个 scale_decrement_interval组,rcXformScale因子减小1,直到达到统一比 例。

由于每scale_increment_interval组,所以在切片的最后一行上, rcXformScale因子从(例如)8(以1/8为单位)开始平稳地增大(例如) 1。

rcXformOffset和rcXformScale的有效效应在于,根据分配在第一行 中的额外比特以及指定的初始传输延迟,允许缓冲器充溢度增大,以从第 一行的结尾开始直到切片的结尾,平稳地减小最大充溢度,并且确保在切 片的结尾,缓冲器内的比特数不超过initial_enc_delay*3*bits_per_pixel, 即,子流多路复用过程可以生成的最大填充比特数。

长期参数选择

如上所述,在编码器内包括长期参数选择逻辑2354。在长期参数选 择逻辑2354内,rcModelFullness的值可以分类为在多个范围中的一个中, 例如,在图28中所示的范围2800。这组范围由一组阈值确定。例如,可 以具有由14个阈值(rc_buf_thresh)和rc_model_size限定的15个范围。 对于每个范围,可以具有最小量化值(rc_min_qp)、最大量化值 (rc_max_qp)以及调整每组的目标比特的偏移(rc_bpg_offset)。

用于每个范围的rc_min_qp和rc_max_qp被配置为在RC缓冲器充溢 度等于或接近空时,RC将masterQp值设为0或接近0,并且在RC缓冲 器充溢度接近满时,RC增大masterQp值,在RC缓冲器充溢度接近满时, 最后达到将masterQp设为最大有效值的点。每组的目标比特数在RC充溢 度为空时最大,并且在RC充溢度为满时最小。

将rc_model_fullness与多个阈值比较,以确定其在15个范围中的哪 个中。每个范围具有用于短期速率控制的相关联的rc_min_qp、rc_max_qp 以及rc_bpg_offset。在一个实现方式中,编码器使用从-rc_model_size到0 的阈值,并且通过从一组正限定的阈值中减去rc_model_size,可以发现这 些值。可以假设每个阈值的6个LSB是0,以促进阈值比较功能的有效查 找表实现方式。

在缓冲器模型充溢度的每个范围的值minQp、maxQp以及bpgOffset 装有与和rcModelFullness对应的范围对应的rc_min_qp[]、rc_max_qp[]以 及rc_bpg_offset[]值。

短期参数选择

如上所述,在编码器内包括短期参数选择逻辑2356。短期参数选择 逻辑2356对QP进行调整,并且可以使用熵编码器的信息,以便对QP进 行最终调整。

短期参数选择逻辑2356可以实现在图29中所示的短期速率控制逻辑 以及在图30中所示的QP递增逻辑。参数minQP表示给定范围允许的最 小QP值。先前的QP(prevQp)的值是为先前的组生成的最近的主QP值 (masterQp)。在图30中,在此之前使用的masterQp称为prev2Qp。

逻辑2900确定每个组比特(BPG)的目标,tgtMinusOffset以及 tgtPlusOffset(2902)。根据测试2904、2906以及2908的结果,短期QP (stQP)改变。具体而言,stQP可以变为:先前的QP减去1和最小QP 除以2的最大值(2910)、先前的QP减去1和最小QP的最大值(2912)、 递增值(2914),或者可以保持在先前的QP(2916)。

图30(例如,与图29一起)示出了可以生成递增值的实例QP递增 逻辑3000(2914)。逻辑3000将当前QP设为最小QP和前一个QP的最 大值(3002)。根据测试3004、3006、3008、3010以及3012的结果,根 据两个选择中的一个,设置stQP。在第一选择中,将stQP设为当前QP (3014)。在第二选择中,将stQP设为最大QP和当前QP加上递增量的 最小值(3016)。如在以下段落中所述,可以确定递增量incrAmount。

rcXformBpgOffset值是对于每个切片中的第一行是正数并且对于在 切片中的所有其他行是负数的偏移,在内部计算该偏移:

if(first line of slice)

rcXformBpgOffset=first_line_bpg_offset;

else

rcXformBpgOffset=-floor(nf1_bpg_offset);

if(groupCount>=initial_enc_delay)

rcXformBpgOffset-=floor(slice_bpg_offset);

用于每组的目标比特数(例如,速率控制使用的目标活性等级)称为 rcTgtBitsGroup:

rcTgtBitsGroup=round(3*bits_per_pixel)+bpgOffset+ rcXformBpgOffset

除了响应于rcModelFullness以外,RC使用称为rcSizeGroup和 codedGroupSize的熵编码的值根据图像的活性(activity)的测度调整QP, rcSizeGroup和codedGroupSize是当前组之前的组的活性的粗糙测度。速 率控制计算每个组的高比特和低比特阈值:

tgtMinusOffset=rcTgtBitsGroup-rc tgt offset lo

tgtPlusOffset=rcTgtBitsGroup+rc tgt offset hi

比较codedGroupSize和rcSizeGroup值以及tgtMinusOffset和 tgtPlusOffset,以确定图像的局部区域的活性是在期望的范围内、低于期望 的范围还是高于期望的范围。还比较rcSizeGroup的值和表示每组的最小 可能比特数的常数3。基于这些比较,RC增大或减小QP,或者使QP不 改变,经受应用于每个范围的最小和最大QP界限。

如果rcModelFullness落在最顶部的范围内,那么QP可以自动设为用 于该范围的rc_max_qp,以免缓冲器上溢。在图30中显示了三个其他参数: rc_edge_factor、rc_quant_incr_limit1以及rc_quant_incr_limit0。

上面使用的参数的描述如下:

rcXformBpgOffset-如上所述确定的表示为切片的不同行选择的每组 比特的偏差的内部变量。

first_line_bpg_offset-这个值指定了为切片的第一行上的每组分配的 额外比特数。

nfl_bpg_offset-这个值指定了为切片的第一行之后的组中的每个组解 除分配的比特(包括分数比特)数。

slice_bpg_offset-这个值指定了为所有组解除分配的比特(包括分数比 特)数,以便实施切片约束(例如,最终充溢度不能超过初始编码器延迟 *每组比特)。

initial_offset-这个值指定了rcXformOffset的初始值,例如,该值是在 切片开始时的initial_offset-rc_model_size。

final_offset-这个值指定了rcXformOffset的最大切片结束值,例如, 该值是final_offset-rc_model_size。

rc_edge_factor-这个值可以与当前活性与先前活性的比率进行比较, 以便确定“边”的存在,这反过来确定QP是否在短期速率控制内递增。

rc_quant_incr_limit0-这个值可以是用于短期速率控制的QP阈值。

rc_quant_incr_limit1-这个值是可以用于短期速率控制的QP阈值。

rc_tgt_offset_hi-这个值指定在由短期速率控制允许的每组目标比特 周围的可变性范围的上端。

rc_tgt_offset_lo-这个值规定在由短期速率控制允许的每组目标比特 周围的可变性范围的下端。

可以根据以下内容确定QP的增量(incrAmount):

incrAmount=(codedGroupSize-rcTgtBitsGroup)>>1;

所产生的QP称为stQP,这可以由上面参照图22描述的平坦度QP 覆盖逻辑修改。

编码器将masterQp值映射到用于亮度和色度的qLevelY和qLevelC 值中。编码器可以实现各种各样的映射,在以下表格中显示了其中的一次。

返回上面参照图25记录的偏移和比例参数,并且提供一些特定的实 例,偏移值发生器2512和比例值发生器2514可以产生描述为线性轨迹的 值的粗糙近似值。例如,差分值可以加入用于每特定数量的像素的累加器 中。比例和偏移值以及使用这些值的操作可以具有指定的精度和分辨率。

作为一个具体实例,在切片的整个编码中获得大约2kb的RC充溢 度是可取地。如上所述,编码器可以将包括偏移和比例因子的线性变换应 用于实际充溢度,以产生RC充溢度。在整个第一行中,比例因子具有1.0 的值。在第一行的第一个像素中,偏移值=0并且比例值=1。虽然可以在 第一像素处可取地使用正偏移值,以便获得RC充溢度值2kb,但是对于 可以无量化损耗地潜在地编码的不太困难的内容,这不可取,因此,在这 个实例中,初始偏移值设为0。

在第一像素,由于比例因子是1并且偏移是0,所以RC充溢度等于 实际充溢度。在对前列像素集(例如,前342个像素)编码时,对于困难 的图像,实际充溢度以大约17bpp的速率增大。为了在前列像素集结尾实 现2kb的RC充溢度,在第342个像素处,偏移值从0线性减小为-(342*17) +2048=-3,766值。即,对于342*17=5,814比特的实际充溢度,应用偏 差-3,766,产生5,814-3,766=2,048比特的RC充溢度。在第一行的剩余 1920-342=1578像素编码时,对于这1578个像素,使偏移值以5bpp的速 率在第342个像素处从-3,766开始线性减小,从而RC充溢度再次保持为 大约2kb,在第一行结束时产生-3766-(5*1578)=-11,656的值。在第一行 结尾,预期用于编码第一行的比特数大约为1920*17=32,640,预期实际 充溢度大约为342*17+1578*5=13,704比特,并且所产生的RC充溢度大 约为13,704-11,656=2,048比特。

在编码第一行的结尾之后,例如,在开始编码第二行时,偏移值开始 从其初始值-11,656线性增大为在切片的最后像素处的最终值0。而且,虽 然为了编码困难图像的目的,在切片结尾,可能可取地将偏移设为正值, 但是可以优选地保持偏移值至少大于或等于0,以便能够无损地编码可能 通过可用的比特率无损地编码的图像或切片。如果比例因子在整个切片中 保持为1.0,并且实际充溢度在切片结尾是2kb,那么偏移0造成2kb的 RC充溢度值。然而,比例因子从第一行结尾处的1.0线性增大为在切片 结尾处的2.0。结果,2kb的实际充溢度值产生4kb的RC充溢度值。由 于在这个实例中,RC具有8kb的跨度,所以RC允许的最大RC充溢度 是8kb;这与4kb的实际充溢度对应,该实际充溢度与切片结尾处的最大 实际允许充溢度对应。

从第二行的开始到切片的结束的增大的偏移和增大的比例因子的组 合减少了可用于编码第二行的像素的比特预算,直到切片结束。如果正在 编码的内容在切片的最后像素处造成4kb的实际缓冲充溢度,那么第二到 第八行的比特预算是比特总数减去用于编码第一行的期望比特数除以剩 余的像素数(1920*8*12-1920*17)/(1920*7)或者大约11.29bpp,如上所 述。如果在切片结尾处的实际充溢度与在第一行结尾处的实际充溢度相 同,那么偏移值的调整造成11,656比特/(1920像素/行*7行)或者大约 0.867bpp的bpp预算减小,造成12-0.867或者大约11.133bpp的净bpp 预算。然而,如果在切片结尾的实际充溢度比在第一行结尾的实际充溢度 大2kb,即,在切片结尾的4kb对在第一行结尾的2kb,那么比特预算减 小(11,656-2048)/(1920*7),大约为0.715bpp,净减小12bpp-0.715bpp 或大约11.29bpp。比例因子增大为2.0,允许RC将在切片结尾的最大比 特数限制为4kb,而RC范围跨过8kb。对于在切片结束时或者即将结束 时不产生最大数量的比特(以便在没有比例因子时,实际充溢度较小)的 内容,比例因子可以具有很小的影响。

编码器可以被配置为在用于编码的比特总数小于目标数时,在产生在 切片内编码像素的最后比特之后,插入填充比特,从而精确地产生目标比 特数。目标比特数可以是切片中的像素的数量乘以比特/像素率的乘积。

在编码器中,通过将递增值加入累加器的每个像素、组或其他间距中, 偏移值发生器2512可以计算偏移值。例如,可以具有三个递增值,第一 值用于切片的第一传输延迟部分,第二值用于第一行的剩余部分,并且第 三值用于切片的剩余部分。如果每3个像素(一组)增加偏差,那么在前 342个像素中具有114组,与初始传输延迟对应。在此处的实例中提供的 值造成大约为-33.035的第一递增值。可以选择充足的递增精度,以便在 初始传输延迟结束时的偏移值足够接近期望值-3766;该精度不需要精确。 例如,如果允许1%或大约38的误差,那么递增值可以与理想的递增值 相差38/114=0.333。使用二进制算法,可以规定递增1分数比特,以便 最大误差是0.25。因此,第一递增值可以是-33.00。然后,在传输延迟间 距结束时产生的偏移值是-342*33.0=-3,762。在这个实例中,第二递增值 是[-11,656-(-3762)]/(1920/3-114)或者大约为-15.008。如果再次允许最 大误差为1%(116),那么递增误差可以高达116/526组=0.22。可以规定 递增2分数比特,以便最大误差是0.125。因此,第二递增值可以是-15.00。 然后,在第一行结束时产生的偏移值是-3,762-526*15=11,652。第三递增 值应是11,652/(1920/3*7)或者大约为2.6009。如果允许最大误差为100 (例如),那么递增误差可以高达100/(1920/3*7)=100/4,480或大约 0.0223。可以规定递增5分数比特,以便最大误差是0.015625。第三递增 值可以在底部10中规定为2.59375或者在底部2中规定为10.10011。在切 片结束时所产生的最终偏移值是-11652+11620=-32。这个值在公设的允 许界限内。

比例值发生器2514可以通过相似的方式确定比例值2510。在一个实 现方式中,比例因子2510可以在7*1920/3=4480组的行上从1.0增大为 2.0。增量可以是1/4480或大约0.223215E-3。如果在负方向的最终比例值 的最大误差是0并且在正方向的最大误差为(例如)2%,那么最大递增 误差是0.02/4480或大约为4.464E-6。这表示规定增量,以便其最低有效 位与2**-18对应,造成最大正误差~3.815E-6。增量所需要的最高有效位 与2**-13对应,总共具有6个有效位。每组累积这种增量的加法器可以 使用20比特。

或者,可以不太频繁地更新比例因子2510的计算,例如,每64组。 在这种情况下,具有7*(1920/3)/64=70个递增步骤。通过这种形式, 与以上的每组方法相比,递增值可以仅仅向左移动6比特,并且累积加法 器可以具有20-6=14比特。

递增比例因子2510的另一个替换的方法是使用简单的常数(例如,1) 递增,选择间距,以产生期望的结果。例如,8比特计数器可以用于计算 在1.0与2.0之间的值。例如,对于每4480/256组,即,每17.5组,这个 计数器可以递增,通过使每17或18组递增,可以密切地接近该计数器, 间距使每个增量交替。可以通过5比特计数器以及少量逻辑实现这种交替 的间距。

相同的方法可以用于其他特定的设计操作中。例如,8bpp的比特率 以及8+4=12bpp的第一行分配。使用从这些参数中获得的值,代替在以 上实例中的很多特定值,并且操作可以基本上相同。

对于在特定标准或产品中的利用,相关参数可以提前规定并且构建到 实现方式内,或者一个或多个参数可以在软件内计算并且载入实现方式 内。在一个实现方式中,系统的编码器侧在与每个图片一起传输的配置报 头中计算参数并且规定这些参数,以便解码器可以直接装载和利用在报头 内的值,而不要求在系统的解码器侧中进行软件交互作用。

图31示出了在解码器中的子流多路分解逻辑3100的一个实例。在多 路分解逻辑3100中,速率缓冲器3102馈送多路分解器3104。多路分解器 3104将元件(例如,Y、Co、Cg)样本提供给漏斗移位器3106、3108以 及3110。漏斗移位器3106、3108以及3110的输出依次将数据提供给熵解 码器3112、3114以及3116。速率控制逻辑3118协调熵解码器3112、3114 以及3116的操作。

多路分解器3104从每个漏斗移位器(3106、3108或3110)中接收请 求,指示需要多路复用字。如果当前漏斗移位器充溢度减去解码的语法元 素尺寸小于最大的语法元素尺寸,那么发送请求信号。对于任何规定的组 时间,可以发生0、1、2、或3请求。如果坚持在规定的组时间内具有多 个请求,那么在切片中的多路复用字的顺序是muxWordY,然后是 muxWordCo,然后是muxWordCg。

如果vbr_enable等于0,那么多路分解器清除在切片结束时增大的任 何零填充比特,以将切片填充到总压缩尺寸上限(slice_width*slice_height *bits_per_pixel)中。如果将vbr_enable设为1,那么从切片的端部中不去 除任何填充比特。

熵解码

在多路分解之后,熵解码器3112-3116解析输入的比特流的比特。多 路分解图片层,以提取每个切片的切片层比特。子流多路分解器将切片层 数据多路分解成3个子流。熵解码器解析子流层。

可以依次处理在子流内的每个组。在与平坦度确定相关联的亮度单元 的开始,一些组具有条件比特。一旦处理了每个组,熵解码器就将残差和 ICH索引数据发送给像素重构和ICH块体。熵解码器将为整个组解析的总 比特数(codedGroupSize)以及(如果最佳地预测尺寸)所使用的比特数 (rcSizeGroup)输出给速率控制。

在处理每个组之后,将所产生的残差和ICH选择传递给重构和ICH 块体。

每行可以在组界限上开始。如果切片宽度不能被3整除,那么每行的 最后一组可以包括不到3个像素。然而,熵解码器可以依然在P模式中解 析3个残差并且在ICH模式中解析3个历史索引。虽然在切片的边缘之外 的像素没有产生任何像素数据,那么P模式残差依然用于计算下一个预测 尺寸的目的。

如果输入速率缓冲器溢流,那么解码器可以将溢流视为误差条件。在 解码时,解码器可以计算比特,并且如果熵解码器试图在切片数据结束之 后解析比特,那么解码器可以标记误差条件。切片数据长度固定(如果 vbr_enable设为0)或者可变,并且通过传输传送给解码器(如果vbr_enable 设为1)。

速率控制

速率控制逻辑3118可以实现与在编码器中实现的速率控制相同的速 率控制。编码器和解码器速率控制在每个组中产生相同的QP值。

解码器速率控制逻辑3118可以运行,仿佛该逻辑是编码器速率控制 逻辑。对于每个组,在编码器编码该组并且将用于编码该组的比特数加入 其缓冲模型充溢度中的情况下,解码器在解码组时,将相同的比特数加入 其缓冲模型充溢度中。在编码或解码相同的组时,编码器和解码器RC算 法减去相同数量的比特。

解码器RC缓冲模型与编码器RC缓冲模型相同。然而,解码器的操 作背景与编码器的操作背景不同。解码器具有速率缓冲器3102,该缓冲器 可以与编码器缓冲模型不同。

要解码的比特流(减去PPS)进入解码器速率缓冲器3102,并且在 解码比特时,解码器从速率缓冲器3102中去除比特。这与RC缓冲模型 操作的意义相反。在每个切片开始时,在开始解码切片之前,解码器在其 速率缓冲器中为initial_dec_delay组时间累积比特。一旦解码开始,RC函 数就与在编码器中一样运行,包括initial_enc_delay函数。

通过熵解码器3112–3116,将平坦度信息传输给解码器RC。在先前 的超群中用信号传递用于规定的超群的平坦度信息,以简化熵解码和定 时。如果用于规定的超群的flatnessFlag是0,那么不进行任何QP调整。 如果flatnessFlag是1,那么flatnessGroup用信号通知这四个组中的哪个需 要QP调整,并且flatnessType指示该内容是略微平坦还是非常平坦。如 果由于QP太低,所以不在比特流中明确地用信号传递flatnessType,那么 假设flatnessType是0(略微平坦)。通过上述用于平坦度QP调整的相同 方式,进行调整。

行存储器

与编码器一样,解码器可以实现行存储器。在解码器中的行存储器可 以与上面为编码器描述的行存储器相似或相同。

预测和重构

在解码器中的预测和重构功能可以与编码器的相应功能匹配。

预测类型

解码器预测类型与编码器中的预测类型相同:MMAP、BP以及MPP。

预测类型选择

不需要在比特流中用信号显式传递预测类型,因此,编码器和解码器 可以遵循相同的过程,以确定每个组用哪个预测类型。如果解码器支持块 预测,那么可以具有在BP与MMAP之间选择的逻辑;如果解码器不支持 块预测或者在PPS中将bp_enable设为0,那么决不选择BP,而是使用 MMAP。如果解码器不支持块预测并且在PPS中将bp_enable设为1,那 么流不可解码,并且解码器要通过合适的方式处理误差。

在BP与MMAP之间的选择

编码器和解码器可以执行相同的算法,以在BP与MMAP之间进行 选择。

在BP/MMAP与MPP之间的选择

在比特流中发信号告知在BP/MMAP与MPP之间的选择。用于 DSU-VLC编码的尺寸确定在解码器中使用MPP还是BP/MMAP。如果对 于某个分量,尺寸等于maxBpc–qLevel,那么对于在该组中的所有三个 样本,使用MPP预测该分量。否则,对于在该组中的所有三个样本,BP 或MMAP用于该分量。

图32示出了解码器中的索引颜色历史(ICH)逻辑3200。对于每个 组,解码器可以与编码器具有相同的对像素的ICH值的映射。解码器历史 缓冲器3202可以与编码器历史通过相同的方式构造。用于更新ICH的解 码过程可以与用于更新ICH的编码过程相同。

对于每个组,熵编码表示是否选择ICH。如果选择ICH,那么熵解码 器还提供3个历史索引。编码器和解码器可以保持相同的ICH状态,因此, 更新过程可以遵循上面识别的过程。

颜色空间转换

显示流编码可以使用标记为Y、Co以及Cg的分量,或者可以使用 标记为Y、Cb以及Cr的分量。如果convert_rgb标志在当前的PPS内等 于0,那么解码器可以产生YCbCr输出,而不进行颜色空间转换。可以将 Cb分量映射到Co分量标签中。可以将Cr分量映射到Cg分量标签中。在 这种情况下,Cb/Co和Cr/Cg分量的位深度可以等于Y分量,Y分量的位 深度使用在当前的PPS内的bits_per_component字段指定。

如果convert_rgb标志在当前的PPS内等于1,那么解码器可以进行 从YCoCg到RGB的颜色-空间转换。首先,Co和Cg值可以重新以0为 中心:

cscCg=Cg-(1<<bits_per_component)

cscCo=Co-(1<<bits_per_component),

其中,bits_per_component是R、G以及B分量中的每个的比特数, 该比特数小于Co和Cg分量的每个分量的比特数。

最终的CSC可以是:

t=y-(cscCg>>1)

cscG=cscCg+1cscB=t-(cscCo>>1)

cscR=cscCo+cscB

可以限制最终的R、G以及B值的范围:

R=CLAMP(cscR,0,maxVal)

G=CLAMP(cscG,0,maxVal)

B=CLAMP(cscB,0,maxVal)

其中,maxVal=((1<<bits_per_component)-1)。

如果切片在图片的右边缘之外延伸,那么可以丢弃所产生的解码像 素。如果切片在图片的底部边缘之外延伸,那么可以丢弃所产生的解码像 素。

误差处理

如果检测到误差条件,那么解码器可以输出像素数据,直到切片的结 尾。这种像素数据可以具有任何任意值。解码器可以在依然在切片内的速 率缓冲器内丢弃任何压缩比特,解码器可以重新开始解码下一个切片,并 且在切片内发生误差,不需要影响任何其他切片的解码。

可以以硬件、软件或硬件和软件的多个不同组合的多种不同的方式实 现上述方法、装置以及逻辑。例如,系统的全部或部分可以包括控制器、 微处理器或专用集成电路(ASIC)内的电路,或者可以通过离散逻辑或元 件或者其他类型的模拟或数字电路的组合实现,在单个集成电路上组合或 者在多个集成电路之中分布。上述所有或部分逻辑可以作为指令实现,用 于由处理器、控制器或其他处理装置执行,并且可以储存在有形的或永久 的机器可读或计算机可读介质内,例如,闪速存储器、随机存取存储器 (RAM)或只读存储器(ROM)、可擦可编程只读存储器(EPROM)或 其他机器可读介质(例如,光盘只读存储器(CDROM)或磁盘或光盘))。 因此,计算机程序产品等产品可以包括存储介质以及储存在该介质上的计 算机可读指令,在端点、计算机系统或其他装置中执行时,这些指令促使 装置根据任何以上描述执行操作。

系统的处理能力可以分布在多个系统元件之间,例如,在多个处理器 和存储器之间,可选地包括多个分布的处理系统。参数、数据库以及其他 数据结构可以单独地储存和管理,可以包含在单个存储器或数据库内,可 以通过多种不同的方式在逻辑上和在物理上组织,并且可以通过多种方式 实现,包括数据结构,例如,链表、哈希表或隐式存储机制。程序可以是 单个程序、单独程序的一部分(例如,子程序),分布在几个存储器和处 理器之上,或者通过多种不同的方式实现,例如,以程序库的方式,例如, 共享库(例如,动态链接库(DLL))。例如,DLL可以储存执行上述任何 系统处理的代码。

特别描述各种实现方式。然而,还能够具有很多其他实现方式。

例如,编码器或解码器可以包括:

缓冲等级跟踪器,包括缓冲器充溢度输出;

线性转换逻辑,与缓冲器充溢度输出耦接,并且包括:

偏移值发生器,包括偏移值输出;

比例值发生器,包括比例值输出;以及

变换逻辑,被配置为响应于偏移值输出和比例值输出,将线性变换应 用于缓冲器充溢度输出中,以获得修改的缓冲器充溢度输出;

多级式量化选择逻辑,包括:

修改的缓冲器充溢度到量化参数范围的映射;以及

参数调整逻辑,被配置为响应于先验编码结果以及量化参数QP的先 验值,在量化参数范围内获得量化参数QP。

在编码器或解码器内:

偏移值输出可以包括分段线性偏移值;

比例值输出可以包括分段线性比例值;以及

与具有预测信息的后续图像线相比,线性变换可以被配置为促使将每 个像素的额外比特分配给没有预测信息的图像行。

此外,编码和解码可以包括对图像切片的行编码,并且变换可以包括 将分段线性偏移值应用于充溢度值中,将分段线性比例因子应用于充溢度 值中或者这两者。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号