首页 / 专利库 / 电脑编程 / 计算机编程 / ρ域速率控制的变化的方法、系统及计算机可读存储器

ρ域速率控制的变化的方法、系统及计算机可读存储器

阅读:1021发布:2020-06-29

专利汇可以提供ρ域速率控制的变化的方法、系统及计算机可读存储器专利检索,专利查询,专利分析的服务。并且给出了用于 视频编码 或其他媒体编解码的ρ域速率控制的变化。例如,在一些变化中, 编码器 至少部分基于媒体单元的比特分配来设置单元的ρ值。编码器还使用具有多个 位置 相关尺度因子的 频率 变换来计算单元的变换系数,使用量化参数(“QP”)值与ρ值的映射来设置单元的QP值,并且在单元的变换系数的量化期间使用单元的QP值。当QP‑ρ映射被确定时,使用与多个位置相关尺度因子近似的位置无关尺度因子和/或集成某些缩放操作,这降低了计算复杂度,同时仍然支持精确的速率控制决策。速率控制的这种变化的实现可以利用用于高速缓存和并行计算的机会。,下面是ρ域速率控制的变化的方法、系统及计算机可读存储器专利的具体信息内容。

1.一种在实现编码器计算机系统中的速率控制的方法,包括:
编码当前单元以产生编码数据,包括:
至少部分基于所述当前单元的比特分配来设置所述当前单元的ρ值;
使用具有多个位置相关尺度因子的频率变换来计算所述当前单元的变换系数,其中所述多个位置相关尺度因子分别取决于所述变换系数的系数位置(i,j),并且其中位置是变换系数在所述当前单元的内的系数位置(i,j);
使用候选量化参数(“QP”)值与针对所述候选QP值的对应ρ值之间相应的QP-ρ映射来设置所述当前单元的QP值,所述QP-ρ映射的所述对应ρ值已经使用与如下多个位置相关尺度因子近似的单个位置无关尺度因子来被确定,所述多个位置相关尺度因子在计算所述变换系数时被使用;以及
在所述当前单元的所述变换系数的量化期间使用所述当前单元的所述QP值;以及输出所述编码数据。
2.根据权利要求1所述的方法,其中所述当前单元是图片组、图片、宏块组、宏块、编码单元或块。
3.根据权利要求1所述的方法,其中所述比特分配(a)单独地针对所述当前单元被设置、或者(b)针对包括所述当前单元的较大区域被设置并且针对所述当前单元被按比例分配,并且其中所述比特分配取决于以下一项或多项:(a)所述当前单元或者所述较大区域的复杂度,(b)所述当前单元或者所述较大区域的内容分类,(c)所述当前单元或者所述较大区域的编码类型,(d)可用比特率,以及(e)所述编码器的编码数据缓冲区的缓冲区饱和度
4.根据权利要求1所述的方法,其中所述设置所述当前单元的所述ρ值使用比特分配的候选值与针对所述比特分配的候选值的对应ρ值之间相应的比特-ρ映射,所述比特-ρ映射包含斜率值,所述斜率值取决于每个非零值系数的比特数,所述斜率值至少部分基于一个或多个先前单元的非零量化变换系数的比特率结果和计数。
5.根据权利要求1所述的方法,其中所述位置无关尺度因子是以下中的一项:
所述多个位置相关尺度因子的平均;
所述多个位置相关尺度因子的加权平均;以及
所述多个位置相关尺度因子的中值。
6.根据权利要求1所述的方法,其中针对所述候选QP值中的每个候选QP值,如果在量化期间该候选QP值被使用,则所述QP-ρ映射包括ρ值。
7.根据权利要求1所述的方法,还包括确定所述QP-ρ映射,包括:针对所述候选QP值中的每个候选QP值,
针对所述候选QP值,统计(a)所述变换系数中有多少变换系数被估计为会被量化为零,或者(b)所述变换系数中有多少变换系数被估计为不会被量化为零;以及设置针对所述候选QP值的ρ值。
8.根据权利要求7所述的方法,其中所述确定所述QP-ρ映射还包括:
对于所述当前单元的所述变换系数中的每个变换系数,估计所述变换系数被量化为零时的第一QP值;
其中所述统计使用针对所述当前单元的相应变换系数的所述估计的结果。
9.根据权利要求8所述的方法,其中所述估计所述变换系数被量化为零时的所述第一QP值包括:
将所述变换系数与所述位置无关尺度因子相乘;以及
将所述相乘的乘积调整到QP尺度。
10.根据权利要求8所述的方法,其中所述估计所述变换系数被量化为零时的所述第一QP值在精度平内以在数学上等同于以下等式的方式被执行:
QPfirst=6×log2(c×m)+6,
其中c是所述变换系数,m是所述位置无关尺度因子,并且QPfirst是所述变换系数被量化为零时的所述第一QP值。
11.根据权利要求1所述的方法,其中所述编码还包括使用专用集成电路图形处理单元或者在中央处理单元上执行的单指令多数据指令来确定所述QP-ρ映射。
12.一种计算机系统,包括处理器、存储器和储存装置,其中所述计算机系统被配置为实现编码器,所述编码器包括:
频率变换器,被配置为使用具有多个位置相关尺度因子的频率变换来计算当前单元的变换系数,其中所述多个位置相关尺度因子分别取决于所述变换系数的系数位置(i,j),并且其中位置是变换系数在所述当前单元的块内的系数位置(i,j);
量化器,被配置为使用所述当前单元的量化参数(“QP”)值来量化所述当前单元的所述变换系数;以及
速率控制器,被配置为:
至少部分基于所述当前单元的比特分配来设置所述当前单元的ρ值;以及使用候选QP值与针对所述候选QP值的对应ρ值之间相应的QP-ρ映射来设置所述当前单元的所述QP值,所述QP-ρ映射的所述对应ρ值已经使用与如下多个位置相关尺度因子近似的单个位置无关尺度因子来被确定,所述多个位置相关尺度因子在计算所述变换系数时被使用。
13.根据权利要求12所述的计算机系统,其中所述位置无关尺度因子是以下中的一项:
所述多个位置相关尺度因子的平均;
所述多个位置相关尺度因子的加权平均;以及
所述多个位置相关尺度因子的中值。
14.根据权利要求12所述的计算机系统,其中针对所述候选QP值中的每个候选QP值,如果在量化期间该候选QP值被使用,则所述QP-ρ映射包括ρ值。
15.根据权利要求12所述的计算机系统,其中所述速率控制器还被配置为确定所述QP-ρ映射,包括:针对所述候选QP值中的每个候选QP值,
对于所述候选QP值,统计(a)所述变换系数中有多少变换系数被估计为会被量化为零或者(b)所述变换系数中有多少变换系数被估计为不会被量化为零;以及设置针对所述候选QP值的ρ值。
16.根据权利要求15所述的计算机系统,其中所述速率控制器还被配置为在确定所述QP-ρ映射时执行:
对于所述当前单元的所述变换系数中的每个变换系数,估计所述变换系数被量化为零时的第一QP值;
其中所述统计使用针对所述当前单元的相应变换系数的所述估计的结果。
17.根据权利要求15所述的计算机系统,其中所述速率控制器被配置为使用专用集成电路、图形处理单元或者在中央处理单元上执行的单指令多数据指令来确定所述QP-ρ映射。
18.一种其上编码有计算机可执行指令的计算机可读存储器或存储设备,所述计算机可执行指令用于使计算机系统在由其编程时执行速率控制,所述速率控制包括:
至少部分基于当前单元的比特分配来设置所述当前单元的ρ值;
使用具有多个位置相关尺度因子的频率变换来计算所述当前单元的变换系数,其中所述多个位置相关尺度因子分别取决于所述变换系数的系数位置(i,j),并且其中位置是变换系数在所述当前单元的块内的系数位置(i,j);
确定候选量化参数(“QP”)值与针对所述候选QP值的对应ρ值之间相应的QP-ρ映射,包括在确定所述QP-ρ映射时使用单个位置无关尺度因子来缩放所述当前单元的相应变换系数,所述单个位置无关尺度因子与在计算所述变换系数时被使用多个位置相关尺度因子近似;以及
使用所述QP-ρ映射来设置所述当前单元的QP值;以及
在所述当前单元的所述变换系数的量化期间使用所述当前单元的所述QP值。
19.根据权利要求18所述的计算机可读存储器或存储设备,其中所述确定所述QP-ρ映射包括:
针对所述当前单元的所述变换系数中的每个变换系数,估计所述变换系数被量化为零时的第一QP值,包括将所述变换系数与所述位置无关尺度因子相乘;以及针对所述候选QP值中的每个候选QP值:
对于所述候选QP值,统计(a)所述变换系数中有多少变换系数被估计为会被量化为零或者(b)所述变换系数中有多少变换系数被估计为不会被量化为零,其中所述统计使用针对所述当前单元的相应变换系数的所述估计的结果;以及
设置针对所述候选QP值的ρ值。
20.根据权利要求18所述的计算机可读存储器或存储设备,其中所述位置无关尺度因子是以下中的一项:
所述多个位置相关尺度因子的平均;
所述多个位置相关尺度因子的加权平均;以及
所述多个位置相关尺度因子的中值。

说明书全文

ρ域速率控制的变化的方法、系统及计算机可读存储器

背景技术

[0001] 工程师使用压缩(也称为源编解码(source  coding)或源编码(source encoding))来降低数字视频的比特率。压缩通过将信息转换为较低比特率形式来降低存储和传输视频信息的成本。压缩可以是无损的,在这种情况下,视频在被重构时的质量不受影响、但是比特率的降低受视频复杂度的限制。或者,压缩可能是有损的,在这种情况下,所重构的视频的质量受到影响、但是比特率的降低更显著。解压缩(也称为解码)从压缩形式重构原始信息的版本。“编解码器”是编码器/解码器系统。
[0002] 在过去二十年中,已经采用了各种视频编解码器标准,包括ITU-T H.261、H.262(MPEG-2或ISO/IEC 13818-2)、H.263和H.264(MPEG-4 AVC或ISO/IEC 14496-10)标准、MPEG-1(ISO/IEC 11172-2)和 MPEG-4视觉(ISO/IEC 14496-2)标准、以及SMPTE 421M(VC-1) 标准。最近,ITU-T H.265标准(H.265、HEVC或ISO/IEC 23008-2) 已经获得批准。H.265标准的各种扩展正在开发中。视频编解码器标准通常定义了用于编码视频比特流的语法(syntax)的选项,以当在编码和解码中使用特定特征时详细描述比特流中的参数。在很多情况下,视频编解码器标准还提供了与解码操作有关的细节,这些解码操作是解码器应该执行以在解码时实现符合的结果的操作。除了编解码器标准,各种专有编解码器格式定义了用于编码视频比特流的语法的其他选项和相应的解码操作。
[0003] 一般来说,对于有损压缩视频编码器相对于在压缩过程期间引入的失真,对比特率进行折衷。失真被引入以简化视频内容,从而支持更显著的比特率降低。编码器可以使用更多的比特来压缩视频内容、同时引入更少的失真,使得视频的重构版本具有更高的质量。或者,编码器可以使用较少的比特来压缩视频内容、同时引入更多的失真,使得视频的重构版本具有较低的质量。实际上,可用于压缩视频的比特数通常受到网络带宽或存储考虑的限制。因此,编码器的目标变为为重构视频提供最佳的总体质量,受到比特率限制(以及可能的其他约束,诸如延迟约束)。例如,编码器可以将更多的比特分配给视频的复杂区域(其可压缩性较差,并且因此需要更多的比特来达到给定的质量平),并且将更少的比特分配给更简单的区域(其需要较少的比特来达到给定的质量水平)。在很多视频传送场景中,视频编码器尝试以恒定比特率(“CBR”)来提供视频。对于CBR编码,编码器通常使用输出缓冲区来以恒定的目标比特率产生编码数据。除了向编码器提供反馈以控制质量和比特率之外,输出缓冲区还提供有限的空间用以在目标比特率以上/以下“平滑”波动,其中这种波动是由于视频的固有复杂度的变化而引起。另一方面,对于可变比特率 (“VBR”)编码,编码器尝试提供具有恒定或相对恒定质量的重构视频,即使比特率显著变化。例如,编码器对于不同类型的使用平滑可变量化参数(“QP”),使得质量是均匀的或几乎均匀的,但是输出比特率可以根据视频的内容而变化。
[0004] 编码器在编码期间使用“速率控制”来管理比特率和质量。对于大多数标准和格式,编码器为图片或图片的一部分设置QP。QP的值影响比特率和质量。当编码器增加QP的值时,比特率降低,但是重构视频的质量也趋于降低。当编码器降低QP的值时,比特率增加并且重构视频的质量也趋于增加。很多先前的速率控制方法对于给定的比特率来说不能达到最佳质量,不能以目标比特率来一致地产生编码视频,或者不能快速地适应视频中的场景变化。这在适于对相机视频进行编码的视频编码器被取而代之对屏幕捕获内容进行编码(例如用于远程桌面会议)的情况下是特别常见的。其他先前的速率控制方法 (诸如先前的所谓的ρ域(rho-domain)速率控制方法)更有效地调节质量和比特率,但是在很多情况下使用的计算量太大。发明内容
[0005] 概括地说,具体实施方式给出了针对视频编码或其他媒体编码的速率控制的创新。一些创新涉及ρ域速率控制的变化,其与先前的ρ域速率控制方法相比,显著地降低了计算复杂度,但是仍然支持精确的速率控制决策。这种创新有助于利用用于高速缓存和并行计算的机会的有效速率控制实现。
[0006] 根据本文中给出的创新的第一方面,一种媒体编码器(例如,视频编码器、图像编码器或音频编码器)执行速率控制方法。编码器编码媒体的当前单元以产生编码数据并且输出编码数据。当前单元是例如视频的图片。作为编码的一部分,编码器至少部分基于当前单元的比特分配来设置当前单元的ρ值(rho value)。ρ值指示例如当前单元的零值量化变换系数的目标比例。作为编码的一部分,编码器还使用具有多个位置相关尺度因子的频率变换来计算当前单元的变换系数,使用QP-ρ映射来设置当前单元的QP值,并且在当前单元的变换系数的量化期间使用当前单元的QP值。QP-ρ映射是候选QP值与针对这些候选QP值的对应ρ值之间相应的映射。QP-ρ映射利用与多个位置相关尺度因子近似的位置无关尺度因子来被确定,这降低了速率控制的计算复杂度。
[0007] 根据本文中给出的创新的第二方面,一种媒体编码器(例如,视频编码器、图像编码器或音频编码器)执行速率控制方法。编码器编码媒体的当前单元以产生编码数据并且输出编码数据。作为编码的一部分,编码器至少部分基于当前单元的比特分配来设置当前单元的ρ值。ρ值指示例如当前单元的零值量化变换系数的目标比例。编码器确定候选QP值与针对候选QP值的对应ρ值之间相应的QP-ρ映射。作为编码的一部分,编码器还使用频率变换来计算当前单元的变换系数,使用QP-ρ映射来设置当前单元的QP值,并且在当前单元的变换系数的量化期间使用当前单元的QP值。当确定QP-ρ映射时,编码器集成用于缩放当前单元的相应变换系数的至少一些缩放操作。
[0008] 根据本文中给出的创新的第三方面,一种计算机系统被配置为实现媒体编码器(例如,视频编码器、图像编码器或音频编码器)。媒体编码器包括频率变换器、量化器和速率控制器。频率变换器被配置为使用多个位置相关尺度因子来计算媒体的当前单元的变换系数。量化器被配置为使用当前单元的QP值来量化当前单元的变换系数。速率控制器被配置为至少部分基于当前单元的比特分配来设置当前单元的ρ值。ρ值指示例如当前单元的零值量化变换系数的目标比例。速率控制器还被配置为使用QP-ρ映射来设置当前单元的QP值,该 QP-ρ映射是候选QP值与针对这些候选QP值的对应ρ值之间相应的映射。QP-ρ映射可以利用与多个位置相关尺度因子近似的位置无关尺度因子来被确定,这降低了速率控制的计算复杂度。此外,当QP- ρ映射被确定时,用于缩放当前单元的相应变换系数的至少一些缩放操作可以被集成。
[0009] 用于速率控制决策的创新可以被实现作为方法的一部分,作为被配置为执行该方法的计算机系统的一部分,或者作为有形计算机可读介质的一部分,该有形计算机可读介质存储用于使计算机系统在被执行时执行该方法的计算机可执行指令。各种创新可以组合使用或单独使用。通过参考附图进行的以下详细描述,本发明的前述和其它目的、特征和优点将变得更加清楚。

附图说明

[0010] 图1是可以实现一些所描述的实施例的示例计算机系统的图。
[0011] 图2a和图2b是可以实现一些所描述的实施例的示例网络环境的图。
[0012] 图3是可以实现一些所描述的实施例的示例编码器系统的图。
[0013] 图4a和图4b是示出可以实现一些所描述的实施例的示例视频编码器的图。
[0014] 图5是示出比特分配值与对应的ρ值的示例映射的图表。
[0015] 图6是示出在不同的候选QP值处的零值变换系数的计数的直方图的图表。
[0016] 图7是示出候选QP值与对应的ρ值的示例映射的图表。
[0017] 图8是示出目标比特分配值、对应的ρ值和QP值之间的关系的示例的图表。
[0018] 图9a和9b是示出用于确定变换系数被量化为零时的最低QP值的方法的代码列表。
[0019] 图10是示出用于确定变换系数被量化为零时的最低QP值的另一方法的代码列表。
[0020] 图11和图12是示出用于ρ域速率控制的两个变化的通用技术的流程图
[0021] 图13a和图13b是示出用于ρ域速率控制的变化的组合实现的示例技术的流程图。

具体实施方式

[0022] 具体实施方式部分给出了用于视频编码或其他媒体编码速率控制的创新。例如,一些创新涉及如下ρ域速率控制的变化:其中通过使用与多个位置相关尺度因子近似的位置无关尺度因子,与先前的ρ域速率控制方法相比,降低了计算复杂度。其他的创新涉及如下ρ域速率控制的变化:其中通过在生成量化参数(“QP”)值到ρ值的映射时集成某些缩放操作,与先前的ρ域速率控制方法相比,降低了计算复杂度。可以使用专用硬件软件的各种组合来有效地实现本文中给出的ρ域速率控制的变化,这些专用硬件和软件的组合包括专用集成电路(“ASIC”)、图形处理单元(“GPU”)、或者执行用于实现有效高速缓存和并行处理的单指令多数据(“SIMD”)指令的中央处理器处理单元(“CPU”)。
[0023] 尽管本文中给出的操作在某些地方被描述为由视频编码器执行,但是在很多情况下,这些操作可以由另一类型的媒体编码器(例如,图像编码器、音频编码器)来执行。特别地,ρ域速率控制的变化可以在使用频率变换并且量化所得到的变换系数的任何媒体编码器中被实现。
[0024] 参考H.264标准或H.265标准特有的语法元素和操作来说明本文中给出的一些创新。本文中给出的创新也可以用于其他标准或格式。
[0025] 本文中给出的很多创新可以在对某些“人为”创建的视频内容(诸如用于远程桌面会议或其他用例场景的屏幕捕获内容)进行编码时提高速率-失真性能。屏幕捕获内容通常包括重复的结构(例如,图形、文本字符)。屏幕捕获内容通常以具有高色度采样分辨率的格式(例如,YUV 4:4:4或RGB 4:4:4)被编码,尽管它也可以以较低色度采样分辨率格式(例如,YUV 4:2:0)被编码。屏幕捕获内容的编码/解码的常见场景包括远程桌面会议和对自然视频或其他“混合内容”视频上的图形叠加的编码/解码。本文中给出的很多创新也可以被用于自然视频。
[0026] 更一般地,本文中给出的示例的各种替代方案是可能的。例如,可以通过改变所描述的方法动作的顺序,通过分割、重复或省略某些方法动作等来改变本文中给出的一些方法。所公开的技术的各个方面可以组合使用或单独使用。不同的实施例使用所描述的创新中的一个或多个。本文中给出的一些创新解决了背景技术部分中提到问题中的一个或多个问题。通常,给定的技术/工具不能解决所有这些问题。
[0027] I.示例计算机系统
[0028] 图1示出了可以实现若干所描述的创新的适当计算机系统(100) 的一般化示例。计算机系统(100)无意对使用或功能性范围提出任何限制,因为这些创新可以在多种通用或专用计算机系统中被实现。
[0029] 参照图1,计算机系统(100)包括一个或多个处理单元(110, 115)和存储器(120,125)。处理单元(110,115)执行计算机可执行指令。处理单元可以是通用CPU、ASIC中的处理器或者任何其他类型的处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增加处理能。例如,图1示出了CPU(110)以及GPU或协同处理单元(115)。有形存储器(120,
125)可以是易失性存储器 (例如,寄存器、高速缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪速存储器等)、或两者的某种组合,这些存储器由(多个)处理单元可访问。存储器(120,125)以适于由(多个)处理单元执行的计算机可执行指令的形式存储软件(180),软件(180)实现用于ρ域速率控制的变化的一个或多个创新。
[0030] 计算机系统可以具有附加特征。例如,计算机系统(100)包括储存装置(140)、一个或多个输入设备(150)、一个或多个输出设备(160)和一个或多个通信连接(170)。诸如总线、控制器或网络等互连机制(未示出)将计算机系统(100)的部件互连。通常,操作系统软件(未示出)为在计算机系统(100)中执行的其他软件提供操作环境,并且协调计算机系统(100)的部件的活动。
[0031] 有形储存装置(140)可以是可移除的或不可移除的,并且包括磁盘、磁带或盒、诸如CD-ROM或DVD等光学存储介质、或者可以用于存储信息并且可以在计算机系统(100)内被访问的任何其它介质。储存装置(140)存储用于实现ρ域速率控制的变化的一个或多个创新的软件(180)的指令。
[0032] 输入设备(150)可以是触摸输入设备,诸如键盘鼠标、笔、或轨迹球、语音输入设备、扫描设备、或者向计算机系统(100)提供输入的另一设备。对于视频,输入设备(150)可以是相机、视频卡、TV调谐器卡、屏幕捕获模、或者以模拟或数字形式接受视频输入的类似设备、或者将视频输入读取到计算机系统(100)中的 CD-ROM或CD-RW。(多个)输出设备(160)可以是显示器、打印机、扬声器、CD写入器、或者提供来自计算机系统(100)的输出的另一设备。
[0033] (多个)通信连接(170)能够通过通信介质支持到另一计算实体的通信。通信介质传送各种信息,诸如计算机可执行指令、音频或视频输入或输出、或者调制数据信号中的其他数据。调制数据信号是如下的信号,该信号的一个或多个特征以使得能够在信号中编码信息的方式被设置或改变。作为示例而非限制,通信介质可以使用电、光、 RF或其他载体。
[0034] 本文中给出的创新可以在计算机可读介质的一般上下文中被描述。计算机可读介质是可以在计算环境中被访问的任何可用有形介质。作为示例而非限制,利用计算机系统(100),计算机可读介质包括存储器(120,125)、储存装置(140)以及上述中的任何的组合。
[0035] 这些创新可以在计算机可执行指令的一般上下文中被描述,诸如被包括在程序模块中的那些计算机可执行指令,这些指令在计算机系统中在目标实际或虚拟处理器上被执行。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、库、对象、类、部件、数据结构等。在各种实施例中,程序模块的功能可以根据需要在程序模块之间进行组合或拆分。用于程序模块的计算机可执行指令可以在本地或分布式计算机系统内被执行。
[0036] 术语“系统”和“设备”在本文中可互换地使用。除非上下文另有明确指示,否则这两个术语都不意味着对一种类型的计算机系统或计算机设备的任何限制。通常,计算机系统或计算机设备可以是本地的或分布式的,并且可以包括专用硬件和/或通用硬件与实现本文中描述的功能的软件的任何组合。
[0037] 所公开的方法还可以使用被配置为执行任何所公开的方法的专用计算硬件来实现。例如,所公开的方法可以由专被设计或配置为实现任何所公开的方法的集成电路(例如,诸如ASIC数字信号处理器(“DSP”)等的ASIC、GPU、或者诸如现场可编程门阵列(“FPGA”) 等的可编程逻辑器件(“PLD”))来实现。
[0038] 为了呈现,具体实施例部分使用诸如“确定”、“设置”和“使用”之类的术语来描述计算机系统中的计算机操作。这些术语是由计算机执行的操作的高级抽象,而不应当与人类执行的动作混淆。与这些术语相对应的实际计算机操作因实现而异。
[0039] II.示例网络环境
[0040] 图2a和图2b示出了包括视频编码器(220)和视频解码器(270) 的示例网络环境(201,202)。编码器(220)和解码器(270)使用适当的通信协议通过网络(250)连接。网络(250)可以包括因特网或另一计算机网络
[0041] 在图2a所示的网络环境(201)中,每个实时通信(“RTC”) 工具(210)包括编码器(220)和解码器(270)二者用于双向通信。给定的编码器(220)可以产生符合H.265标准、SMPTE 421M标准、 H.264标准、另一标准或专有格式的变化或扩展的输出,其中对应的解码器(270)接受来自编码器(220)的编码数据。双向通信可以是视频会议、视频电话呼叫、或者其他双方或多方通信场景的一部分。尽管图2a中的网络环境(201)包括两个实时通信工具(210),网络环境(201)可以替代地包括参与多方通信的三个或更多个实时通信工具(210)。
[0042] 实时通信工具(210)管理编码器(220)的编码。图3示出了可以被包括在实时通信工具(210)中的示例编码器系统(300)。备选地,实时通信工具(210)使用另一编码器系统。实时通信工具(210) 还管理解码器(270)的解码。
[0043] 在图2b所示的网络环境(202)中,编码工具(212)包括编码器(220),编码器(220)对视频进行编码以用于传送给包括解码器 (270)的多个回放工具(214)。单向通信可以被提供给视频监控系统、网络相机监视系统、远程桌面会议呈现或者其中将视频进行编码并且从一个位置发送到一个或多个其他位置的其他场景。尽管图2b 中的网络环境(202)包括两个回放工具(214),但网络环境(202) 可以包括更多或更少的回放工具(214)。通常,回放工具(214)与编码工具(212)通信以确定用于回放工具(214)接收的视频流。回放工具(214)接收该流,缓冲所接收的编码数据一段合适的时间,并且开始解码和回放。
[0044] 图3示出了可以被包括在编码工具(212)中的示例编码器系统 (300)。备选地,编码工具(212)使用另一编码器系统。编码工具 (212)还可以包括用于管理与一个或多个回放工具(214)的连接的服务器侧控制器逻辑。回放工具(214)可以包括用于管理与编码工具(212)的连接的客户端侧控制器逻辑。
[0045] III.示例编码器系统
[0046] 图3是实现一些所描述的实施例的示例编码器系统(300)的框图。编码器系统(300)可以是能够以多种编码模式中的任何一种进行操作的通用编码工具,这些模式诸如用于实时通信或远程桌面会议的低延迟编码模式、转码模式、和用于从文件或流产生用于回放的媒体的较高延迟编码模式,或者它可以是适于一种这样的编码模式的专用编码工具。编码器系统(300)可以适于编码特定类型的内容(例如,屏幕捕获内容)。编码器系统(300)可以被实现为操作系统模块的一部分、实现为应用库的一部分、实现为独立应用的一部分,或者使用专用硬件来实现。编码器系统(300)可以使用一个或多个通用处理器(例如,一个或多个CPU)以用于一些或所有编码操作,使用图形硬件(例如,GPU)以用于某些编码操作,或者使用专用硬件 (诸如ASIC)以用于某些编码操作。总体而言,编码器系统(300) 从视频源(310)接收源视频图片序列(311),并且产生编码数据作为到信道(390)的输出。输出到信道的编码数据可以包括使用如本文中所描述的速率控制决策编码的内容。
[0047] 视频源(310)可以是相机、调谐器卡、储存介质、屏幕捕获模块、或其他数字视频源。视频源(310)以例如每秒30帧的帧速率产生视频图片序列。如本文中使用的,术语“图片”通常是指源、编码或重构的图像数据。对于逐行扫描视频,图片是逐行扫描视频帧。对于隔行视频(interlaced video),在示例实施例中,隔行视频帧可能在编码之前被去隔行。备选地,两个互补隔行视频场(field)一起被编码为单个视频帧或者被编码为两个单独编码的场。除了指示逐行扫描视频帧或隔行扫描视频帧之外,术语“图片”可以指示单个非配对视频场、视频场互补对、表示给定时间的视频对象的视频对象平面、或较大图像中的感兴趣区域。视频对象平面或区域可以是包括场景的多个对象或区域的较大图像的一部分。
[0048] 即将到达的源图片(311)被存储在包括多个图片缓冲储存区域 (321,322,...,32n)的源图片临时存储器储存区域(320)中。图片缓冲区(321,322等)在源图片储存区域(320)中保持一个源图片。在一个或多个源图片(311)已经被存储在图片缓冲区(321,322 等)中之后,图片选择器(330)从源图片储存区域(320)中选择个体源图片。图片由图片选择器(330)选择用于输入到编码器(340) 的顺序可以不同于视频源(310)产生图片的顺序,例如,一些图片的编码可以按顺序被延迟,以便允许一些较晚的图片被首先编码并且从而便于时间上的后向预测。在编码器(340)之前,编码器系统(300) 可以包括在编码之前执行所选择的图片(331)的预处理(例如,滤波)的预处理器(未示出)。预处理可以包括到初级(例如亮度)和次级(例如,朝向红色和朝向蓝色的色度差异)分量的颜色空间转换和用于编码的重采样处理(例如,以降低色度分量的空间分辨率)。在编码之前,可以将视频转换到诸如YUV等色彩空间,其中亮度(Y) 分量的样本值表示亮度或强度值,色度(U,V)分量的样本值表示色差值。色差值的精确定义(以及YUV颜色空间与其他颜色空间(诸如RGB)之间的转换操作)取决于实现。
[0049] 编码器(340)编码所选择的图片(331)以产生编码图片(341),并且还产生存储器管理控制操作(“MMCO”)或参照图片集(“RPS”) 信息(342)。RPS是可以用于当前图片或任何后续图片的运动补偿中的参考的图片集合。如果当前图片不是已经被编码的第一张图片,则在执行它的编码处理时,编码器340可以使用已经被存储在解码图片临时存储器储存区域(360)中的一个或多个先前编码/解码图片 (369)。这种存储的解码图片(369)被用作用于当前源图片(331) 的内容的图片间预测的参照图片。MMCO/RPS信息(342)向解码器指示哪些重构图片可以被用作参照图片并且因此应当被存储在图片储存区域中。
[0050] 通常,编码器(340)包括执行编码任务的多个编码模块,编码任务诸如划分成图块(tile)、图片内预测估计和预测、运动估计和补偿、频率变换、量化和熵编码。由编码器(340)执行的精确操作可以根据压缩格式而变化。输出的编码数据的格式可以是H.26x格式(例如,H.261、H.262、H.263、H.264、H.265)、Windows Media Video 格式、VC-1格式、MPEG-x格式(例如,MPEG-1、MPEG-2或MPEG-4)、或者其他格式的变化或扩展。
[0051] 编码器(340)可以将图像划分成相同大小或不同大小的多个图块。例如,编码器(340)沿着图块行和图块列来分割图片,图块行和图块列利用图片边界来限定图片内的图块的水平和竖直边界,其中每个图块是矩形区域。图块通常被用来提供用于并行处理的选项。图片也可以被组织为一个或多个切片(slice),其中切片可以是整个图片或图片的部分。切片可以独立于图片中的其他切片而被解码,从而提高了错误复原能力。为了编码和解码的目的,切片或图块的内容被进一步划分成块或其他样本值集合。
[0052] 对于根据H.264标准的语法,编码器(340)可以将图片划分成相同大小或不同大小的多个切片。编码器(340)将图片(或切片) 的内容分割成16×16宏块(macroblock)。宏块包括被组织为4个 8×8亮度块的亮度样本值和被组织为8×8色度块的对应的色度样本值。通常,宏块具有诸如帧间(inter)或帧内(intra)等预测模式。为了用信号通知预测信息(诸如预测模式细节、运动矢量(“MV”) 信息等)和/或预测处理的目的,宏块包括一个或多个预测单元(例如, 8×8块、4×4块,其可以被称为用于图片间预测的分区)。宏块还具有用于残差编码/解码的目的的一个或多个残差数据单元。
[0053] 对于根据H.265标准的语法,编码器将图片(或切片或图块)的内容分割成编码树单元(coding tree unit)。编码树单元(“CTU”) 包括被组织为亮度编码树块(“CTB”)的亮度样本值和被组织为两个色度CTB的对应色度样本值。CTU(及其CTB)的大小由编码器选择。亮度CTB可以包含例如64×64、32×32或16×16亮度样本值。CTU包括一个或多个编码单元。
编码单元(“CU”)具有亮度编码块(“CB”)和两个对应的色度CB。通常,CU具有诸如帧间或帧内等预测模式。CU包括一个或多个预测单元以用于用信号通知预测信息(诸如预测模式细节、位移值等)和/或预测处理的目的。预测单元(“PU”)具有亮度预测块(“PB”)和两个色度PB。CU 还具有用于残差编码/解码的目的的一个或多个变换单元,其中变换单元(“TU”)具有亮度变换块(“TB”)和两个色度TB。编码器决策如何将视频划分成CTU、CU、PU、TU等。
[0054] 如本文中使用的,取决于上下文,术语“块”可以指示宏块、残差数据单元、CB、PB或TB、或者某个其他样本值集合。取决于上下文,术语“单元”可以指示宏块、CTU、CU、PU、TU或某个其他块集合,或者它可以指示单个块,或者它可以指示切片、图块、图片、图片组、或其他更高层的区域。
[0055] 返回图3,编码器根据来自图片(331)中的其他先前重构的样本值的预测来表示源图片(331)的帧内编码块。对于块的帧内空间预测,图片内估计器估计相邻重构样本值到该块中的外推 (extrapolation)。图片内估计器可以输出被熵编码的预测信息(诸如,用于帧内空间预测的预测模式/方向)。图片内预测预测器应用预测信息以确定帧内预测值。
[0056] 编码器(340)根据来自一个或多个参照图片的预测来表示源图片(331)的图片间编码预测块。运动估计器估计该块相对于一个或多个参照图片(369)的运动。当使用多个参照图片时,多个参照图片可以来自不同的时间方向或相同的时间方向。运动补偿预测参考区域是用于为当前图片的样本值块生成运动补偿预测值的参照图片中的样本值区域。运动估计器输出诸如MV信息等被熵编码的运动信息。运动补偿器将MV应用于参照图片(369)以确定图片间预测的运动补偿预测值。
[0057] 编码器(340)可以确定块的预测值(帧内或帧间)与对应的原始值之间的差异(如果有的话)。这些预测残差值使用频率变换(如果不跳过频率变换的话)和量化来被进一步编码。例如,编码器(340) 为图片、图块、切片、宏块、CU和/或视频的其他部分设置量化参数 (“QP”)值,并且相应地量化变换系数。下面描述使用ρ域速率控制的变化来选择QP值的示例方法。
[0058] 编码器(340)的熵编码器压缩量化后的变换系数值以及某些边信息(例如,MV信息、QP值、模式决策、参数选择)。典型的熵编码技术包括指数-Golomb编码、Golomb-Rice编码、算术编码、差分编码、霍夫曼编码、游程长度编码、可变长度到可变长度(“V2V”) 编码、可变长度到固定长度(“V2F”)编码、Lempel-Ziv(“LZ”) 编码、字典编码、概率间隔分割熵编码(“PIPE”)、以及上述的组合。熵编码器可以对不同种类的信息使用不同的编码技术,可以组合应用多种技术(例如,通过应用Golomb-Rice编码,随后应用算术编码),并且可以在特定编码技术中从多个代码列表中进行选择。如果跳过频率变换,则可以对预测残差值或输入样本值进行量化和熵编码。如果跳过了针对图片内编码内容的预测,则可以对根据输入样本值计算的变换系数进行量化和熵编码。
[0059] 自适应解块滤波器被包括在编码器(340)中的运动补偿环路内 (即,“环路内”滤波)),用以平滑跨越解码图片中的块边界行和 /或列的不连续性。备选地或附加地,可以将其他滤波(诸如去环滤波、自适应环路滤波(“ALF”)或采样自适应偏移(“SAO”)滤波;未示出)应用为环路滤波操作。
[0060] 编码器(340)产生基本比特流中的编码数据。基本比特流的语法通常被定义在编解码器标准或格式、或者其扩展或变化中。作为编码器(340)的输出,如下文所描述的,基本比特流通常以容器格式被分组化或组织。基本比特流中的编码数据包括被组织为语法结构的语法元素。通常,语法元素可以是数据的任何元素,并且语法结构是基本比特流中处于规定顺序的零个或多个语法元素。
[0061] 对于根据H.264标准或H.265标准的语法,图片参数集(“PPS”) 是包含可以与图片相关联的语法元素的语法结构。PPS可以被用于单个图片,或者PPS可以按顺序被重复用于多个图片。PPS通常包括用于与PPS相关联的(多个)图片的默认或初始QP值。在一些实现中,可以针对亮度样本值和色度样本值指示不同的QP值。PPS通常与图片的编码数据分离地用信号通知。在图片的编码数据中,语法元素指示哪个PPS用于哪个图片。类似地,对于根据H.264标准或H.265标准的语法,序列参数集(“SPS”)是包含可以与图片序列相关联的语法元素的语法结构。比特流可以包括单个SPS或多个SPS。SPS通常与序列的其他数据分离地用信号通知,并且其他数据中的语法元素指示要使用哪个SPS。
[0062] 参照图3,编码图片(341)和MMCO/RPS信息(342)(或等同于MMCO/RPS信息(342)的信息,因为图片的依赖性和排序结构在编码器(340)处已知)由解码处理仿真器(350)来处理。解码处理仿真器(350)实现解码器的一些功能,例如,用于重构参照图片的解码任务。以与MMCO/RPS信息(342)一致的方式,解码处理仿真器(350)确定是否需要重构和存储给定的编码图片(341)以在要被编码的后续图片的图片间预测中用作参照图片。如果需要存储编码图片(341),则解码处理仿真器(350)对解码处理进行建模并且产生对应的解码图片(351),该解码处理是由接收编码图片(341)的解码器进行的。这样,当编码器340使用已经存储在解码图片储存区域(360)中的解码图片(369)时,解码处理仿真器(350)也使用来自储存区域(360)的解码图片(369)作为解码处理的一部分。
[0063] 解码图片暂态存储器储存区域(360)包括多个图片缓冲储存区域(361,362,...,36n)。以与MMCO/RPS信息(342)一致的方式,解码处理仿真器(350)管理储存区域(360)的内容,以便标识如下的任何图片缓冲区(361,362等),该图片缓冲区具有编码器(340) 不再需要用作参照图片的图片。在对解码处理进行建模之后,解码处理仿真器(350)将新解码的图片(351)存储在已经以这种方式被标识出来的图片缓冲区(361,362等)中。
[0064] 编码图片(341)和MMCO/RPS信息(342)被缓存在临时编码数据区域(370)或其他编码数据缓冲区中。在编码数据区域(370) 中聚合的编码数据包含一个或多个图片的编码数据作为基本比特流的语法的一部分。在编码数据区域(370)中聚合的编码数据还可以包括与编码视频数据相关的媒体元数据(例如,作为一个或多个补充增强信息(“SEI”)消息或视频可用性信息(“VUI”)消息中的一个或多个参数)。
[0065] 来自临时编码数据区域(370)的聚合数据(371)由信道编码器 (380)处理。信道编码器(380)可以打包和/或复用聚合的数据以用于传输或存储为媒体流(例如,根据诸如ITU-T H.222.0|ISO/IEC 13818-1等媒体节目流或传输流格式,或者诸如IETF RFC 3550等因特网实时传输协议格式),在这种情况下,信道编码器(380)可以添加语法元素作为媒体传输流的语法的一部分。或者,信道编码器 (380)可以组织聚合的数据用于存储为文件(例如,根据诸如ISO/IEC 14496-12等媒体容器格式),在这种情况下,信道编码器(380)可以添加语法元素作为媒体存储文件的语法的一部分。或者,更通常地,信道编码器(380)可以实现一个或多个媒体系统复用协议或传输协议,在这种情况下,信道编码器(380)可以添加语法元素作为(多个)协议的语法的一部分。信道编码器(380)向信道(390)提供输出,该信道(390)表示用于输出的存储、通信连接或另一信道。信道编码器(380)或信道(390)还可以包括其他元件(未示出),用于例如前向纠错(“FEC”)编码和模拟信号调制。
[0066] IV.示例视频编码器
[0067] 图4a和图4b是可以实现一些所描述的实施例的广义视频编码器 (400)的框图。编码器(400)接收包括当前图片的视频图片序列作为输入视频信号(405),并且产生编码视频比特流(495)中的编码数据以作为输出。
[0068] 编码器(400)基于块并且使用取决于实现的块格式。块可以在不同的阶段被进一步细分,例如在预测、频率变换和/或熵编码阶段。例如,图片可以被分为64×64块、32×32块或16×16块,这些块又可以被分为用于编码和解码的较小样本值块。在用于H.264标准的编码的实现中,例如,编码器将图片划分为宏块、块、分区(用于图片间预测)和残差数据单元。在用于H.265标准的编码的实现中,例如,编码器将图片划分为CTU(CTB)、CU(CB)、PU(PB)和TU(TB)。
[0069] 编码器(400)使用图片内编码和/或图片间编码来压缩图片。编码器(400)的很多部件均用于图片内编码和图片间编码二者。这些部件执行的确切操作可能会根据被压缩的信息类型而有所不同。
[0070] 分片模块(410)可选地将图片划分为相同大小或不同大小的多个图块。例如,分片模块(410)沿着图块行和图块列来分割图片,图块行和图块列利用图片边界来限定图片内的图块的水平和竖直边界,其中每个图块是矩形区域。编码器(400)还可以将图片划分成一个或多个切片,其中每个切片包括一个或多个切片段。切片头部可以包括指示切片的一个或多个QP值的信息(在一些实现中,针对切片的亮度样本值和色度样本值,可以指示不同的QP值)。
[0071] 通用编码控件(420)从编码器(400)的各个模块接收用于输入视频信号(405)的图片以及反馈(未示出)。总体而言,通用编码控件(420)向其他模块(诸如分片模块(410)、变换器/缩放器/量化器(430)、缩放器/逆变换器(435)、图片内估计器(440)、运动估计器(450)和帧内/帧间切换)提供控制信号(未示出)以在编码期间设置和改变编码参数。具体地,通用编码控件(420)可以使用本文中给出的ρ域速率控制的变化之一来设置编码期间的QP值。例如,通用编码控件(420)实现了被配置为执行图11、图12、图13a 和图13b所示的技术(1100,1200,1300)之一的速率控制器。更一般地,通用编码控件(420)可以在编码期间管理关于编码模式的决策。通用编码控件(420)产生指示在编码期间做出的决策的通用控制数据(422),使得对应的解码器可以做出一致的决策。通用控制数据(422)被提供给报头格式化器/熵编码器(490)。
[0072] 如果使用图片间预测来预测当前图片,则运动估计器(450)估计输入视频信号(405)的当前图片的样本值的块相对于一个或多个参照图片的运动。解码图片缓冲区(470)缓冲一个或多个重构的先前编码图片,以用作参照图片。当使用多个参照图片时,多个参照图片可以来自不同的时间方向或相同的时间方向。运动估计器(450) 产生诸如MV数据、合并模式索引值和参照图片选择数据等边信息运动数据(452)。运动数据(452)被提供给报头格式化器/熵编码器(490) 以及运动补偿器(455)。
[0073] 运动补偿器(455)向来自解码图片缓冲区(470)的经重构的参照图片应用MV。运动补偿器(455)产生当前图片的运动补偿预测。
[0074] 在编码器(400)内的分离路径中,图片内估计器(440)确定如何对输入视频信号(405)的当前图片的样本值的块进行图片内预测。当前图片可以使用图片内编码进行全部或部分编码。使用当前图片的重构(438)的值,对于帧内空间预测,图片内估计器(440)确定如何根据当前图片的相邻的先前重构的样本值来空间地预测当前图片的当前块的样本值(例如,确定要用于当前块的空间预测的方向)。图片内估计器(440)产生边信息帧内预测数据(442),诸如指示帧内预测是使用空间预测还是其他类型的帧内编码、预测模式/方向(用于帧内空间预测)的信息。帧内预测数据(442)被提供给报头格式化器/熵编码器(490)以及图片内预测器(445)。
[0075] 根据帧内预测数据(442),图片内预测器(445)根据当前图片的相邻的先前重构的样本值来空间地预测当前图片的当前块的样本值。
[0076] 帧内/帧间切换选择针对给定块的预测(458)将是运动补偿预测还是图片内预测。
[0077] 对于非跳过模式块,在预测块(458)与输入视频信号(405)的原始当前图片的对应部分之间的差异(如果有的话)提供残差(418) 的值。在当前图片的重构期间,对于非跳过模式块,将重构的残差值与预测(458)组合以产生来自视频信号(405)的原始内容的近似或精确重构(438)。(在有损压缩中,来自视频信号的一些信息被丢失(405)。)
[0078] 在变换器/缩放器/量化器(430)中,频率变换器将空间域视频信息转换为频域(即,频谱、变换)数据。对于基于块的视频编码,频率变换器将离散余弦变换(“DCT”)、DCT的整数近似、或其他类型的前向块变换(例如,离散正弦变换或其整数近似)应用于预测残差数据的块(如果预测(458)为零,则为样本值数据),以产生频率变换系数的块。在下面描述的示例中,频率变换器被配置为计算媒体单元(例如,图片组、图片、宏块、编码单元、块等)的变换系数。所应用的频率变换可以具有多个位置相关尺度因子。变换器/缩放器/ 量化器(430)可以应用具有可变块大小的变换。在这种情况下,变换器/缩放器/量化器(430)可以确定使用哪些变换块大小要用于当前块的残差值。在某些情况下,编码器(400)也可跳过变换步骤。
[0079] 缩放器/量化器对变换系数进行缩放和量化。例如,量化器以量化步长来对频域数据应用死区标量量化(dead-zone scalar quantization),该量化步长基于逐图片、基于逐图块、基于逐切片、基于逐宏块、基于逐CU、基于逐块、或者基于其他基础而变化。在下面描述的示例中,缩放器/量化器被配置为使用媒体单元的QP值来量化该单元的变换系数。通常,根据QP与量化步长之间所定义的关系、使用QP值来确定量化步长,并且量化步长也可以包含取决于所使用的频率变换的尺度因子(例如,用来补偿不同系数的频率变换中的不同扩展量的多个尺度因子之一)。可以使用本文中给出的ρ域速率控制的变化之一来设置QP值。也可以使用其他尺度因子(例如,权重矩阵中的权重)来缩放或以其他方式量化变换系数。经量化的变换系数数据(432) 被提供给报头格式化器/熵编码器(490)。
[0080] 在缩放器/逆变换器(435)中,缩放器/逆量化器对经量化的变换系数执行逆缩放和逆量化。当变换级没有被跳过时,逆频率变换器执行逆频率变换,以产生重构的预测残差值或样本值的块。对于非跳过模式块,编码器(400)将重构的残差值与预测(458)的值(例如,经运动补偿预测值、图片内预测值)相组合以形成重构(438)。对于跳过模式块,编码器(400)使用预测(458)的值作为重构(438)。
[0081] 对于图片内预测,可以将重构(438)的值反馈给图片内估计器 (440)和图片内预测器(445)。此外,重构(438)的值可以用于后续图片的运动补偿预测。重构(438)的值还可以被滤波。滤波控件(460)对于视频信号(405)的给定图像确定如何对重构(438) 的值执行解块滤波和SAO滤波。滤波控件(460)产生控制数据(462),该控制数据(462)被提供给报头格式化器/熵编码器(490)和合并器 /滤波器(465)的滤波器。
[0082] 在合并器/滤波器(465)中,编码器(400)将来自不同图块的内容合并到图片的重构版本中。编码器(400)根据滤波器控制数据(462) 选择性地执行解块滤波和SAO滤波,以便自适应地平滑跨越图片中的边界的不连续性。可以备选地或附加地应用其他滤波(诸如去环滤波(de-ringing)或ALF;未示出)。取决于编码器(400)的设置,图块边界可以选择性地被滤波或完全不被滤波,并且编码器(400) 可以在编码比特流内提供用以指示是否应用了这种滤波的语法。解码图片缓冲区(470)缓冲所重构的当前图片,以用于在随后的运动补偿预测中使用。
[0083] 报头格式化器/熵编码器(490)格式化和/或熵编码通用控制数据 (422)、经量化的变换系数数据(432)、帧内预测数据(442)、运动数据(452)和滤波器控制数据(462)。报头格式化器/熵编码器  (490)在编码视频比特流(495)中提供编码数据。编码视频比特流 (495)的格式可以是H.26x格式(例如,H.261、H.262、H.263、H.264、 H.265)、Windows Media Video格式、VC-1格式、MPEG-x格式(例如,MPEG-1、MPEG-2或MPEG-4)或另一格式的变化或扩展。
[0084] 取决于实现和期望的压缩类型,编码器(400)的模块可以被添加、省略、分成多个模块、与其他模块组合、和/或替换为类似的模块。在替代实施例中,具有不同模块和/或其他模块配置的编码器执行所描述的技术中的一个或多个。编码器的具体实施例通常使用编码器 (400)的变化或补充版本。编码器(400)内的模块之间的关系表示编码器中的一般信息流;为了简化起见,未示出其他关系。
[0085] V.ρ域速率控制的变化
[0086] 本节描述用于视频编码或其他媒体编码的ρ域速率控制的变化。例如,在ρ域速率控制的一些变化中,通过使用与多个位置相关尺度因子近似的位置无关尺度因子来减少计算复杂度。作为另一示例,在ρ域速率控制的其他变化中,当生成QP值到ρ值的映射时,通过集成某些缩放操作来减少计算复杂度。
[0087] A.速率控制方法的介绍
[0088] 编码器在编码期间使用速率控制来管理比特率和质量。对于大多数标准和格式,编码器为图片或图片的部分(例如切片、宏块、编码单元或块)设置QP,QP影响该图片或其部分的比特率和质量。在这样的标准和格式中,比特率和失真都取决于QP的值,并且编码器可以通过为图片或其部分选择适当的QP值来设置比特率与失真之间的折衷。
[0089] 对于某些编码场景(诸如在编码屏幕内容视频的远程桌面呈现),一个重要的目标是在目标比特率约束下提供重构视频的一致比特率和良好质量的速率控制。然而,在这种情况下,很多先前的速率控制方法都无法实现目标比特率的最佳质量,或者不能以目标比特率来一致地产生编码视频,或者不能快速地适应视频中的场景变化。例如,根据一些先前的速率控制方法,以低比特率来编码的静态屏幕内容视频通常不能实现满足重构视频的质量。作为另一示例,先前的速率控制方法通常依赖于来自先前图片的信息,并且它们不能很好地适应于屏幕内容视频中突然的场景变化。
[0090] 另一类别的速率控制方法使用ρ域速率控制,其可以在各种目标比特率约束下提供重构视频的一致比特率和良好质量。在ρ域速率控制中,编码器使用ρ值来控制图片或图片的部分(诸如切片、宏块、编码单元或块)的比特率和质量。ρ值例如是图片或其部分的经量化的变换系数中零值系数的比例。对于很多类型的视频内容,ρ值作为控制值是有用的,因为在ρ值与在很多编码场景中观察到的实际比特率之间存在线性关系。因此,ρ值强有力地指示最终比特率。
[0091] 在ρ域速率控制期间,编码器至少部分基于视频单元(例如,图片组、图片、切片、宏块、编码单元或块)的比特分配来设置该单元的ρ值。比特分配可以取决于编码类型(例如,I、P或B)、单元的空间复杂度(例如,精细纹理/细节与简单模式)、内容分类(例如,背景与前景、文本与自然视频对象)、用于传输的可用比特率、编码器的编码数据缓冲区的饱和度、和/或其他因素。编码器可以直接设置单元的比特分配,或者编码器可以按比例分配为较大区域(包括该单元)设置的比特分配。在任何情况下,考虑到比特分配,ρ值可以指示该单元的零值量化变换系数的目标比例。为了设置单元的ρ值,编码器可以使用比特分配的候选值(即可能的比特分配)与针对这些比特分配的候选值的对应ρ值之间的映射。例如,编码器在比特-ρ映射中查找单元的比特分配,并且找到相应的ρ值,或者编码器根据比特-ρ映射从比特分配中直接计算ρ值。
[0092] 在典型的视频编码场景中,对于各种类型的视频内容,用于预测残差的变换系数具有高斯或拉普拉斯分布。对于具有拉普拉斯分布的变换系数,例如,ρ(rho)值与比特率(R)之间的关系可以被量化为:R(ρ)=2×log2e(1-ρ)+O([(1-ρ)]3),其中ρ值表示零值量化变换系数的比例。对于具有高斯或拉普拉斯分布的变换系数,ρ值与比特率之间的关系可以简化为线性关系:R(ρ)=θ×(1-ρ),其中θ是线性关系的斜率,并且其中ρ值指示零值量化变换系数的比例。
[0093] 图5示出了针对三个不同视频图片的到对应ρ值的比特分配的示例映射(500)。更具体地,图5示出了从64千比特每秒(kbps)到 704kbps的三个视频图片的不同比特分配的ρ值。这三张图片可以是来自三个不同视频序列的图片,或者它们可以是来自单个视频序列的三个不同图片。在图5中,ρ值指示零值量化变换系数的比例,并且ρ值随着比特分配的减小而增加。对于三张图片中的每一张,θ的值不同。图片0具有最陡的斜率。在最低比特分配下,图片0的ρ值约为0.88(即,在最低比特分配下,约88%的变换系数被量化为零)。在最高比特分配下,图片0的ρ值约为0.60(即,在最高比特分配下,约60%的变换系数被量化为零)。图片2具有最平坦的斜率。在最低比特分配下,图片2的ρ值约为0.96(即,在最低比特分配下,约96 %的变换系数被量化为零)。在最高比特分配下,图片2的ρ值约为 0.30(即,在最高比特分配下,大约30%的变换系数被量化为零)。在给定图片的最低和最高比特分配之间,比特分配和ρ值之间的关系大致是线性的,因为在比特流中编码的非零系数的数目以线性速率变化,并且对于每个非零系数使用大致相同数目的比特。由于各图片中的内容的不同特性,θ的值对于三张图片是不同的。因此,给定图片的θ值取决于该图片的每个非零系数的比特数。
[0094] 图5示出了图片的比特率(或比特分配)与对应的ρ值之间的映射的示例。或者,编码器确定并且对于图片组、切片、宏块、编码单元、块、或某个其他视频单元使用比特率(或比特分配)与对应的ρ值之间的映射。
[0095] 在设置单元的ρ值之后,编码器确定要在量化期间使用的适当的 QP值。对于ρ域速率控制,像其他速率控制方法一样,编码器通过为图片或其部分选择适当的QP值来设置比特率与失真之间的折衷。为了便于选择针对给定的ρ值的适当QP值,编码器分别确定候选QP 值(即,编码器可以用于该单元的QP值)与针对这些QP候选值的对应ρ值之间相应的映射。像比特ρ映射一样,QP-ρ映射是内容相关的。然而,与比特-ρ映射不同,QP-ρ映射通常不是线性的。
[0096] 为了确定QP-ρ映射,编码器使用频率变换来计算该单元的变换系数。一般来说,当给定的QP值用于量化时,编码器通过估计零值变换系数的计数或者通过实际计算零值变换系数的计数来确定零值变换系数的计数。例如,图6示出了在从QP=1至QP=51的不同候选QP值下图片的零值变换系数的计数的直方图(600)。在图6所示的示例中,考虑到大量的变换系数,零值变换系数的计数随着QP的增加而单调地增加。更一般地,随着QP增加,给定单元的零值变换系数的计数增加或保持相同。因此,当ρ值指示零值变换系数的比例时,给定单元的ρ值随着QP的增加而增加或保持相同。
[0097] 基于计数,编码器针对候选QP值设置对应的ρ值。图7示出了基于图6中的直方图(600)的候选QP值到对应的ρ值的示例映射 (700)。对于QP=1至QP=51,映射(700)表示当使用该QP值时,基于零值变换系数的比例的对应ρ值。在图7中,当QP增加时,ρ值增加。
[0098] 图7示出了图片的QP值与对应的ρ值之间的映射的示例。或者,编码器确定并且使用针对图片、切片、宏块、编码单元、块或某个其它视频单元的QP值与相应的ρ值之间的映射。
[0099] 对于ρ域速率控制,编码器通过在QP-ρ映射中定位基于比特分配而为该单元设置的ρ值,来设置该单元的QP值。以这种方式,编码器为该单元找到适当的QP值。编码器在该单元的变换系数的量化期间使用该单元的QP值。
[0100] 图8示出了目标比特分配值、对应的ρ值与QP值之间的关系 (800)的示例。图8的上半部分示出了图5中的图片0的比特率(比特分配)与对应的ρ值之间的映射。图8的下半部分示出了来自图7 的QP值与对应的ρ值之间的映射(700)。对于目标比特分配(在图 8的示例中为416kbps),编码器找到对应的ρ值(在图8的示例中为0.66)。然后,对于对应的ρ值,编码器找到适当的QP值(在图 8的示例中为10)。
[0101] 实际上,确定由编码器用于频域速率控制的QP-ρ映射的过程可能是计算密集型的。为了说明,考虑下面的ρ域速率控制示例,其中以逐宏块为基础确定用于H.264视频编码的QP-ρ映射。编码器分别针对帧内编码宏块和帧间编码宏块、根据以下等式来确定ρ值与QP 值之间的关系:
[0102] 以及
[0103]
[0104] 其中x是宏块的位置(i,j)处的变换系数,M指示宏块中的变换系数的计数,QP指示候选QP值,ρ值指示零值变换系数的比例。例如, YUV 4:2:0格式的宏块包括64个变换系数的6个块或总共384个变换系数。结构itableintra和itableinter是查找表。给定输入i、j和QP,所选择的一个表返回量化步长。对于给定候选QP值,编码器将每个变换系数x的绝对值与变换系数的适当量化步长进行比较。如果变换系数x的绝对值小于量化步长,则变换系数x将被量化为零,并且该系数被统计为零值变换系数。否则(变换系数x的绝对值不小于量化步长),变换系数x不被量化为零,并且其不会被统计为零值变换系数。通过将宏块中的零值变换系数的计数除以宏块中的变换系数的计数 M来确定针对候选QP值的ρ值。
[0105] 对于帧内编码块和帧间编码块,量化步长可以不同。在前文的示例中,结构itableintra用于帧内编码的宏块,并且结构itableinter用于帧间编码宏块。由itableintra或itableinter返回的量化步长包含取决于QP 的均匀量化尺度。所返回的量化步长还包括取决于变换系数x的位置 (i,j)的位置相关尺度因子。位置相关尺度因子是三个不同尺度因子之一,这三个不同尺度因子补偿由于频率变换的行/列的规范 (norm)而导致的扩展。例如,对于宏块的块的4×4残差块,第一尺度因子用于位置(0,0)、(0,2)、(2,0)和(2,2)处的变换系数,第二尺度因子用于位置(0,1)、(0,3)、(1,0)、(1, 2)、(2,1)、(2,3)、(3,0)和(3,2)处的变换系数,并且第三尺度因子用于位置(1,1)、(1,3)、(3,1)和(3,3) 处的变换系数。因此,表itableintra根据系数位置来使用三个类用于量化步长,并且表itableinter根据系数位置来使用三个类用于量化步长。
[0106] 对于HEVC标准,编码器可以类似地计算编码单元的ρ值与QP 值之间的关系。或者,单个查找表可以用于帧内编码宏块(或编码单元)和帧间编码宏块(或编码单元)二者。
[0107] 在任何情况下,使用位置相关尺度因子可以使ρ域速率控制的计算成本变得过高。已经进行了一些尝试以减少ρ域速率控制的复杂度,例如,使用位置感知查找表,其中针对每个不同的类使用不同的查找表。即使这样的尝试减少了一些架构中的ρ域速率控制的计算复杂度,但是它们也不能容易地被应用于为高速缓存和并行计算提供机会的其他架构。
[0108] B.ρ域速率控制的新变化
[0109] 可以在多个方面简化确定QP-ρ映射的过程,这降低了ρ域间速率控制的计算复杂度,同时仍然支持与先前更复杂的ρ域速率控制版本几乎一样精确的速率控制决策。简化也有助于在为高速缓存和并行计算提供机会的架构上的高效实现。特别地,可以使用专用硬件和软件的各种组合(包括ASIC、GPU、或执行用于并行处理的SIMD指令的CPU)来实现ρ域速率控制的高效变化。
[0110] 1.位置无关尺度因子
[0111] 根据第一创新,当确定QP-ρ映射时,编码器使用位置无关尺度因子。位置无关尺度因子近似用于在编码期间使用的频率变换的多个位置相关尺度因子。位置无关尺度因子可以是多个位置相关尺度因子的平均、中值或加权平均。或者,位置无关尺度因子可以是与多个位置相关尺度因子近似的其他代表性值。通常,在设计时基于用于频率变换的多个位置相关尺度因子确定位置无关尺度因子。然后可以将位置无关尺度因子集成到被执行用以确定QP-ρ映射的操作中,这避免了查找尺度因子时的位置相关性。这降低了ρ域速率控制的计算复杂度,同时仍然支持精确的速率控制决策。
[0112] 例如,考虑以下4×4正向变换,其中X表示空间域中的4×预测残差阵列,其中C表示一维变换,其中CT表示其转置。
[0113]
[0114] 其中 并且 这个变换可以被分解为:
[0115]
[0116] 其中 表示点乘运算。最右边的矩阵是一个尺度矩阵,其包括用于变换的五个位置相关尺度因子:a2、ab/2、ac、c2和b2/4。由于位置相关性,在确定QP-ρ映射时使用这五个尺度因子可能会向ρ域速率控制增加显著的计算复杂度和内存成本。为简化ρ域速率控制,位置相关尺度因子可以被与它们近似的单个位置无关尺度因子代替,例如是位置相关尺度因子的平均((4×a2+4×ab/2+4×ac+2×c2+2×b2/4)/16,大致为0.1596)或位置相关尺度因子的中值(median(a2,ab/2,ac,c2,b2/4),大致为0.1353)。或者,位置无关尺度因子是位置相关尺度因子的加权平均,例如,给定用于DC系数的尺度因子更多权重。
[0117] 作为另一示例,变换可以被分解并且近似为:
[0118]
[0119] 其中c近似为b/2。最右边的矩阵是尺度矩阵,其包括用于变换的三个位置相关尺度因子:a2、ab/2和b2/4。再次,为了简化ρ域速率控制,可以用与位置相关尺度因子近似的单个位置无关尺度因子来替代这些位置相关尺度因子。例如,位置无关尺度因子是这些位置2 2
相关尺度因子的平均((4×a+8×ab/2+4×b/4)/16,大致为0.1708)、位置相关尺度因子的中值(median(a2,ab/2,b2/4),大致为0.1633)、或位置相关尺度因子的加权平均,例如给定用于DC系数的尺度因子更多权重。
[0120] 对于具有不同位置相关尺度因子的另一频率变换,相应地将位置无关尺度因子调节为与这些位置相关尺度因子近似。
[0121] 在确定QP-ρ映射时,可以使用位置无关尺度因子而非多个位置相关尺度因子,从而避免位置相关性。例如,位置无关尺度因子被并入更简单的查询表itableintra或itableintra,该查询表仅有QP索引。或者,如下一节所述,在确定QP-ρ映射时,将位置无关尺度因子并入缩放操作中。
[0122] 2.在确定QP-ρ映射时集成缩放操作
[0123] 根据第二创新,在确定QP-ρ映射时,编码器集成某些缩放操作。这可以促进在为高速缓存和并行计算提供机会的架构上的高效实现。它还降低了ρ域速率控制的计算复杂度,同时仍然支持精确的速率控制决策。
[0124] 在用于一些标准和格式的编码器实现中,量化步长取决于从QP 值导出的量化尺度,并且还取决于频率变换特定的尺度因子。通常,量化尺度(“Qscale”)根据以下关系式与QP值(QP)相关: Qscale(QP)=2(QP-6)/6。它遵循Qscale(QP+6)=2×Qscale(QP)。也就是说,对于 QP的值每增加6,Qscale加倍。通过取每一方的log2,关系式 Qscale=2(QP-6)/6变为log2(Qscale)=log2(2(QP-6)/6)=(QP-6)/6或 QP=6×log2(Qscale)+6。通过增加变换相关尺度因子(被示出为尺度因子 sf),被应用于变换系数的QP与量化步长之间的关系为 QP=6×log2(Qscale×sf)+6,其中Qscale×sf对应于量化步长。例如,对于位置无关尺度因子m,关系式为QP=6×log2(Qscale×m)+6。
[0125] 在确定QP-ρ映射时,编码器可以使用该关系来简化处理。例如,在部分V.A中给出的用于确定帧内编码宏块或帧间编码宏块的QP- ρ映射的等式被修改为如下。
[0126] 以及
[0127]
[0128] 其中x是宏块的位置(i,j)处的变换系数,M指示宏块中的变换系数的计数,QP指示候选QP值,ρ值指示零值变换系数的比例。尺度因子sf可以是位置无关尺度因子m。或者,尺度因子sf可以是位置相关尺度因子,这取决于位置(i,j)。对于给定的候选QP值,编码器比较6×log2(x×sf)+6的绝对值与候选QP值。如果6×log2(x×sf)+6 的绝对值小于候选QP值,则变换系数x将被量化为零,并且该系数被统计为零值变换系数。否则(6×log2(x×sf)+6的绝对值不小于候选 QP值),变换系数x不被量化为零,并且其不会被统计为零值变换系数。通过将宏块中的零值变换系数的计数除以宏块中的变换系数的计数M来确定针对候选QP值的ρ值。
[0129] 在实践中,代替对于宏块或其他单元计算针对每个候选QP值的ρ值,在逐系数的基础上,编码器可以使用值6×log2(x×sf)+6来计算给定变换系数x被量化为零时的最小QP值。例如,假设变换系数为x= 50,并且尺度因子为sf=0.1581。编码器可以计算变换系数被量化为零时的最低QP值作为门限QP值,如6×log2(50×0.1581)+6=23.896≈24。根据变换系数x的门限QP值,编码器可以标识变换系数x被量化为零的其他QP值(例如,高于门限QP值的QP值)和/或标识变换系数x不被量化为零的QP值(例如,QP值低于门限QP值)。例如,如果给定变换系数的门限QP值为24,则如果QP值是25、26、27 等,则该变换系数也被量化为零,但是如果QP值为23、22、21等,则变换系数不被量化为零。
[0130] 编码器可以对宏块或其他单元中的其他变换系数重复该过程。每个候选QP值的零值系数的总计数可以在具有每个候选QP值一个“容器”(bin)的直方图或其他数据结构中被追踪。然后,在相应的候选QP值下,编码器可以基于宏块或其他单元的零值系数的总计数来确定针对相应候选QP值的ρ值。例如,假设给定候选QP值的容器包括3,111,040个变换系数中的1,866,240个零值变换系数。编码器为候选QP值设置为0.6的ρ值,其中ρ值表示零值系数的比例。
[0131] 为此,编码器可以在ρ域速率控制期间使用与log2(x×sf)的值近似的计算机可执行指令来实现确定门限QP值(给定变换系数x被量化为零时的最低QP值)的处理。图9a示出了用于确定变换系数x(是整数)的log2(x)的一般方法的C代码列表(900)。该方法使用浮点运算来逼近log2(x)。最终值v给出log2(x)的近似值。
[0132] 在图9a所示的C代码列表(900)中实现的操作如下导出。假设 n是单精度浮点表示中的数字。在单精度浮点表示中,n具有符号值 sign、分数分量m和指数e。一般来说,n=(-1)sign×m×2e。对于32位精度,n可以由以下表示:单个位用于符号值,8位用于指数值e', 23位用于尾数值m(用于浮点值的小数部分)。从信息的32位,可以根据下面的公式来重构n的值。
[0133]
[0134] 其中位b22...b0是用于尾数值m的位。例如,对于值0011 1110 0010 0000 0000 0000 0000 0000,第一位(0)表示正的符号,接下来的8 位0111 1100表示对于指数e=124-
127=-3的指数值e'为124,最后的23位表示(以最低有效位格式)小数部分1+0+.25+0+...+
0= 1.25。重构的值是n=(-1)sign×1.25×2-3=0.15625。
[0135] 正值n=m×2e的基数2对数为log2(n)=log2(m)+e或 log2(n)=log2(m)+e'-127。在该表示中,分数部分m(即, )具有[1,2)的范围。对于该范围内的不同m值,
log2(m)的已知值是log2(1) =0,log2(3/2)=0.5849625,log2(2)=1。假设log2(m)由多项式 log2(m)≈a×m2+b×m+c来逼近。对于这个近似:
[0136] a+b+c=0,对于log2(1),
[0137] 对于 以及
[0138] 4a+2b+c=1,对于log2(2)。
[0139] 求解这些方程,因子a、b和c的值分别为a=-0.33958≈-1/3,b=2.01955≈2 和c=-1.6797≈-5/3。回到log2(n)=log2(m)+e,将a、b和c的这些值代入到等式log2(n)=a×m2+b×m+c+e'-127,得到
[0140] 在图9a的C代码列表中,表达式(n>>23)&255)从上述32位表示中的值的位2-9来恢复e'的值,并且因此表达式e=((n>>23)&255) -127恢复e=e'-127的值。在图9a的C代码列表中,表达式n&= 0x007FFFFF从上述32位表示中的值的位10-32恢复m的值。表达式 n+=0x3F800000在位位置3-9处添加7个1位,当值重新表示为浮点值时,这将被解释为e'=127的指数值,使得n的值有效不变。最后,表达式v=(-1.0/3.0*r+2.0)*r-5.0/3.0+e,得到输入值的基数2对数。
[0141] 图9b示出了用于确定用于变换系数x(最初是整数但是被转换为浮点数)的6×log2(x×sf)+6以及尺度因子sf(是浮点数)的方法的C代码列表(910)。例如,尺度因子sf是位置无关尺度因子。图9b中的代码列表(910)基于图9a中的代码列表(900),但是第一行和最后一行已经被修改。(在图9b中,中间变量r也用变量Qm替代)。在第一行中,计算乘积x×sf。在最后一行中,最终值v给出了 6×log2(x×sf)+6的近似值,以获取图9a中的代码列表(900)的最后一行作为log2(x×sf)的近似值:
[0142]
[0143] 在图9b中,数值后面的字符f表示数值是浮点值。
[0144] 3.用于并行处理的组合实现
[0145] 图10是示出在ρ域速率控制期间确定门限QP值(变换系数被量化为零时的最低QP值)的另一种方法的SSE-2代码列表(1000)。 SSE-2代码列表(1000)包括可以并行计算多个变换系数的门限QP 值的SIMD指令。SIMD指令包括以位置无关尺度因子0.1581进行缩放。SIMD指令还集成了缩放操作。
[0146] 对于被打包成128位变量e的一组八个16位变换系数,编码器确定各个变换系数被量化为零的相应门限QP值。使用第一操作 (1001),编码器将来自128位变量e的八个16位变换系数解包为八个32位整数值。使用_mm_unpacklo_epi16操作,变量e中的下部四个16位整数值与16位值0xFFFF或0x0000进行隔行(取决于相应的下部四个16位整数值是负数还是正数),并且被存储在变量m中。然后,使用_mm_unpackhi_epi16操作,变量e中的上部四个16位整数值与16位值0xFFFF或0x0000进行隔行(取决于相应的上部四个 16位整数值是负数还是正数),并且被存储在变量e中。在这一点上,变量m和e中的每一个存储针对四个变换系数的四个带符号的32位整数值。
[0147] 使用下一操作(1002),编码器将用于变换系数的32位整数值转换为单精度浮点值。对于四个“下部”变换系数,变量k在变量m 中存储针对四个带符号的32位整数值的四个单精度浮点值。对于四个“上部”变换系数,变量l在变量e中存储针对四个带符号的32 位整数值的四个单精度浮点值。
[0148] 然后,通过其他操作(1003),编码器以尺度因子0.1581(是位置无关尺度因子)对每个变换系数值进行缩放。在这一点上,对于四个“下部”变换系数,变量k存储四个缩放值。对于四个“上部”变换系数,变量l存储四个缩放值。
[0149] 接下来,基于图9b中的代码列表(910)中的操作,使用操作 (1004),对于第一组四个变换系数(四个“下部”变换系数),编码器计算门限QP值(各个变换系数被量化为零时的最低QP值)。变量k中的四个单精度浮点数(表示缩放值)被转换为32位整数值,它们被存储在变量m中。对于四个32位整数值,提取指数值(使用 mm_srli_epi32操作),将其存储在变量e中,并且被进一步调整。四个尾数值在变量m中被格式化,并且被转换为单精度浮点数,它们被存储在变量k(k=_mm_castsi128_ps(m))中。调整四个尾数值(在变量k中)和四个指数值(在变量e中)以计算最终存储在变量l(l= _mm_add_ps(l,k))中的四个门限QP值。(在操作(1004)中,与图9b中的代码列表(910)存在若干较小的算术差异。首先,指数值e被计算为e=e'-128而不是e=e'-127,其中因子-128在操作(1004) 中被示出为0x80,e值的差值-1(由于-127变为-128而导致的)被放大6倍,产生总的差值-6。其次,在操作(1004)期间加上因子+1.5f,而不是代码列表(910)所示的因子-4.0。差值+5.5(由于-4变为+1.5 而导致的)有效地补偿了差值-6,同时也考虑到了对于图9b中的代码列表(910)与图10中的操作(1040)如何进行舍入。)
[0150] 对于第一组四个变换系数(四个“下部”变换系数),使用操作 (1005),编码器验证所计算的门限QP值在作为输入被通过的最小 QP值和最大QP值的范围内。根据需要,剪切变换系数的门限QP值。 (在从变量m中读取其他值之后,随后将第一组四个变换系数的门限 QP值存储在变量m中(在稍后的操作(1006)中,利用操作m= _mm_cvtps_epi32(l))。)[0151] 对于先前缓冲在变量m(在较早的操作(1004)中,利用操作m =_mm_castps_si128(l))中的第二组四个变换系数(四个“上部”变换系数),编码器继续。编码器在稍后的操作(1006,1007)中重复大部分操作(1004,1005)。因此,对于第二组四个变换系数,编码器计算门限QP值并且检查/确保所计算的门限QP值在最小QP值和最大QP值的范围内。最后,使用另一操作(1008),将第二组四个变换系数的QP值存储在变量e中(操作e=_mm_cvtps_epi32(l))。
[0152] 4.映射和查找功能的实现
[0153] 比特-ρ映射或QP-ρ映射可以以各种方式实现。例如,QP-ρ映射可以被实现为诸如阵列等查找表,其中包括ρ值的条目由QP值来索引。比特-ρ映射可以类似地被实现为诸如阵列等查找表,其中包括ρ值的条目由比特分配值来索引。
[0154] 或者,比特-ρ映射可以被实现为线性函数,该线性函数包括θ×(1-ρ)形式的项(其中ρ值表示零值系数的比例),其捕获比特分配与ρ值之间的线性关系。比特-ρ映射还可以包括常数项,其捕获在编码期间使用的固定数目的比特,而不管ρ值或QP。为了使用比特-ρ映射来基于目标比特分配设置ρ值,编码器可以通过将目标比特分配应用于线性函数并且求解ρ值来计算ρ值。
[0155] 为了通过在QP-ρ映射中查找目标ρ值来设置QP值,编码器可以在等于目标ρ值的QP-ρ映射中查找ρ值,或者如果没有找到相等的ρ值,则查找QP-ρ映射中高于目标ρ值的最低ρ值(其中ρ值指示零值系数的比例)。例如,假设单元的目标ρ值为0.720,并且QP- ρ映射包括对应的ρ值...、0.702、0.711、0.719、0.725、0.730、...。编码器查找ρ值0.725作为QP-ρ映射中高于目标ρ值的最低ρ值。然后,编码器将该单元的QP值设置为与ρ值0.725相关联的候选QP 值。备选地,为了通过在QP-ρ映射中查找目标ρ值来设置QP值,编码器查找QP-ρ映射中最接近目标ρ值的ρ值,而不管最接近的ρ值小于、等于还是大于目标ρ值。在上述数值示例中,编码器查找ρ值0.719作为QP-ρ映射中最接近的ρ值,并且将该单元的QP值设置为与ρ值0.719相关联的候选QP值。如果比特-ρ映射被实现为查找表,则编码器可以类似地查找比特-ρ映射中最接近目标比特分配的比特分配,并且返回相应的ρ值,或者它可以在比特-ρ映射中在两个最近的比特分配(和相应的ρ值)之间进行内插。
[0156] 比特-ρ映射是比特分配值与对应的ρ值之间的映射。比特-ρ映射可以是从比特分配值到ρ值的映射,或者它可以是从ρ值到比特分配值的映射。类似地,QP-ρ映射是QP值与对应的ρ值之间的映射。 QP-ρ映射可以是从QP值到ρ值的映射,或者它可以是从ρ值到QP 值的映射。
[0157] 5.指示非零值系数的比例的ρ值
[0158] 在许多前述示例中,ρ值表示当前单元(诸如视频的图片)的零值量化变换系数的目标比例。或者,ρ值表示当前单元的非零值量化变换系数的目标比例。例如,如果零值系数的比例为0.723,则ρ值可以是0.723(对于零值系数)或0.277(对于非零值系数)。无论哪种方式,对于很多类型的视频内容,ρ值作为控制值是有用的,因为ρ值与在很多编码场景中观察到的实际比特率之间存在线性关系。因此,即使ρ值指示非零值量化变换系数的目标比例,ρ值也强有力地指示最终比特率。
[0159] 如果ρ值指示非零值量化变换系数的比例,则速率与ρ值之间的线性关系可以被简化为R(ρ)=θ×(ρ),其中θ是线性关系的斜率。对于图5所示的比特分配与对应的ρ值的映射(500),例如,如果ρ值取而代之指示非零值量化变换系数的比例,则ρ值随着比特分配增加而以线性方式增加。斜率值θ是正的而不是负的(例如,如果ρ值指示非零值系数的目标比例,则斜率为1.5,如果ρ值指示零值系数的目标比例,则斜率为-1.5)。
[0160] 类似地,在确定QP-ρ映射时,代替确定在给定的QP值被用于量化时零值变换系数的计数,编码器可以确定在给定的QP值被用于量化时非零值变换系数的计数。编码器可以估计非零值变换系数的计数,或实际计算非零值变换系数的计数。当QP增加时,给定单元的非零值变换系数的计数通常减少或保持相同。对于图6的直方图(600) 中的值,例如,对于不同的候选QP值中的每一个,非零值变换系数的计数将是系数的总计数减去直方图(600)中所示的零值变换系数的计数。编码器可以基于可以被存储在直方图或其他数据结构中的非零值变换系数的计数来设置针对候选QP值的对应ρ值。例如,对于 QP=1到QP=51,当QP值被使用时,基于非零值变换系数的比例来设定对应的ρ值。当ρ值指示非零值量化变换系数的比例时,ρ值随着QP增加而减小。
[0161] C.计算复杂度降低的ρ域速率控制技术
[0162] 本节描述用于ρ域速率控制的若干技术。
[0163] 1.ρ域速率控制的第一变化
[0164] 图11示出了用于ρ域速率控制的第一变化的通用技术(1100)。诸如参照图4描述的编码器(400)或另一编码器等编码器执行技术 (1100)。编码器可以是视频编码器、图像编码器或音频编码器。总体而言,编码器对媒体的当前单元进行编码以产生编码数据并且输出编码数据。例如,对于视频,媒体的当前单元是图片组、图片、宏块组、宏块、编码单元、或块。作为编码的一部分,编码器执行如图11 所示的速率控制。
[0165] 开始,编码器至少部分基于当前单元的比特分配来设置(1110) 当前单元的ρ值。ρ值表示例如当前单元的零值量化变换系数的目标比例。例如,ρ值是如在部分V.A或V.B中所述的ρ值。(或者,替代地,ρ值表示当前单元的非零值量化变换系数的目标比例,如部分V.B.5所述。)可以在确定当前单元的QP-ρ映射之前或之后设置 (1110)当前单元的ρ值。
[0166] 可以单独地为当前单元设置比特分配,或者可以为包括当前单元的较大区域设置比特分配,在这种情况下,对较大区域的比特分配被按比例分配。比特分配可以取决于:(a)当前单元或较大区域的复杂度,(b)当前单元或较大区域的内容分类,(c)当前单元或较大区域的编码类型,(d)可用比特率,和/或(e)编码器的编码数据缓冲区的缓冲区饱和度。备选地,比特分配取决于其他和/或附加因素。
[0167] 编码器可以使用比特-ρ映射来设置当前单元的ρ值,该比特-ρ映射是比特分配的候选值与针对比特分配的候选值的对应ρ值之间相应的映射。比特-ρ映射可以针对从最小比特分配值到最大比特分配值的比特分配值范围提供ρ值,在上述范围内,在比特分配值与ρ值之间存在线性关系。例如,比特-ρ映射是如部分V.A、V.B.4和/ 或V.B.5中所述的比特-ρ映射,该映射具有比特分配值与ρ值之间的线性关系。比特-ρ映射包含取决于每个非零值系数的比特数的斜率值。斜率值可以具有初始值,但是在编码期间将被更新。例如,斜率值开始于默认的初始值,但是在编码期间至少部分基于比特率结果和媒体的一个或多个先前单元的非零量化变换系数的计数来被更新。或者,斜率值以其他方式被更新。
[0168] 返回图11,编码器使用具有多个位置相关尺度因子的频率变换来计算(1120)当前单元的变换系数。编码器使用QP-ρ映射来设置 (1130)当前单元的QP值,QP-ρ映射是候选QP值与针对候选QP 值的对应ρ值之间相应的映射。QP-ρ映射通过与多个位置相关尺度因子近似的位置无关尺度因子来确定。例如,位置无关尺度因子是多个位置相关尺度因子的平均、多个位置相关尺度因子的加权平均、多个位置相关尺度因子的中值、或者与多个位置相关尺度因子近似的某个其他代表性值。
[0169] 如果在量化期间使用候选QP值,对于每个候选QP值,QP-ρ映射都包括ρ值。例如,QP-ρ映射是如部分V.B所述的QP-ρ映射。 QP-ρ映射可以针对从最小QP值到最大QP值的QP值范围提供ρ值。 QP值范围可以将所有可能的QP值包括为候选QP值,或者它可以将可能的QP值的某个子集包括为候选QP值。为了确定QP-ρ映射,编码器可以执行下面参照图12的阶段(1230)描述的处理。或者,编码器以某种其他方式确定QP-ρ映射。可以在当前单元的编码期间确定当前单元的QP-ρ映射。或者,可以在编码之前确定当前单元的 QP-ρ映射以作为预分析阶段的一部分。
[0170] 返回图11,编码器在单元的变换系数的量化期间使用(1140)单元的QP值。
[0171] 2.ρ域速率控制的第二变化
[0172] 图12示出了用于ρ域速率控制的第二变化的通用技术(1200)。诸如参照图4描述的编码器(400)或另一编码器等编码器执行技术 (1200)。编码器可以是视频编码器、图像编码器或音频编码器。总体而言,编码器对媒体的当前单元进行编码以产生编码数据并且输出编码数据。例如,对于视频,媒体的当前单元是图片组、图片、宏块组、宏块、编码单元或块。编码器执行如图12所示的速率控制。
[0173] 开始,编码器至少部分基于当前单元的比特分配来设置(1210) 当前单元的ρ值。ρ值指示例如当前单元的零值量化变换系数的目标比例。(或者,替代地,ρ值指示当前单元的非零值量化变换系数的目标比例,如部分V.B.5所述。)上面参照图11的阶段(1110)描述了用于设置比特分配的选项。
[0174] 编码器使用频率变换来计算(1220)该单元的变换系数。频率变换可以具有多个位置相关尺度因子。
[0175] 编码器还确定(1230)QP-ρ映射,QP-ρ映射是候选QP值与针对候选QP值的对应ρ值之间的映射。QP-ρ映射可以针对从最小QP 值到最大QP值的QP值范围提供ρ值。QP值范围可以将所有可能的 QP值包括为候选QP值,或者它可以将可能的QP值的某个子集包括为候选QP值。可以在编码期间确定(1230)当前单元的QP-ρ映射。或者,可以在编码之前确定(1230)当前单元的QP-ρ映射以作为预分析阶段的一部分。
[0176] 在确定QP-ρ映射时,编码器集成至少一些缩放操作以缩放该单元的相应变换系数。例如,为了确定QP-ρ映射,对于当前单元的每个变换系数,编码器估计变换系数被量化为零的第一QP值(QP的门限值)。在这样做时,编码器将变换系数与取决于频率变换的尺度因子相乘。当频率变换具有多个位置相关尺度因子时,取决于频率变换的尺度因子可以是与多个位置相关尺度因子近似的位置无关尺度因子,或者它可以是多个位置相关尺度因子之一。然后,对于候选QP 值中的每个,如果在量化期间使用候选QP值,则编码器统计有多少个变换系数被估计为会被量化为零(或者替代地,统计有多少变换系数被估计为不会被量化为零——参见部分V.B.5)。统计过程可以使用当前单元的各个变换系数的估计阶段的结果。对于每个候选QP值,编码器设置针对候选QP值的ρ值。
[0177] 在估计变换系数被量化为零的第一QP值(QP的门限)时,编码器可以将变换系数与位置无关尺度因子相乘,并且然后将相乘的乘积调整到QP尺度。例如,编码器以在门限精度水平内在数学上等同于 QPfirst=6×log2(c×m)+6的方式来估计第一QP值(QP的门限),其中c 是变换系数,m是位置无关尺度因子,QPfirst是变换系数被量化为零时的第一QP值。例如,在图9b或图10所示的方法中,或者在其中将log2(c×m)的值计算到对于用例场景可接受精度的另一方法中,门限精度水平得以满足。
[0178] 返回图12,编码器使用QP-ρ映射设置(1240)当前单元的QP 值,并且在当前单元的变换系数的量化期间使用(1250)单元的QP 值。
[0179] 3.ρ域速率控制的第三变化
[0180] 图13a和13b示出了用于ρ域速率控制的变化的组合实现的示例技术(1300)。组合实现在确定QP-ρ映射时使用位置无关尺度因子并且集成缩放操作。诸如参照图4描述的编码器(400)或另一编码器等编码器执行技术(1300)。编码器可以是视频编码器、图像编码器或音频编码器。总体而言,编码器对媒体单元按序编码以产生编码数据并且输出编码数据。例如,对于视频,每个媒体单元是图片组、图片、宏块组、宏块、编码单元或块。编码器执行如图13a和13b所示的速率控制。
[0181] 参照图13a,编码器设置(1310)下一单元的比特分配(其将被处理为当前单元)。编码器至少部分基于当前单元的比特分配来设置 (1320)当前单元的ρ值。编码器使用具有多个位置相关尺度因子的频率变换来计算(1330)当前单元的变换系数。编码器还确定(1340) QP-ρ映射。尽管图13a示出了在编码期间的阶段(1340),但是阶段(1340)也可以在预编码处理期间被执行。
[0182] 图13b示出了在一些实现中的阶段(1340)的细节(1301)。编码器得到(1341)当前单元的下一变换系数,将变换系数与位置无关尺度因子相乘(1342),并且将结果(1343)调整到QP尺度,以便估计变换系数被量化为零时的第一QP值(QP的门限值)。编码器检查(1344)变换系数是否为当前单元的最后的变换系数。如果不是,则编码器得到(1341)当前单元的下一变换系数,并且估计变换系数被量化为零时的第一QP值(QP的门限值)。
[0183] 在以这种方式处理了当前单元的所有变换系数之后,编码器得到 (1345)下一候选QP值,如果候选QP值被使用,则统计(1346) 被估计为会被量化为零的变换系数(或者,替代地如果候选QP值被使用,则统计被估计为不会被量化为零的变换系数;参见部分V.B.5),并且设置(1347)针对候选QP值的ρ值。编码器检查(1348)是否有另一候选QP值要处理。如果是,则编码器得到(1345)下一候选 QP值以设置针对它的ρ值。在编码器设置针对所有候选QP值的ρ值之后,编码器完成阶段(1341)。
[0184] 返回图13a,编码器使用QP-ρ映射设置(1350)当前单元的QP 值。然后,编码器在当前单元的变换系数的量化期间使用(1360)当前单元的QP值。编码器检查(1370)是否要继续另一单元。如果是,则编码器设置(1310)下一单元的比特分配。
[0185] 根据可以应用所公开的发明的原理的很多可能的实施例,应当认识到,所示实施例仅是本发明的优选实例,而不应当被认为是对本发明的范围的限制。相反,本发明的范围由所附权利要求限定。因此,被认为落在这些权利要求的范围和精神内的所有内容都属于本发明。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈