率失真优化量化方法、装置、电子设备及存储介质与流程
未命名
10-21
阅读:104
评论:0
1.本发明涉及视频压缩技术领域,具体涉及一种率失真优化量化方法、装置、电子设备及存储介质。
背景技术:
2.相关技术中,标量量化因为死区固定,因此不能达到性能最优,率失真优化量化(rdoq)由于在量化的过程中考虑了率失真代价,所以可以最大限度优化压缩性能。rdoq技术会从多种量化方案中比较率失真代价,最后选取率失真代价最小的那个方案以达到最优性能。量化方案可以由不同的量化参数(qp)确定,也可由不同的量化偏移确定。其中,rdoq技术始于h.264/avc视频编码标准。
3.相关技术中,提出了一个早期的rdoq方法,此方法为每个编码块选取最优的qp以达到优化的目的。相关技术中,还提出一个进一步改进的方法,通过一些快速算法去掉一些不必要的候选qp从而减少遍历的数量。但是,这些方法不适用于开启码率控制的应用,因为码率控制会进一步改变每个块的qp以达到平衡码率的作用。其中,rdoq的关键是计算每个量化方案的率失真代价,率失真代价可以定义为:
4.c=d+λ
×rꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)
5.其中,c是率失真代价,d是原始信号和解码信号之间的失真,r是编码码率,λ是率失真参数。d可以通过计算原始信号和解码信号之间的差值得到。但是,因为熵编码器的顺序执行特点和上下文模型的高复杂度,准确的码率r通常比较难以获得。相关技术中提出了一种将量化系数直接输入熵编码器得到码率r的方法,但是还是需要经过熵编码器的大量运算所以并不适合低延迟的场景。
6.为了减少rdoq对熵编码器的依赖,rdoq采用了许多技术快速估计失真d和码率r。首先,跳过反变换步骤直接计算失真d。然后,通过查询经过大量训练的熵编码表估计码率r从而无需依赖熵编码器。相关技术中,提出了一种简单有效的应用于h.265/hevc中的rdoq方法。此方法试图改变非零系数的空间分布和减小非零系数的绝对值达到最小化率失真代价的目的。对量化残差系数而言,非零系数的位置和非零系数的绝对值占据了编码码率的大部分,rdoq试图对这些位置和绝对值进行微调,从而使熵编码其能够以更高的效率压缩信息。一般来说,rdoq可以减少编码码率r,但是会增加编码失真d,但是通过最小化率失真代价c达到改善最终编码质量的目的。
7.相关技术中,还进一步提出了快速算法。通过检查量化系数和qp的乘积判定是否需要rdoq。如果乘积小于某个阈值,rdoq激活。否则,rdoq关闭。
8.然而,相关技术中,rdoq方法要求量化系数以预定义的顺序到达并按顺序处理它们,这对于软件实现来说可行,但对于硬件实现来说并不是最优的。具体来说,当rdoq模块处理一个特定的量化系数时,需要完成对先前量化系数的处理。这种依赖性使得对多个量化系数的并行处理很困难,从而无法充分发挥硬件的并行能力。
9.而且,h.265/hevc和av1是两种不同的视频压缩标准。尽管它们共享大部分顶层设
计,但各个模块的具体实现不同。相关技术中,会针对h.265/hevc编码器设计专用的rdoq模块以适应h.265/hevc特有的量化和编码策略。而针对av1编码器设计另外的rdoq模块以适应av1的量化和编码策略。同一编码器集成上述两个不同的rdoq模块可能会增加电路面积并且不能共享它们之间的资源。
技术实现要素:
10.本技术的目的在于提供一种率失真优化量化方法、装置、电子设备及存储介质,可以并行处理量化系数,降低硬件的处理延迟,而且,能够同时适应h.265/hevc和av1标准,尽可能共享硬件资源,减小率失真优化量化模块的面积。
11.根据本技术实施例的第一方面,提供一种率失真优化量化方法,应用于编码器,所述编码器适应hevc标准与av1标准中任意一个时,在率失真优化量化过程中,对于码率估计和失真估计,均采用通用的变化量化算法;所述方法,包括:
12.对变换系数矩阵进行量化,得到第一量化系数矩阵;其中,所述变换系数矩阵包括至少一个变换系数,所述第一量化系数矩阵包括至少一个第一量化系数;
13.将所述第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵;
14.对至少两个所述第一量化系数子矩阵进行数据统计,获取量化统计数据;所述量化统计数据用于消除至少两个所述第一量化系数子矩阵之间的依赖关系;
15.针对每个所述第一量化系数子矩阵,对非零的所述第一量化系数进行系数调整,得到第二量化系数子矩阵;所述第二量化系数子矩阵包括至少一个第二量化系数;至少两个所述第一量化系数子矩阵的系数调整并行执行;
16.根据所述第二量化系数子矩阵以及所述第一量化系数子矩阵与所述第一量化系数矩阵的关系,获取第二量化系数矩阵,所述第二量化系数矩阵包括至少一个所述第二量化系数。
17.在一种实施方式中,所述对变换系数矩阵进行量化,得到第一量化系数矩阵,包括:
18.针对所述变换系数矩阵中的每个所述变换系数,采用量化偏移参数对所述变换系数进行量化,得到所述第一量化系数。
19.在一种实施方式中,所述第一量化系数采用如下计算式计算得到:
20.qcoeff[cidx][x][y]=sign[cidx][x][y]
×
((|tcoeff[cidx][x][y]|
×
quantizationscaler[cidx][x][y]+(1<<(quantizationshift[cidx][x][y]-1)))>>quantizationshift[cidx][x][y]);
[0021]
其中,qcoeff[cidx][x][y]为所述第一量化系数,sign[cidx][x][y]为所述变换系数的符号,tcoeff[cidx][x][y]为所述变换系数,quantizationscaler[cidx][x][y]为量化缩放参数,quantizationshift[cidx][x][y]为所述量化偏移参数,cidx为y、u、v分量索引,x、y为所述变换系数在所述变换系数矩阵中的坐标。
[0022]
在一种实施方式中,当所述编码器适应hevc标准时,所述量化偏移参数采用如下计算式计算得到:
[0023][0024]
其中,qp1为所述编码器适应所述hevc标准时的第一量化参数,transformshift为
描述所述变换系数矩阵的内部变换移位的参数;和/或,
[0025]
当所述编码器适应av1标准时,所述量化偏移参数采用如下计算式计算得到:
[0026][0027]
numbitsdcqp为表示低频变换系数的量化索引dcqp所需的比特位数,tusize为所述变换系数矩阵的大小,bitdepth为视频的比特位深度,numbitsacqp为表示高频变换系数的量化索引acqp所需的比特位数。
[0028]
在一种实施方式中,当所述编码器适应hevc标准时,所述transformshift采用如下计算式计算得到:
[0029]
transformshift=15-bitdepth-log2(tusize);
[0030]
其中,bitdepth为视频的比特位深度,tusize为所述变换系数矩阵的大小。
[0031]
在一种实施方式中,当所述编码器适应av1标准时,所述dcqp采用如下计算式计算得到:
[0032][0033]
其中,av1dcqlookup为第一表格,用于存储视频的比特位深度为8时所述第一量化参数与所述低频变换系数的量化索引的对应关系,所述av1dcqloopup10为第二表格,用于存储视频的比特位深度为10时所述第一量化参数与所述低频变换系数的量化索引的对应关系。
[0034]
在一种实施方式中,当所述编码器适应av1标准时,所述acqp采用如下计算式计算得到:
[0035][0036]
其中,av1acqlookup为第三表格,用于存储视频的比特位深度为8时所述第一量化参数与所述高频变换系数的量化索引的对应关系,所述av1acqloopup10为第四表格,用于存储视频的比特位深度为10时所述第一量化参数与所述高频变换系数的量化索引的对应关系。
[0037]
在一种实施方式中,当所述编码器适应所述av1标准时,在计算所述量化偏移参数之前,包括:
[0038]
将所述编码器适应所述av1标准时的第二量化参数转换为所述第一量化参数。
[0039]
在一种实施方式中,当所述编码器适应av1标准时,所述第一量化参数采用如下计算式计算得到:
[0040][0041]
其中,qp2为所述第二量化参数,av1tohevcqp为第五表格,用于存储视频的比特位深度为8时所述第二量化参数与所述第一量化参数的对应关系,av1tohevcqp10为第六表格,用于存储视频的比特位深度为10时所述第二量化参数与所述第一量化参数的对应关系。
[0042]
在一种实施方式中,当所述编码器适应hevc标准时,所述quantizationscaler[cidx][x][y]采用如下计算式计算得到:
[0043]
quantizationscaler[cidx][x][y]=hevcscalinglist[qp1%6];
[0044]
其中,hevcscalinglist为第七表格,用于存储所述编码器适应所述hevc标准时qp1%6与所述量化缩放参数的对应关系;和/或,
[0045]
当所述编码器适应av1标准时,所述quantizationscaler[cidx][x][y]采用如下计算式计算得到:
[0046][0047]
numbitsdcqp为表示低频变换系数的量化索引dcqp所需的比特位数,numbitsacqp为表示高频变换系数的量化索引acqp所需的比特位数。
[0048]
在一种实施方式中,所述对所述第一量化系数矩阵进行统计,获取量化统计数据之前,还包括:
[0049]
为至少一个上下文模型创建对应的数组,并初始化所述上下文模型为预定义值;所述数组用于存储对应的上下文模型的状态;所述数组的每个元素为8位整数;
[0050]
其中,所述至少一个上下文模型包括第一上下文模型、第二上下文模型、第三上下文模型与第四上下文模型;至少一个上下文模型对应的数组包括第一数组、第二数组、第三数组与第四数组;
[0051]
所述第一上下文模型为significantcoeffgroupctx[2],用于存储第一语法元素的条件概率状态,所述第一语法元素为significantcoeffcroup,用于指出当前的第一量化系数子矩阵是否有非零的所述第一量化系数;所述第一语法元素为所述第一上下文模型;
[0052]
所述第二上下文模型为sigcoeffctx[44],用于存储第二语法元素的条件概率状态,所述第二语法元素为sigcoeffflag,用于指出当前的第一量化系数是否为零;所述第二语法元素为所述第二上下文模型;
[0053]
所述第三上下文模型为greateronecoeffctx[24],用于存储第三语法元素的条件概率状态,所述第三语法元素为abscoeffgreaterthanoneflag,用于指出当前的第一量化系数的绝对值是否大于1;所述第三语法元素为所述第三上下文模型;
[0054]
所述第四上下文模型为levelabscoeffctx[6],用于存储第四语法元素的条件概率状态,所述第四语法元素为levelabscoeff,是当前的第一量化系数的绝对值;所述第四语法元素为所述第四上下文模型。
[0055]
在一种实施方式中,对至少两个所述第一量化系数子矩阵进行数据统计,获取量化统计数据,包括:
[0056]
对所述第一量化系数矩阵的所述第一量化系数子矩阵,按照指定的第一扫描顺序对至少两个所述第一量化系数子矩阵分别进行扫描;
[0057]
针对每个所述第一量化系数子矩阵,按照指定的第二扫描顺序对所述第一量化系数进行扫描,获取所述量化统计数据;所述第一扫描顺序与所述第二扫描顺序相同。
[0058]
在一种实施方式中,所述量化统计数据包括:所述第一量化系数子矩阵中绝对值为1的第一量化系数的数量、所述第一量化系数子矩阵中绝对值大于1的第一量化系数的数量、所述第一量化系数子矩阵中绝对值大于2的第一量化系数的数量、所述第一量化系数矩阵中按照所述第一扫描顺序排列的第一个非零的第一量化系数的位置、所述第一量化系数
子矩阵中按照所述第二扫描顺序排列的第一个绝对值为4的第一量化系数的位置、所述第一量化系数子矩阵中按照所述第二扫描顺序排列的第一个绝对值为7的第一量化系数的位置、所述第一量化系数子矩阵中按照所述第二扫描顺序排列的第一个绝对值为13的第一量化系数的位置以及所述第一量化系数子矩阵中按照所述第二扫描顺序排列的第一个绝对值为25的第一量化系数的位置。
[0059]
在一种实施方式中,所述第一量化系数子矩阵中绝对值为1的第一量化系数的数量存储于名为cgonecnt[64]的第五数组中,所述第五数组在数据统计前初始化为全零数组,在数据统计过程中,如果当前第一量化系数的绝对值为1,对应的所述第一量化系数子矩阵的cgonecnt自增1。
[0060]
在一种实施方式中,所述第一量化系数子矩阵中绝对值为1的第一量化系数的数量采用如下计算式计算得到:
[0061][0062]
其中,qcoeff[cidx][x][y]为所述第一量化系数,cidx为y、u、v分量索引,x、y为所述第一量化系数在所述第一量化系数矩阵中的坐标,tusize为所述变换系数矩阵的大小。
[0063]
在一种实施方式中,所述第一量化系数子矩阵中绝对值大于1的第一量化系数的数量存储于名为cggreatherthanonecnt[64]的第六数组中,所述第六数组在数据统计前初始化为全零数组,在数据统计过程中,如果当前第一量化系数的绝对值大于1,对应的所述第一量化系数子矩阵的cggreaterthanonecnt自增1。
[0064]
在一种实施方式中,所述第一量化系数子矩阵中绝对值大于1的第一量化系数的数量采用如下计算式计算得到:
[0065][0066]
其中,qcoeff[cidx][x][y]为所述第一量化系数,cidx为y、u、v分量索引,x、y为所述第一量化系数在所述第一量化系数矩阵中的坐标,tusize为所述变换系数矩阵的大小。
[0067]
在一种实施方式中,所述第一量化系数子矩阵中绝对值大于2的第一量化系数的数量存储于名为cggreaterthantwocnt[64]的第七数组中,所述第七数组在数据统计前初始化为全零数组,在数据统计过程中,如果当前第一量化系数的绝对值大于2,对应的所述第一量化系数子矩阵的cggreaterthantwocnt自增1。
[0068]
在一种实施方式中,所述第一量化系数子矩阵中绝对值大于2的第一量化系数的数量采用如下计算式计算得到:
[0069][0070]
其中,qcoeff[cidx][x][y]为所述第一量化系数,cidx为y、u、v分量索引,x、y为所述第一量化系数在所述第一量化系数矩阵中的坐标,tusize为所述变换系数矩阵的大小。
[0071]
在一种实施方式中,所述第一个绝对值为4的第一量化系数的位置存储于名为cgfirst4loc[64][2]的第八数组中,所述第八数组在数据统计前所有元素初始化为-1,所述第一个绝对值为4的第一量化系数的位置的纵坐标存储于cgfirst4loc[64][0],横坐标
存储于cgfirst4loc[64][1]。
[0072]
在一种实施方式中,如果coeff[cidx][x][y]是所述第一量化系数子矩阵中第一个绝对值为4的系数,则cgfirst4loc更新为:
[0073][0074][0075]
其中,cidx为y、u、v分量索引,x、y为所述第一个绝对值为4的系数在所述第一量化系数矩阵中的坐标,tusize为所述变换系数矩阵的大小,y1为所述第一个绝对值为4的第一量化系数在所述第一量化系数子矩阵中的纵坐标,x1为所述第一个绝对值为4的第一量化系数在所述第一量化系数子矩阵中的横坐标。
[0076]
在一种实施方式中,所述第一个绝对值为7的第一量化系数的位置存储于名为cgfirst7loc[64][2]的第九数组中,所述第九数组在数据统计前所有元素初始化为-1,所述第一个绝对值为7的第一量化系数的位置的纵坐标存储于cgfirst7loc[64][0],横坐标存储于cgfirst7loc[64][1]。
[0077]
在一种实施方式中,如果coeff[cidx][x][y]是所述第一量化系数子矩阵中第一个绝对值为7的系数,则cgfirst7loc更新为:
[0078][0079][0080]
其中,cidx为y、u、v分量索引,x、y为所述第一个绝对值为7的系数在所述第一量化系数矩阵中的坐标,tusize为所述变换系数矩阵的大小,y2为所述第一个绝对值为7的第一量化系数在所述第一量化系数子矩阵中的纵坐标,x2为所述第一个绝对值为7的第一量化系数在所述第一量化系数子矩阵中的横坐标。
[0081]
在一种实施方式中,所述第一个绝对值为13的第一量化系数的位置存储于名为cgfirst13loc[64][2]的第十数组中,所述第十数组在数据统计前所有元素初始化为-1,所述第一个绝对值为13的第一量化系数的位置的纵坐标存储于cgfirst13loc[64][0],横坐标存储于cgfirst13loc[64][1]。
[0082]
在一种实施方式中,如果coeff[cidx][x][y]是所述第一量化系数子矩阵中第一个绝对值为13的系数,则cgfirst13loc更新为:
[0083][0084][0085]
其中,cidx为y、u、v分量索引,x、y为所述第一个绝对值为13的系数在所述第一量化系数矩阵中的坐标,tusize为所述变换系数矩阵的大小,y3为所述第一个绝对值为13的第一量化系数在所述第一量化系数子矩阵中的纵坐标,x3为所述第一个绝对值为13的第一量化系数在所述第一量化系数子矩阵中的横坐标。
[0086]
在一种实施方式中,所述第一个绝对值为25的第一量化系数的位置存储于名为cgfirst25loc[64][2]的第十一数组中,所述第十一数组在数据统计前所有元素初始化为-1,所述第一个绝对值为25的第一量化系数的位置的纵坐标存储于cgfirst25loc[64][0],
横坐标存储于cgfirst25loc[64][1]。
[0087]
在一种实施方式中,如果coeff[cidx][x][y]是所述第一量化系数子矩阵中第一个绝对值为25的系数,则cgfirst25loc更新为:
[0088][0089][0090]
其中,cidx为y、u、v分量索引,x、y为所述第一个绝对值为25的系数在所述第一量化系数矩阵中的坐标,tusize为所述变换系数矩阵的大小,y4为所述第一个绝对值为25的第一量化系数在所述第一量化系数子矩阵中的纵坐标,x4为所述第一个绝对值为25的第一量化系数在所述第一量化系数子矩阵中的横坐标。
[0091]
在一种实施方式中,所述针对每个所述第一量化系数子矩阵,对非零的所述第一量化系数进行系数调整,得到第二量化系数子矩阵,包括:
[0092]
针对每个非零的所述第一量化系数,计算按照至少两个系数调整方案进行系数调整的第一编码代价;
[0093]
针对每个系数调整方案,根据所有所述第一编码代价的和值,获得第二编码代价;所述第二编码代价为所述第一量化系数子矩阵进行系数调整的编码代价;
[0094]
从至少两个系数调整方案中确定目标系数调整方案,其中,所述目标系数调整方案的第二编码代价为至少两个系数调整方案的第二编码代价中最小的编码代价;
[0095]
根据目标系数调整方案对所述第一量化系数子矩阵中的非零的所述第一量化系数进行系数调整,得到所述第二量化系数子矩阵。
[0096]
在一种实施方式中,所述第一编码代价采用如下计算式计算得到:
[0097]
cost1[cidx][x
′
][y
′
]=distortion[cidx][x
′
][y
′
]+rate[cidx][x
′
][y
′
];
[0098]
其中,cost1[cidx][x'][y']为所述第一编码代价,distortion[cidx][x'][y']为像素域的误差,rate[cidx][x'][y']为编码码率,cidx为y、u、v分量索引,x'、y'为所述第一量化系数在所述第一量化系数子矩阵中的坐标。
[0099]
在一种实施方式中,所述像素域的误差采用如下计算式计算得到:
[0100]
distortion[cidx][x
′
][y
′
]=(merr[cidx][x
′
][y
′
]>>(2
×
transformshift+1))
×
merr[cidx][x
′
][y
′
];
[0101]
其中,merr[cidx][x'][y']为量化误差的反向还原值,transformshift为描述所述变换系数矩阵的内部变换移位的参数。
[0102]
在一种实施方式中,当所述编码器适应hevc标准且视频的比特位深度为8时,所述量化误差的反向还原值采用如下计算式计算得到:
[0103]
merr[cidx][x
′
][y
′
]=(err[cidx][x
′
][y
′
]>>12)
×
hevcscaler[qp1%6];
[0104]
其中,err[cidx][x'][y']为量化误差,hevcscaler为第八表格,用于存储qp1%6与放大系数的对应关系,qp1为所述编码器适应所述hevc标准时的第一量化参数;和/或,
[0105]
当所述编码器适应av1标准且视频的比特位深度为8时,所述量化误差的反向还原值采用如下计算式计算得到:
[0106][0107]
其中,err[cidx][x'][y']为量化误差,numbitsdcqp为表示低频变换系数的量化索引dcqp所需的比特位数,numbitsacqp为表示高频变换系数的量化索引acqp所需的比特位数。
[0108]
在一种实施方式中,视频的比特位深度为10时的量化误差的反向还原值采用如下方法得到:
[0109]
获取视频的比特位深度为8时的量化误差的反向还原值;
[0110]
将视频的比特位深度为8时的量化误差的反向还原值右移两位,得到视频的比特位深度为10时的量化误差的反向还原值。
[0111]
在一种实施方式中,所述量化误差采用如下计算式计算得到:
[0112]
err[cidx][x
′
][y
′
]=||tcoff[cidx][x
′
][y
′
]|
×
quantizationscaler[cidx][x
′
][y
′
]-(|qcoeff[cidx][x
′
][y
′
]|<<quantizationshift[cidx][x
′
][y
′
])|;
[0113]
其中,tcoeff[cidx][x'][y']为所述变换系数,quantizationscaler[cidx][x'][y']为量化缩放参数,qcoeff[cidx][x'][y']为所述第一量化系数,quantizationshift[cidx][x'][y']为量化偏移参数。
[0114]
在一种实施方式中,所述编码码率采用如下计算式计算得到:
[0115]
rate[cidx][x
′
][y
′
]=sigcoeffflagrate[cidx][x
′
][y
′
]+coeffabslevelrate[cidx][x
′
][y
′
];
[0116]
其中,sigcoeffflagrate[cidx][x'][y']为第二语法元素的第一码率估计,所述第二语法元素为sigcoeffflag,用于指出当前的所述第一量化系数是否为零,coeffabslevelrate[cidx][x'][y']为对非零的第一量化系数的绝对值进行编码的语法元素的第二码率估计。
[0117]
在一种实施方式中,当所述编码器适应hevc时,所述第一码率估计采用如下计算式计算得到:
[0118][0119]
其中,rateesttab为第九表格,所述第九表格用于存储qp1%3、语法元素的条件概率状态与码率估计的对应关系,qp1为所述编码器适应所述hevc标准时的第一量化参数,sigcoeffflagtabidx为第二语法元素的当前条件概率状态,bitdepth为视频的比特位深度;和/或,
[0120]
当所述编码器适应av1标准时,sigcoeffflagrate[cidx][x'][y']采用如下计算式计算得到:
[0121][0122]
其中,rateesttab为第九表格,所述第九表格用于存储qp1%3、语法元素的条件概率状态与码率估计的对应关系,qp1为所述编码器适应所述hevc标准时的第一量化参数,由所述编码器适应所述av1标准时的第二量化参数转换得到,sigcoeffflagtabidx为第二语
法元素的当前条件概率状态。
[0123]
在一种实施方式中,sigcoeffflagtabidx采用如下计算式计算得到:
[0124][0125]
其中,sigcoeffctx为第二上下文模型,用于存储所述第二语法元素的条件概率状态,sigcoeffctxidx由当前的所述第一量化系数子矩阵顶部的两个相邻的所述第一量化系数子矩阵和左边的两个相邻的所述第一量化系数子矩阵的第一语法元素的值综合决定。
[0126]
在一种实施方式中,所述第二码率估计采用如下计算式计算得到:
[0127]
coeffabslevelrat[cidx][x
′
][y
′
]=abscoeffgreaterthanoneflagrate[cidx][x
′
][y
′
]+abscoeffgreaterthantwoflagrate[cidx][x
′
][y
′
]+abscoeffminustworate[cidx][x
′
][y
′
];
[0128]
其中,abscoeffgreaterthanoneflagrate[cidx][x'][y']为第三语法元素的第三码率估计,所述第三语法元素为abscoeffgreaterthanoneflag,用于指出当前的第一量化系数的绝对值是否大于1,abscoeffgreaterthantwoflagrate[cidx][x'][y']为第五语法元素的第四码率估计,所述第五语法元素为abscoeffgreaterthantwo,用于指出当前的第一量化系数的绝对值是否大于2,abscoeffminustworate[cidx][x'][y']为第六语法元素的第五码率估计,所述第六语法元素为absceoffminustwo,用于表示当前的第一量化系数的绝对值减2。
[0129]
在一种实施方式中,当|qcoeff[cidx][x'][y']|《1时,所述第三码率估计等于0;qcoeff[cidx][x'][y']为所述第一量化系数;
[0130]
当|qcoeff[cidx][x'][y']|≥1且所述编码器适应hevc标准时,所述第三码率估计采用如下计算式计算得到:
[0131][0132]
其中,rateesttab为第九表格,所述第九表格用于存储qp1%3、语法元素的条件概率状态与码率估计的对应关系,qp1为所述编码器适应所述hevc标准时的第一量化参数,greaterthanonetabidx为所述第三语法元素的当前条件概率状态,bitdepth为视频的比特位深度;和/或,
[0133]
当|qcoeff[cidx][x'][y']|≥1且所述编码器适应av1标准时,所述第三码率估计采用如下计算式计算得到:
[0134][0135]
其中,rateesttab为第九表格,所述第九表格用于存储qp1%3、语法元素的条件概率状态与码率估计的对应关系,qp1为所述编码器适应所述hevc标准时的第一量化参数,由所述编码器适应所述av1标准时的第二量化参数转换得到,greaterthanonetabidx为所述第三语法元素的当前条件概率状态。
[0136]
在一种实施方式中,当|qcoeff[cidx][x'][y']|《2时,所述第四码率估计等于0;
qcoeff[cidx][x'][y']为所述第一量化系数;
[0137]
当|qcoeff[cidx][x'][y']|≥2且所述编码器适应hevc标准时,所述第四码率估计采用如下计算式计算得到:
[0138][0139]
其中,rateesttab为第九表格,所述第九表格用于存储qp1%3、语法元素的条件概率状态与码率估计的对应关系,qp1为所述编码器适应所述hevc标准时的第一量化参数,greaterthantwotabidx为所述第五语法元素的当前条件概率状态,bitdepth为视频的比特位深度;和/或,
[0140]
当|qcoeff[cidx][x'][y']|≥2且所述编码器适应av1标准时,所述第四码率估计采用如下计算式计算得到:
[0141][0142]
其中,rateesttab为第九表格,所述第九表格用于存储qp1%3、语法元素的条件概率状态与码率估计的对应关系,qp1为所述编码器适应所述hevc标准时的第一量化参数,由所述编码器适应所述av1标准时的第二量化参数转换得到,greaterthantwotabidx为所述第五语法元素的当前条件概率状态。
[0143]
在一种实施方式中,当|qcoeff[cidx][x'][y']|《3时,所述第五码率估计等于0;qcoeff[cidx][x'][y']为所述第一量化系数;
[0144]
当|qcoeff[cidx][x'][y']|≥3且所述编码器适应hevc标准时,所述第五码率估计采用如下计算式计算得到:
[0145]
abscoeffminustwrate[cidx][x
′
][y
′
]=(golombcodelength
×
eqprobrateesttab[qp1-6*(bitdepth-8)]);
[0146]
其中,golombcodelength为采用golomb-rice码编码第六语法元素所需的码长,eqprobrateesttab为第十表格,用于存储在第六语法元素的条件概率均匀分布的情况下,索引值和码率估计的对应关系,所述索引值根据第一量化参数与比特位深度确定,所述第一量化参数为所述编码器适应所述hevc标准时的量化参数;和/或,
[0147]
当|qcoeff[cidx][x'][y']|≥3且所述编码器适应av1标准时,所述第五码率估计采用如下计算式计算得到:
[0148]
abscoeffminustworate[cidx][x
′
][y
′
]=golombcodelength
×
(eqprobrateesttab[qp1]-(eqprobrateesttab[qp1]>>2));
[0149]
其中,golombcodelength为采用golomb-rice码编码第六语法元素所需的码长,eqprobrateesttab为第十表格,用于存储在第六语法元素的条件概率均匀分布的情况下,第一量化参数与码率估计的对应关系,所述第一量化参数由第二量化参数转换而来,所述第一量化参数为所述编码器适应所述hevc标准时的量化参数,所述第二量化参数为所述编码器适应所述av1标准时的量化参数。
[0150]
在一种实施方式中,所述针对每个所述第一量化系数子矩阵,对非零的所述第一
量化系数进行系数调整,得到第二量化系数子矩阵,包括:
[0151]
针对每个非零的所述第一量化系数,如果所述第一量化系数在所述第一扫描顺序中位于所述第一个非零的第一量化系数之后,计算将所述第一量化系数归零的第三编码代价;
[0152]
对所述第一量化系数进行微调,得到对应的所述第二量化系数,并计算微调所述第一量化系数的第四编码代价;
[0153]
获取所有所述第三编码代价的和值,得到第五编码代价;所述第五编码代价为所述第一量化系数子矩阵归零的编码代价;
[0154]
获取所有所述第四编码代价的和值,得到第六编码代价;所述第六编码代价为所述第一量化系数子矩阵进行系数微调的编码代价;
[0155]
如果所述第五编码代价小于所述第六编码代价,将所述第一量化系数子矩阵置零,得到所述第二量化系数子矩阵;
[0156]
如果所述第六编码代价小于所述第五编码代价,根据所述第二量化系数得到所述第二量化系数子矩阵。
[0157]
在一种实施方式中,所述获取所有所述第三编码代价的和值,得到第五编码代价,采用如下计算式计算得到:
[0158][0159]
其中,cgcost0为所述第五编码代价,zerooutcost[cidx][x'][y']为所述第三编码代价,cidx为y、u、v分量索引,x'、y'为所述第一量化系数在所述第一量化系数子矩阵中的坐标,cgsize为所述第一量化系数子矩阵的大小。
[0160]
在一种实施方式中,所述第三编码代价采用如下计算式计算得到:
[0161]
zerooutcost[cidx][x
′
][y
′
]=distortion[cidx][x
′
][y
′
];
[0162]
其中,distortion[cidx][x'][y']为像素域的误差。
[0163]
在一种实施方式中,所述获取所有所述第四编码代价的和值,得到第六编码代价,采用如下计算式计算得到:
[0164][0165]
其中,cgcost1为所述第六编码代价,tweakedcoeffcost[cidx][x'][y']为所述第四编码代价,cidx为y、u、v分量索引,x'、y'为所述第一量化系数在所述第一量化系数子矩阵中的坐标,cgsize为所述第一量化系数子矩阵的大小。
[0166]
在一种实施方式中,所述对所述第一量化系数进行微调,得到对应的所述第二量化系数,并计算微调所述第一量化系数的第四编码代价,包括:
[0167]
将所述第一量化系数调整为第一候选量化系数,并计算调整所述第一量化系数的第一候选编码代价,其中,所述第一候选量化系数为0;
[0168]
如果所述第一量化系数的绝对值大于1,将所述第一量化系数调整为第二候选量化系数,并计算调整所述第一量化系数的第二候选编码代价,其中,所述第二候选量化系数的符号与所述第一量化系数的符号相同,所述第二候选量化系数的绝对值等于所述第一量化系数的绝对值减去1;
[0169]
计算所述第一量化系数的第三候选编码代价,其中,不对所述第一量化系数做任
何调整;
[0170]
选取所述第一候选编码代价、所述第二候选编码代价与所述第三候选编码代价中最小的编码代作为所述第四编码代价;
[0171]
选取所述第一候选编码代价、所述第二候选编码代价与所述第三候选编码代价中最小的编码代价对应的量化系数作为所述第二量化系数。
[0172]
在一种实施方式中,所述第二量化系数采用如下计算式计算得到:
[0173][0174]
其中,newqcoeff[cidx][x'][y']为所述第二量化系数,sign[cidx][x'][y']为所述第一量化系数的符号,cost0[cidx][x'][y']为所述第一候选编码代价,cost1[cidx][x'][y']为所述第二候选编码代价,cost2[cidx][x'][y']为所述第三候选编码代价。
[0175]
在一种实施方式中,所述第四编码代价采用如下计算式计算得到:
[0176]
tweakedcoeffcost[cidx][x
′
][y
′
]=min(cost0[cidx][x
′
][y
′
],cost1[cidx][x
′
][y
′
],cost2[cidx][x
′
][y
′
]));
[0177]
其中,tweakedcoeffcost[cidx][x'][y']为所述第四编码代价。
[0178]
根据本技术实施例的第二方面,提供一种率失真优化量化装置,应用于编码器,所述编码器适应hevc标准与av1标准中任意一个时,在率失真优化量化过程中,对于码率估计和失真估计,均采用通用的变化量化算法;所述装置,包括:
[0179]
量化模块,被配置为对变换系数矩阵进行量化,得到第一量化系数矩阵;其中,所述变换系数矩阵包括至少一个变换系数,所述第一量化系数矩阵包括至少一个第一量化系数;
[0180]
分解模块,被配置为将所述第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵;
[0181]
统计模块,被配置为对至少两个所述第一量化系数子矩阵进行数据统计,获取量化统计数据;所述量化统计数据用于消除至少两个所述第一量化系数子矩阵之间的依赖关系;
[0182]
调整模块,被配置为针对每个所述第一量化系数子矩阵,对非零的所述第一量化系数进行系数调整,得到第二量化系数子矩阵;所述第二量化系数子矩阵包括至少一个第二量化系数;至少两个所述第一量化系数子矩阵的系数调整并行执行;
[0183]
获取模块,被配置为根据所述第二量化系数子矩阵以及所述第一量化系数子矩阵与所述第一量化系数矩阵的关系,获取第二量化系数矩阵,所述第二量化系数矩阵包括至少一个所述第二量化系数。
[0184]
根据本技术实施例的第三方面,提供一种电子设备,包括存储器与处理器,所述存储器用于存储所述处理器可执行的计算机程序;所述处理器用于执行所述存储器中的计算机程序,以实现上述的方法。
[0185]
根据本技术实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,当所述存储介质中的可执行的计算机程序由处理器执行时,能够实现上述的方法。
[0186]
与现有技术相比,本技术的有益效果在于:由于在对变换系数矩阵进行量化得到第一量化系数矩阵后,将第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵,并对至少两个第一量化系数子矩阵进行数据统计,获取量化统计数据,这样,利用量化统计数据可以用于消除至少两个第一量化系数子矩阵之间的依赖关系,后续可以第一量化系数子矩阵为单位并行处理量化系数。接着,针对每个第一量化系数子矩阵,对非零的第一量化系数进行系数调整,得到第二量化系数子矩阵,第二量化系数子矩阵包括至少一个第二量化系数,其中,至少两个第一量化系数子矩阵的系数调整并行执行。然后,根据第二量化系数子矩阵以及第一量化系数子矩阵与第一量化系数矩阵的关系,获取第二量化系数矩阵,第二量化系数矩阵包括至少一个第二量化系数。而且,编码器适应hevc标准与av1标准中任意一个时,在率失真优化量化过程中,对于码率估计和失真估计,均采用通用的变化量化算法,对于hevc标准和av1标准,只有部分参数取值不同,主要的硬件模块可以通用,能够同时适应h.265/hevc和av1标准,尽可能共享硬件资源,进而,可以减小率失真优化量化模块的面积。综上所述,本技术提供的技术方案,可以并行处理量化系数,提高硬件的处理速度,降低硬件的处理延迟,而且,能够同时适应h.265/hevc和av1标准,尽可能共享硬件资源,减小率失真优化量化模块的面积。
附图说明
[0187]
图1是根据一示例性实施例示出的一种编码器的框图。
[0188]
图2是根据一示例性实施例示出的一种率失真优化量化方法的流程图。
[0189]
图3是根据另一示例性实施例示出的一种率失真优化量化方法的流程图。
[0190]
图4是根据一示例性实施例示出的一种第一量化系数矩阵的扫描示意图。
[0191]
图5是根据另一示例性实施例示出的一种率失真优化量化方法的流程图。
[0192]
图6是根据另一示例性实施例示出的一种率失真优化量化方法的流程图。
[0193]
图7是根据另一示例性实施例示出的一种率失真优化量化方法的流程图。
[0194]
图8是根据另一示例性实施例示出的一种率失真优化量化方法的流程图。
[0195]
图9是根据另一示例性实施例示出的一种率失真优化量化方法的流程图。
[0196]
图10是根据另一示例性实施例示出的一种率失真优化量化方法的流程图。
[0197]
图11是根据一示例性实施例示出的一种率失真优化量化装置的框图。
[0198]
图12是根据一示例性实施例示出的一种电子设备的框图。
具体实施方式
[0199]
除非另作定义,在本说明书和权利要求书中使用的技术术语或者科学术语应当为本发明所属技术领域内具有一般技能的人士所理解的通常意义。以下将结合附图描述本发明的具体实施方式,需要指出的是,在这些实施方式的具体描述过程中,为了进行简明扼要的描述,本说明书不可能对实际的实施方式的所有特征均作详尽的描述。在不偏离本发明的精神和范围的情况下,本领域技术人员可以对本发明的实施方式进行修改和替换,所得实施方式也在本发明的保护范围之内。
[0200]
在介绍本技术提供的率失真优化量化方法之前,先介绍一下编码器以及率失真优化量化模块在编码器中的位置。如图1所示,编码器包括变换模块11、率失真优化量化模块
12以及熵编码模块13。率失真优化量化模块12位于变换模块11与熵编码模块13之间。
[0201]
本技术中的编码器为视频编码器。当新的一帧视频帧进入编码器后,编码器通常会将视频帧划分为一系列不重叠的正方形或矩形的块。此处的“块”实质上是指矩阵。给定一个目标块,编码器会尝试为其找到最佳预测块,然后从目标块中减去预测块获得残差块。
[0202]
变换模块11被配置为对残差快进行频域变换(一般是离散余弦变换,但不限于此)。变换模块11的输出是一个变换系数块(变换系数矩阵)。在大多数现代视频压缩标准(如hevc和av1)中,变换系数块称为变换单元(tu)。
[0203]
率失真优化量化模块12用于对变换模块11输出的变换系数矩阵执行率失真优化量化,并输出量化系数矩阵(下文中的第二量化系数矩阵)给熵编码模块13。率失真优化量化模块12可包括量化模块121、分解模块122、统计模块123、调整模块124以及获取模块125。量化模块121被配置为对变换系数矩阵进行量化,得到第一量化系数矩阵;其中,变换系数矩阵包括至少一个变换系数,第一量化系数矩阵包括至少一个第一量化系数。分解模块122被配置为将第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵;统计模块123被配置为对至少两个第一量化系数子矩阵进行数据统计,获取量化统计数据;量化统计数据用于消除至少两个第一量化系数子矩阵之间的依赖关系;调整模块124被配置为针对每个第一量化系数子矩阵,对非零的第一量化系数进行系数调整,得到第二量化系数子矩阵;第二量化系数子矩阵包括至少一个第二量化系数;至少两个第一量化系数子矩阵的系数调整并行执行;获取模块125被配置为根据第二量化系数子矩阵以及第一量化系数子矩阵与第一量化系数矩阵的关系,获取第二量化系数矩阵,第二量化系数矩阵包括至少一个第二量化系数。此处仅对率失真优化量化模块12进行简单介绍,下面会对率失真优化量化模块12进行详细介绍。
[0204]
熵编码模块13被配置为对率失真优化量化模块12输出的量化系数矩阵进行编码,例如,可采用cabac(context-based adaptive binary arithmetic coding,基于上下文的二进制算术编码)编码方式进行编码,但不限于此。
[0205]
以上简要介绍了编码器以及率失真优化量化模块12在编码器中的位置,下面对率失真优化量化模块12及其功能进行详细的介绍。
[0206]
图2是根据一示例性实施例示出的一种率失真优化量化方法的流程图。该率失真优化量化方法,可以应用于编码器。该编码器适应hevc标准与av1标准中任意一个时,在率失真优化量化过程中,对于码率估计和失真估计,均采用通用的变化量化算法。请参见图2,该率失真优化量化方法,可以包括以下步骤:
[0207]
步骤201,对变换系数矩阵进行量化,得到第一量化系数矩阵;其中,变换系数矩阵包括至少一个变换系数,第一量化系数矩阵包括至少一个第一量化系数。
[0208]
在本实施例中,变换系数矩阵为由多个变换系数组成的多行多列的变换系数矩阵。例如,变换系数矩阵的大小可以为32*32,但不限于此。
[0209]
在本实施例中,对变换系数矩阵进行量化可以理解为对变换系数矩阵中的每个变换系数进行量化。对一个变换系数进行量化,可以得到对应的第一量化系数。
[0210]
在本实施例中,针对变换系数矩阵中的每个变换系数,可采用量化偏移参数对变换系数进行量化,得到第一量化系数。其中,第一量化系数可采用如下计算式计算得到:
[0211]
qcoeff[cidx][x][y]=sign[cidx][x][y]
×
((|tcoeff[cidx][x][y]|
×
quantizationscaler[cidx][x][y]+(1<<(quantizationshift[cidx][x][y]-1)))>>quantizationshift[cidx][x][y]);
ꢀꢀꢀꢀ
(2)
[0212]
其中,qcoeff[cidx][x][y]为第一量化系数,sign[cidx][x][y]为变换系数的符号,tcoeff[cidx][x][y]为变换系数,quantizationscaler[cidx][x][y]为量化缩放参数,quantizationshift[cidx][x][y]为量化偏移参数,cidx为y、u、v分量索引,x、y为变换系数在变换系数矩阵中的坐标。
[0213]
在本实施例中,编码器能够同时适应hevc标准和av1标准。在其他实施例中,编码器可单独适应hevc标准或av1标准。在本文中,为避免内容冗余,仅对编码器能够同时适应hevc标准和av1标准的方案进行详细介绍。
[0214]
在本实施例中,量化偏移参数可采用如下计算式计算得到:
[0215][0216]
其中,qp1为编码器适应hevc标准时的第一量化参数,transformshift为描述变换系数矩阵的内部变换移位的参数,numbitsdcqp为表示低频变换系数的量化索引dcqp所需的比特位数,tusize为变换系数矩阵的大小,bitdepth为视频的比特位深度,numbitsacqp为表示高频变换系数的量化索引acqp所需的比特位数。
[0217]
由式(3)可知,当编码器适应hevc标准时,量化偏移参数采用如下计算式计算得到:
[0218][0219]
其中,transformshift可采用如下计算式计算得到:
[0220]
transformshift=15-bitdepth-log2(tusize)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(5)
[0221]
当编码器适应av1标准时,量化偏移参数采用如下计算式计算得到:
[0222][0223]
其中,dcqp采用如下计算式计算得到:
[0224][0225]
其中,av1dcqlookup为第一表格,用于存储视频的比特位深度为8时第一量化参数与低频变换系数的量化索引的对应关系,av1dcqloopup10为第二表格,用于存储视频的比特位深度为10时第一量化参数与低频变换系数的量化索引的对应关系。
[0226]
由式(7)可知,当视频的比特位深度为8时,可根据第一量化参数(qp1)查询第一表格,得到dcqp的值,当视频的比特位深度为10时,可根据第一量化参数(qp1)查询第二表格,得到dcqp的值。
[0227]
其中,第一表格如下:
[0228]
表1.av1dcqlookup
[0229]
qpdcqp04
182839410511612
……
250109825111392521184253123225412822551336
[0230]
第二表格如下:
[0231]
表2.av1dcqlookup10
[0232][0233][0234]
其中,acqp采用如下计算式计算得到:
[0235][0236]
其中,av1acqlookup为第三表格,用于存储视频的比特位深度为8时第一量化参数与高频变换系数的量化索引的对应关系,av1acqloopup10为第四表格,用于存储视频的比特位深度为10时第一量化参数与高频变换系数的量化索引的对应关系。
[0237]
由式(8)可知,当视频的比特位深度为8时,可根据第一量化参数(qp1)查询第三表格,得到acqp的值,当视频的比特位深度为10时,可根据第一量化参数(qp1)查询第四表格,得到acqp的值。
[0238]
其中,第三表格如下:
[0239]
表3.av1acqlookup
[0240][0241][0242]
第四表格如下:
[0243]
表4.av1acqlookup10
[0244]
qpacqp0419211313416518621
……
250664025167682526900253703625471722557321
[0245]
需要注意的是,由于av1和hevc共享统一的rdoq设计和实现,而且本rdoq的码率估计和失真估计基于hevc的变换量化算法实现,因此,当编码器适应av1标准时,式(7)和式(8)中使用的量化参数是编码器适应hevc标准时的第一量化参数,而不是编码器适应av1标准时的第二量化参数(qp2),因此,当编码器适应av1标准时,在计算量化偏移参数之前,需要先将编码器适应av1标准时的第二量化参数(qp2)转换为第一量化参数(qp1)。其中,可采用如下计算式将qp2转换为qp1:
[0246][0247]
其中,qp2为第二量化参数,av1tohevcqp为第五表格,用于存储视频的比特位深度为8时第二量化参数与第一量化参数的对应关系,av1tohevcqp10为第六表格,用于存储视频的比特位深度为10时第二量化参数与第一量化参数的对应关系。
[0248]
由式(9)可知,当视频的比特位深度为8时,可根据qp2查询第五表格,得到qp1的值,当视频的比特位深度为10时,可根据qp2查询第六表格,得到qp1的值。
[0249]
其中,第五表格如下:
[0250]
表5.av1tohevcqp
[0251]
qp2qp100122536475868
……
250512515125251253512545125551
[0252]
第六表格如下:
[0253]
表6.av1tohevcqp10
[0254]
qp2qp100102030405060
……
25051251512525125351
2545125551
[0255]
quantizationscaler[cidx][x][y]可采用如下计算式计算得到:
[0256][0257]
其中,hevcscalinglist为第七表格,用于存储编码器适应hevc标准时qp1%6与量化缩放参数的对应关系,numbitsdcqp为表示低频变换系数的量化索引dcqp所需的比特位数,numbitsacqp为表示高频变换系数的量化索引acqp所需的比特位数。
[0258]
由式(10)可知,当编码器适应hevc标准时,可采用如下计算式计算得到:
[0259]
quantizationscaler[cidx][x][y]=hevcscalinglist[qp1%6];
ꢀꢀꢀꢀꢀꢀ
(11)
[0260]
即,当编码器适应hevc标准时,根据qp1%6查询第七表格,得到对应的量化缩放参数。其中,第七表格如下:
[0261]
表7.hevcscalinglist
[0262]
qp1%6quantizationscaler026214123302220560318396416384514564
[0263]
当编码器适应av1标准时,quantizationscaler[cidx][x][y]采用如下计算式计算得到:
[0264][0265]
步骤202,将第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵。
[0266]
在本实施例中,以第一量化系数矩阵的大小为32*32为例进行说明。在划分第一量化系数矩阵时,可以根据实际需求确定划分的第一量化系数子矩阵(cg)的大小。其中,划分得到的至少两个的第一量化系数子矩阵的大小相同。在本实施例中,以第一量化系数子矩阵的大小为4*4为例进行说明。当然,在其他实施例中,第一量化系数子矩阵的大小也可以为8*8或16*16。
[0267]
步骤203,对至少两个第一量化系数子矩阵进行数据统计,获取量化统计数据。量化统计数据用于消除至少两个第一量化系数子矩阵之间的依赖关系。
[0268]
在本实施例中,如图3所示,步骤203可以包括如下步骤:
[0269]
步骤301,对第一量化系数矩阵的第一量化系数子矩阵,按照指定的第一扫描顺序对至少两个第一量化系数子矩阵分别进行扫描。
[0270]
步骤302,针对每个第一量化系数子矩阵,按照指定的第二扫描顺序对第一量化系数进行扫描,获取量化统计数据;第一扫描顺序与第二扫描顺序相同。
[0271]
如图4所示,对第一量化系数矩阵41的第一量化系数子矩阵411,按照指定的第一扫描顺序s1对所有第一量化系数子矩阵411分别进行扫描。第一扫描顺序s1与cabac处理顺序相似,也可称为zig-zag扫描顺序。从右下角的第一量化系数子矩阵411开始,然后向上移动,然后沿对角线向下移动,并重复这种对角线模式,直到到达第一量化系数矩阵41的左上角。
[0272]
如图4所示,针对每个第一量化系数子矩阵411,按照指定的第二扫描顺序s2对第一量化系数4111进行扫描,获取量化统计数据;第一扫描顺序s1与第二扫描顺序s2相同。对第一量化系数矩阵扫描结束后,可以获得量化统计数据。
[0273]
在本实施例中,步骤203之前,还为至少一个上下文模型创建对应的数组,并初始化上下文模型为预定义值;数组用于存储对应的上下文模型的状态;数组的每个元素为8位整数。其中,至少一个上下文模型在率失真优化量化过程中是固定的。
[0274]
其中,至少一个上下文模型可包括第一上下文模型、第二上下文模型、第三上下文模型与第四上下文模型。至少一个上下文模型对应的数组包括第一数组、第二数组、第三数组与第四数组。
[0275]
第一上下文模型为significantcoeffgroupctx[2],用于存储第一语法元素的条件概率状态,第一语法元素为significantcoeffcroup,用于指出当前的第一量化系数子矩阵是否有非零的第一量化系数。第一语法元素为第一上下文模型。
[0276]
第二上下文模型为sigcoeffctx[44],用于存储第二语法元素的条件概率状态,第二语法元素为sigcoeffflag,用于指出当前的第一量化系数是否为零。第二语法元素为第二上下文模型。
[0277]
第三上下文模型为greateronecoeffctx[24],用于存储第三语法元素的条件概率状态,第三语法元素为abscoeffgreaterthanoneflag,用于指出当前的第一量化系数的绝对值是否大于1。第三语法元素为第三上下文模型。
[0278]
第四上下文模型为levelabscoeffctx[6],用于存储第四语法元素的条件概率状态,第四语法元素为levelabscoeff,是当前的第一量化系数的绝对值。第四语法元素为第四上下文模型。
[0279]
在本实施例中,量化统计数据包括:第一量化系数子矩阵中绝对值为1的第一量化系数的数量、第一量化系数子矩阵中绝对值大于1的第一量化系数的数量、第一量化系数子矩阵中绝对值大于2的第一量化系数的数量、第一量化系数矩阵中按照第一扫描顺序排列的第一个非零的第一量化系数的位置、第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为4的第一量化系数的位置、第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为7的第一量化系数的位置、第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为13的第一量化系数的位置以及第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为25的第一量化系数的位置。
[0280]
其中,第一量化系数子矩阵中绝对值为1的第一量化系数的数量存储于名为cgonecnt[64]的第五数组中,第五数组在处理变换系数矩阵前或在数据统计前初始化为全零数组,在数据统计过程中,如果当前第一量化系数的绝对值为1,对应的第一量化系数子
矩阵的cgonecnt自增1。第一量化系数子矩阵中绝对值为1的第一量化系数的数量采用如下计算式计算得到:
[0281][0282]
其中,qcoeff[cidx][x][y]为第一量化系数,cidx为y、u、v分量索引,x、y为第一量化系数在第一量化系数矩阵中的坐标,tusize为变换系数矩阵的大小。
[0283]
第一量化系数子矩阵中绝对值大于1的第一量化系数的数量存储于名为cggreatherthanonecnt[64]的第六数组中,第六数组在处理变换系数矩阵前或在数据统计前初始化为全零数组,在数据统计过程中,如果当前第一量化系数的绝对值大于1,对应的第一量化系数子矩阵的cggreaterthanonecnt自增1。第一量化系数子矩阵中绝对值大于1的第一量化系数的数量采用如下计算式计算得到:
[0284][0285]
其中,qcoeff[cidx][x][y]为第一量化系数,cidx为y、u、v分量索引,x、y为第一量化系数在第一量化系数矩阵中的坐标,tusize为变换系数矩阵的大小。
[0286]
第一量化系数子矩阵中绝对值大于2的第一量化系数的数量存储于名为cggreaterthantwocnt[64]的第七数组中,第七数组在处理变换系数矩阵前或在数据统计前初始化为全零数组,在数据统计过程中,如果当前第一量化系数的绝对值大于2,对应的第一量化系数子矩阵的cggreaterthantwocnt自增1。第一量化系数子矩阵中绝对值大于2的第一量化系数的数量采用如下计算式计算得到:
[0287][0288]
其中,qcoeff[cidx][x][y]为第一量化系数,cidx为y、u、v分量索引,x、y为第一量化系数在第一量化系数矩阵中的坐标,tusize为变换系数矩阵的大小。
[0289]
第一个绝对值为4的第一量化系数的位置存储于名为cgfirst4loc[64][2]的第八数组中,第八数组在处理变换系数矩阵前或在数据统计前所有元素初始化为-1,第一个绝对值为4的第一量化系数的位置的纵坐标存储于cgfirst4loc[64][0],横坐标存储于cgfirst4loc[64][1]。如果coeff[cidx][x][y]是第一量化系数子矩阵中第一个绝对值为4的系数,则cgfirst4loc更新为:
[0290][0291][0292]
其中,cidx为y、u、v分量索引,x、y为第一个绝对值为4的系数在第一量化系数矩阵中的坐标,tusize为变换系数矩阵的大小,y1为第一个绝对值为4的第一量化系数在第一量化系数子矩阵中的纵坐标,x1为第一个绝对值为4的第一量化系数在第一量化系数子矩阵中的横坐标。
[0293]
第一个绝对值为7的第一量化系数的位置存储于名为cgfirst7loc[64][2]的第九数组中,第九数组在处理变换系数矩阵前或在数据统计前所有元素初始化为-1,第一个绝对值为7的第一量化系数的位置的纵坐标存储于cgfirst7loc[64][0],横坐标存储于
cgfirst7loc[64][1]。如果coeff[cidx][x][y]是第一量化系数子矩阵中第一个绝对值为7的系数,则cgfirst7loc更新为:
[0294][0295][0296]
其中,cidx为y、u、v分量索引,x、y为第一个绝对值为7的系数在第一量化系数矩阵中的坐标,tusize为变换系数矩阵的大小,y2为第一个绝对值为7的第一量化系数在第一量化系数子矩阵中的纵坐标,x2为第一个绝对值为7的第一量化系数在第一量化系数子矩阵中的横坐标。
[0297]
第一个绝对值为13的第一量化系数的位置存储于名为cgfirst13loc[64][2]的第十数组中,第十数组在处理变换系数矩阵前或在数据统计前所有元素初始化为-1,第一个绝对值为13的第一量化系数的位置的纵坐标存储于cgfirst13loc[64][0],横坐标存储于cgfirst13loc[64][1]。如果coeff[cidx][x][y]是第一量化系数子矩阵中第一个绝对值为13的系数,则cgfirst13loc更新为:
[0298][0299][0300]
其中,cidx为y、u、v分量索引,x、y为第一个绝对值为13的系数在第一量化系数矩阵中的坐标,tusize为变换系数矩阵的大小,y3为第一个绝对值为13的第一量化系数在第一量化系数子矩阵中的纵坐标,x3为第一个绝对值为13的第一量化系数在第一量化系数子矩阵中的横坐标。
[0301]
第一个绝对值为25的第一量化系数的位置存储于名为cgfirst25loc[64][2]的第十一数组中,第十一数组在处理变换系数矩阵前或在数据统计前所有元素初始化为-1,第一个绝对值为25的第一量化系数的位置的纵坐标存储于cgfirst25loc[64][0],横坐标存储于cgfirst25loc[64][1]。如果coeff[cidx][x][y]是第一量化系数子矩阵中第一个绝对值为25的系数,则cgfirst25loc更新为:
[0302][0303][0304]
其中,cidx为y、u、v分量索引,x、y为第一个绝对值为25的系数在第一量化系数矩阵中的坐标,tusize为变换系数矩阵的大小,y4为第一个绝对值为25的第一量化系数在第一量化系数子矩阵中的纵坐标,x4为第一个绝对值为25的第一量化系数在第一量化系数子矩阵中的横坐标。
[0305]
第一量化系数矩阵中第一个非零的第一量化系数的位置定义为firstsigcoeffx和firstsigcoeffy。其中,firstsigcoeffx为第一个非零的第一量化系数在第一量化系数矩阵中的横坐标,firstsigcoeffy为第一个非零的第一量化系数在第一量化系数矩阵中的纵坐标。
[0306]
本实施例中,上述的每个数组的每个元素为8位整数。本技术中,采用整数运算,提出了一种主要基于32位整数计算的rdoq模块,从而显着减少了硬件面积和处理延迟。
[0307]
需要说明的是,传统的rdoq需要大量基于浮点运算和大量乘法来计算编码成本。这可能会成倍地增加硬件复杂度。浮点运算会极大增加硬件开销,因为基于浮点运算的电路需要更大的面积并且需要更多的周期来运行。
[0308]
步骤204,针对每个第一量化系数子矩阵,对非零的第一量化系数进行系数调整,得到第二量化系数子矩阵;第二量化系数子矩阵包括至少一个第二量化系数;至少两个第一量化系数子矩阵的系数调整并行执行。
[0309]
在本实施例中,如图5所示,步骤204,可以包括以下步骤:
[0310]
步骤501,针对每个非零的第一量化系数,计算按照至少两个系数调整方案进行系数调整的第一编码代价。
[0311]
步骤502,针对每个系数调整方案,根据所有第一编码代价的和值,获得第二编码代价;第二编码代价为第一量化系数子矩阵进行系数调整的编码代价。
[0312]
步骤503,从至少两个系数调整方案中确定目标系数调整方案,其中,目标系数调整方案的第二编码代价为至少两个系数调整方案的第二编码代价中最小的编码代价。
[0313]
步骤504,根据目标系数调整方案对第一量化系数子矩阵中的非零的第一量化系数进行系数调整,得到第二量化系数子矩阵。
[0314]
在本实施例中,至少两个系数调整方案可包括三个系数调整方案:第一系数调整方案、第二系数调整方案以及第三系数调整方案。三个系数调整方案对非零的第一量化系数的调整的幅度不同。例如,第一系数调整方案可以是将第一量化系数置零,第二系数调整方案可以是保持第一量化系数的符号不变,绝对值减去1,第三系数调整方案可以是保持第一量化系数的符号不变,绝对值减去2,但不限于此。
[0315]
在本实施例中,按照每个系数调整方案调整非零的第一量化系数,产生对应的第一编码代价。对于每个第一量化系数子矩阵,针对每个非零的第一量化系数,计算按照至少两个系数调整方案进行系数调整的第一编码代价。例如,针对每个非零的第一量化系数,计算按照第一系数调整方案、第二系数调整方案以及第三系数调整方案进行系数调整的第一编码代价,可以得到三个第一编码代价。
[0316]
然后,针对每个系数调整方案,根据所有第一编码代价的和值,获得第二编码代价;第二编码代价为第一量化系数子矩阵进行系数调整的编码代价。例如,针对第一系数调整方案、第二系数调整方案以及第三系数调整方案中的每个系数调整方案,可以获得对应的第二编码代价,共获得三个第二编码代价。
[0317]
然后,从至少两个系数调整方案的第二编码代价中选取的最小的编码代价,然后将该最小的编码代价对应的系数调整方案作为目标系数调整方案,实现从至少两个系数调整方案中确定目标系数调整方案。例如,如果三个第二编码代价中第一系数调整方案对应的第二编码代价最小,则第一系数调整方案为目标系数调整方案。
[0318]
然后,根据目标系数调整方案对第一量化系数子矩阵中的非零的第一量化系数进行系数调整,得到第二量化系数子矩阵。
[0319]
在本实施例中,第一编码代价采用如下计算式计算得到:
[0320]
cost1[cidx][x
′
][y
′
]=distortion[cidx][x
′
][y
′
]+rate[cidx][x
′
][y
′
]
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(24)
[0321]
其中,cost1[cidx][x'][y']为第一编码代价,distortion[cidx][x'][y']为像素
域的误差,rate[cidx][x'][y']为编码码率,cidx为y、u、v分量索引,x'、y'为第一量化系数在第一量化系数子矩阵中的坐标。
[0322]
需要说明的是,上述的式(24)是计算本文中所有编码代价的通用计算式。
[0323]
其中,像素域的误差可采用如下计算式计算得到:
[0324]
distortion[cidx][x
′
][y
′
]=(merrr[cidx][x
′
][y
′
]>>(2
×
transformshift+1))
×
merr[cidx][x
′
][y
′
]
ꢀꢀꢀꢀꢀ
(25)
[0325]
其中,merr[cidx][x'][y']为量化误差的反向还原值,transformshift为描述变换系数矩阵的内部变换移位的参数。
[0326]
当视频的比特位深度为8时,merr[cidx][x'][y']可采用如下计算式计算得到:
[0327][0328]
由式(26)可知,当编码器适应hevc标准且视频的比特位深度为8时,量化误差的反向还原值采用如下计算式计算得到:
[0329]
merr[cidx][x
′
][y
′
]=(err[cidx][x
′
][y
′
]>>12)
×
hevcscaler[qp1%6]
ꢀꢀꢀꢀꢀꢀꢀꢀ
(27)
[0330]
其中,err[cidx][x'][y']为量化误差,hevcscaler为第八表格,用于存储qp1%6与放大系数的对应关系,根据qp1%6查询第八表格可获得对应的放大系数(scaler),qp1为编码器适应hevc标准时的第一量化参数。
[0331]
其中,将量化误差乘以一个放大系数即可得到像素域的失真。对于hevc和av1两种编码器,由于它们的变换基不同,因此,放大系数也不同。
[0332]
其中,第八表格如下:
[0333]
表8.hevcscaler
[0334]
qp1%6scaler040145251357464572
[0335]
当编码器适应av1标准且视频的比特位深度为8时,量化误差的反向还原值采用如下计算式计算得到:
[0336][0337]
其中,err[cidx][x'][y']为量化误差,numbitsdcqp为表示低频变换系数的量化索引dcqp所需的比特位数,numbitsacqp为表示高频变换系数的量化索引acqp所需的比特位数。
[0338]
当视频的比特位深度为10时,量化误差的反向还原值采用如下方法得到:首先,获取视频的比特位深度为8时的量化误差的反向还原值,将视频的比特位深度为8时的量化误差的反向还原值右移两位,得到视频的比特位深度为10时的量化误差的反向还原值。其中,
将视频的比特位深度为8时的量化误差的反向还原值右移两位,得到视频的比特位深度为10时的量化误差的反向还原值的计算式如下:
[0339]
merr[cidx][x
′
][y
′
]》=(bitdepth-8)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(29)
[0340]
其中,量化误差采用如下计算式计算得到:
[0341]
err[cidx][x
′
][y
′
]=||tcoeff[cidx][x
′
][y
′
]|
×
quantizationscaler[cidx][x
′
][y
′
]-(|qcoeff[cidx][x
′
][y
′
]|<<quantizationshift[cidx][x
′
][y
′
])|
ꢀꢀꢀꢀꢀꢀ
(30)
[0342]
其中,tcoeff[cidx][x'][y']为变换系数,quantizationscaler[cidx][x'][y']为量化缩放参数,qcoeff[cidx][x'][y']为第一量化系数,quantizationshift[cidx][x'][y']为量化偏移参数。
[0343]
其中,|tcoeff[cidx][x'][y']|
×
quantizationscaler[cidx][x'][y']是将变换系数乘上一个量化缩放参数来近似原始的量化输入,(|qcoeff[cidx][x'][y']|<<quantizationshift[cidx][x'][y'])是反量化后的值,将它们相减就是量化误差。由于量化误差被变换放大,因此,需要将量化误差反向还原,计算上述的量化误差的反向还原值。
[0344]
由于量化误差是基于频域的失真,编码器需要知道像素域的失真来计算最终的编码代价,于是按照上述的式(25)将频域的量化误差转换成像素域的误差。
[0345]
编码码率采用如下计算式计算得到:
[0346]
rate[cidx][x
′
][y
′
]=sigcoeffflagrate[cidx][x
′
][y
′
]+coeffabslevelrate[cidx][x
′
][y
′
]
ꢀꢀꢀꢀꢀꢀꢀ
(31)
[0347]
其中,sigcoeffflagrate[cidx][x'][y']为第二语法元素的第一码率估计,第二语法元素为sigcoeffflag,用于指出当前的第一量化系数是否为零,coeffabslevelrate[cidx][x'][y']为对非零的第一量化系数的绝对值进行编码的语法元素的第二码率估计。
[0348]
其中,sigcoeffflagrate[cidx][x'][y']可采用如下计算式计算得到:
[0349][0350]
其中,rateesttab为第九表格,第九表格用于存储qp1%3、语法元素的条件概率状态与码率估计的对应关系,qp1为编码器适应hevc标准时的第一量化参数,sigcoeffflagtabidx为第二语法元素的当前条件概率状态,bitdepth为视频的比特位深度。
[0351]
由式(32)可知,当编码器适应hevc时,第一码率估计采用如下计算式计算得到:
[0352][0353]
其中,根据qp1%3与sigcoeffflagtabidx查询第九表格得到的码率估计根据qp1与bitdepth进一步缩放得到第一码率估计。
[0354]
其中,第九表格如下:
[0355]
表9.rateesttab
[0356][0357][0358]
第九表格中,context index为语法元素的条件概率状态,rate estimation为码
率估计。
[0359]
由于hevc和av1都使用基于算术编码的熵编码器,本技术设计了如表9所示的通用的码率估计表。表9需要两个输入,qp1和语法元素的概率状态,根据输入,从表9中查询编码该语法元素所需的码率代价。例如,context index可以为第二语法元素的条件概率状态,也可以为第三语法元素的条件概率状态。即可以根据qp1%3与第二语法元素的条件概率状态查询第九表格得到对应的码率估计,也可以根据qp1%3与第三语法元素的条件概率状态查询第九表格得到对应的码率估计。sigcoeffflagtabidx采用如下计算式计算得到:
[0360][0361]
其中,sigcoeffctx为第二上下文模型,用于存储第二语法元素的条件概率状态,sigcoeffctxidx由当前的所述第一量化系数子矩阵顶部的两个相邻的所述第一量化系数子矩阵和左边的两个相邻的第一量化系数子矩阵的第一语法元素的值综合决定。
[0362]
当编码器适应av1标准时,sigcoeffflagrate[cidx][x'][y']采用如下计算式计算得到:
[0363][0364][0365]
为了编码非零的第一量化系数,编码器引入了三个语法元素:第三语法元素、第五语法元素与第六语法元素。第三语法元素为abscoeffgreaterthanoneflag,用于指出当前的第一量化系数的绝对值是否大于1,第五语法元素为abscoeffgreaterthantwo,用于指出当前的第一量化系数的绝对值是否大于2,第六语法元素为absceoffminustwo,用于表示当前的第一量化系数的绝对值减2。
[0366]
coeffabslevelrate[cidx][x'][y']采用如下计算式计算得到:
[0367]
coeffabslevelrate[cidx][x
′
][y
′
]=abscoeffgreaterthanoneflagrate[cidx][x
′
][y
′
]+abscoeffgreaterthantwoflagrate[cidx][x
′
][y
′
]+abscoeffminustworate[cidx][x
′
][y
′
];
ꢀꢀꢀꢀꢀ
(36)
[0368]
其中,abscoeffgreaterthanoneflagrate[cidx][x'][y']为第三语法元素的第三码率估计,abscoeffgreaterthantwoflagrate[cidx][x'][y']为第五语法元素的第四码率估计,abscoeffminustworate[cidx][x'][y']为第六语法元素的第五码率估计。
[0369]
其中,abscoeffgreaterthanoneflagrate[cidx][x'][y']采用如下计算式计算得到:
[0370][0371]
其中,rateesttab为第九表格,greaterthanonetabidx为第三语法元素的当前条件概率状态,其由cggreatherthanonecnt[64]中收集的统计数据,cidx以及cg在tu中的位置决定。
[0372]
由式(37)可知,当|qcoeff[cidx][x'][y']|《1时,第三码率估计等于0;qcoeff[cidx][x'][y']为第一量化系数。
[0373]
当|qcoeff[cidx][x'][y']|≥1且编码器适应hevc标准时,第三码率估计采用如下计算式计算得到:
[0374][0375]
当|qcoeff[cidx][x'][y']|≥1且编码器适应av1标准时,第三码率估计采用如下计算式计算得到:
[0376][0377]
其中,qp1为编码器适应hevc标准时的第一量化参数,由编码器适应av1标准时的第二量化参数转换得到,greaterthanonetabidx为第三语法元素的当前条件概率状态。
[0378]
abscoeffgreaterthantwoflagrate[cidx][x'][y']采用如下计算式计算得到:
[0379][0380]
其中,greaterthantwotabidx为第五语法元素的当前条件概率状态。
[0381]
由式(40)可知,当|qcoeff[cidx][x'][y']|《2时,第四码率估计等于0。
[0382]
当|qcoeff[cidx][x'][y']|≥2且编码器适应hevc标准时,第四码率估计采用如下计算式计算得到:
[0383][0384]
当|qcoeff[cidx][x'][y']|≥2且编码器适应av1标准时,第四码率估计采用如下计算式计算得到:
[0385][0386]
其中,qp1为编码器适应hevc标准时的第一量化参数,由编码器适应av1标准时的第二量化参数转换得到。
[0387]
abscoeffminustworate[cidx][x'][y']采用如下计算式计算得到:
[0388][0389]
其中,golombcodelength为采用golomb-rice码编码第六语法元素所需的码长,其由第一量化系数的绝对值大小决定,eqprobrateesttab为第十表格,用于存储在第六语法元素的条件概率均匀分布的情况下,第一量化参数与码率估计的对应关系。
[0390]
由式(43)可知,当|qcoeff[cidx][x'][y']|《3时,第五码率估计等于0。
[0391]
当|qcoeff[cidx][x'][y']|≥3且编码器适应hevc标准时,abscoeffminustworate[cidx][x'][y']采用如下计算式计算得到:
[0392]
abscoeffminustworate[cidx][x
′
][y
′
]=(golombcodelength
×
eqprobrateesttab[qp1-6*(bitdepth-8)])
ꢀꢀ
(44)
[0393]
其中,golombcodelength为采用golomb-rice码编码第六语法元素所需的码长,eqprobrateesttab为第十表格,用于存储在第六语法元素的条件概率均匀分布的情况下,索引值与码率估计的对应关系,索引值根据第一量化参数与比特位深度确定,第一量化参数为编码器适应hevc标准时的量化参数。
[0394]
当|qcoeff[cidx][x'][y']|≥3且编码器适应av1标准时,abscoeffminustworate[cidx][x'][y']采用如下计算式计算得到:
[0395]
abscoeffminustworate[cidx][x
′
][y
′
]=golombcodelength
×
(eqprobrateesttab[qp1]-(eqprobrateesttob[qp1]>>2))
ꢀꢀꢀꢀꢀ
(45)
[0396]
其中,golombcodelength为采用golomb-rice码编码第六语法元素所需的码长,eqprobrateesttab为第十表格,用于存储在第六语法元素的条件概率均匀分布的情况下,第一量化参数与码率估计的对应关系,第一量化参数由第二量化参数转换而来,第一量化参数为编码器适应hevc标准时的量化参数,第二量化参数为编码器适应av1标准时的量化参数。
[0397]
其中,第十表格如下:
[0398]
表10.eqprobrateesttab
[0399]
indexvalue01167114702185332334429415370664669
……
46481945664760721348487650410449963891325012144269651153008209
[0400]
其中,index为索引值,value为码率估计。
[0401]
步骤205,根据第二量化系数子矩阵以及第一量化系数子矩阵与第一量化系数矩阵的关系,获取第二量化系数矩阵,第二量化系数矩阵包括至少一个第二量化系数。
[0402]
在本实施例中,对至少两个第一量化系数子矩阵系数调整得到对应的至少两个第二量化系数子矩阵,根据至少两个第二量化系数子矩阵以及至少两个第一量化系数子矩阵
与第一量化系数矩阵的关系,可以生成第二量化系数矩阵。
[0403]
在本技术中,由于在对变换系数矩阵进行量化得到第一量化系数矩阵后,将第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵,并对至少两个第一量化系数子矩阵进行数据统计,获取量化统计数据,这样,利用量化统计数据可以用于消除至少两个第一量化系数子矩阵之间的依赖关系,后续可以第一量化系数子矩阵为单位并行处理量化系数。接着,针对每个第一量化系数子矩阵,对非零的第一量化系数进行系数调整,得到第二量化系数子矩阵,至少两个第一量化系数子矩阵的系数调整并行执行。然后,根据第二量化系数子矩阵以及第一量化系数子矩阵与第一量化系数矩阵的关系,获取第二量化系数矩阵。综上,本技术提供的技术方案,可以并行处理量化系数,提高硬件的处理速度,降低硬件的处理延迟。
[0404]
在本技术中,采用整数运算,而非浮点数运算,可以降低硬件实现的复杂度,减小率失真优化量化模块12的面积。
[0405]
在本技术中,率失真优化量化模块12是一种通用的率失真优化量化模块12,对于hevc标准和av1标准,只有部分参数取值不同,但是主要的硬件模块可以通用,能够同时适应h.265/hevc和av1标准,尽可能共享硬件资源。因此,本技术提供的技术方案,可以减小率失真优化量化模块12的面积。
[0406]
需要说明的是,h.265/hevc和av1是两种不同的视频压缩标准。尽管它们共享大部分顶层设计,但各个模块的具体实现不同。传统上,会针对h.265/hevc编码器设计专用的rdoq模块以适应h.265/hevc特有的量化和编码策略。而针对av1编码器设计另外的rdoq模块以适应av1的量化和编码策略。这两个不同的rdoq模块可能会增加电路面积并且不能共享它们之间的资源。
[0407]
本技术另一示例性实施例还提供一种率失真优化量化方法。本实施例提供上述步骤204的另一种实施方式。如图6所示,本实施例中,步骤204可以包括以下步骤:
[0408]
步骤601,针对每个非零的第一量化系数,如果第一量化系数在第一扫描顺序中位于第一个非零的第一量化系数之后,计算将第一量化系数归零的第三编码代价。
[0409]
在本实施例中,第三编码代价采用如下计算式计算得到:
[0410]
zerooutcost[cidx][x
′
][y
′
]=distortion[cidx][x
′
][y
′
]
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(46)
[0411]
其中,distortion[cidx][x'][y']为像素域的误差。在qcoeff[cidx][x'][y']=0的条件下可以采用上述的式(25)计算distortion[cidx][x'][y']。
[0412]
步骤602,对第一量化系数进行微调,得到对应的第二量化系数,并计算微调第一量化系数的第四编码代价。
[0413]
在本实施例中,微调第一量化系数可以是保持第一量化系数的符号不变,绝对值减去1,或,保持第一量化系数的符号不变,绝对值减去2。
[0414]
在本实施例中,第四编码代价与第一编码代价的计算方法相同,因此,可以采用上述的式(24)计算第四编码代价。
[0415]
步骤603,获取所有第三编码代价的和值,得到第五编码代价;第五编码代价为第一量化系数子矩阵归零的编码代价。
[0416]
在本实施例中,针对每个cg,采用如下计算式获取所有第三编码代价的和值,得到第五编码代价:
[0417][0418]
其中,cgcost0为第五编码代价,zerooutcost[cidx][x'][y']为第三编码代价,cidx为y、u、v分量索引,x'、y'为第一量化系数在第一量化系数子矩阵中的坐标,cgsize为第一量化系数子矩阵的大小。
[0419]
步骤604,获取所有第四编码代价的和值,得到第六编码代价;第六编码代价为第一量化系数子矩阵进行系数微调的编码代价。
[0420]
在本实施例中,针对每个cg,采用如下计算式获取所有第四编码代价的和值,得到第六编码代价:
[0421][0422]
其中,cgcost1为第六编码代价,tweakedcoeffcost[cidx][x'][y']为第四编码代价。
[0423]
步骤605,如果第五编码代价小于第六编码代价,将第一量化系数子矩阵置零,得到第二量化系数子矩阵。
[0424]
步骤606,如果第六编码代价小于第五编码代价,根据第二量化系数得到第二量化系数子矩阵。
[0425]
在本实施例中,针对每个cg,如果将第一量化系数子矩阵置零的编码代价小,则将第一量化系数子矩阵置零,如果微调第一量化系数时第一量化系数子矩阵的编码代价小,则微调第一量化系数,得到第二量化系数子矩阵。这样,可以以最小编码代价实现系数调整。
[0426]
本技术另一示例性实施例还提供一种率失真优化量化方法。本实施例提供上述步骤602的另一种实施方式。如图7所示,本实施例中,步骤602可以包括以下步骤:
[0427]
步骤701,将第一量化系数调整为第一候选量化系数,并计算调整第一量化系数的第一候选编码代价,其中,第一候选量化系数为0。
[0428]
步骤702,如果第一量化系数的绝对值大于1,将第一量化系数调整为第二候选量化系数,并计算调整第一量化系数的第二候选编码代价,其中,第二候选量化系数的符号与第一量化系数的符号相同,第二候选量化系数的绝对值等于第一量化系数的绝对值减去1。
[0429]
步骤703,将第一量化系数调整为第三候选量化系数,并计算调整第一量化系数的第三候选编码代价,其中,第三候选量化系数为第一量化系数。亦即,计算第一量化系数的第三候选编码代价,其中,不对第一量化系数做任何调整。
[0430]
步骤704,选取第一候选编码代价、第二候选编码代价与第三候选编码代价中最小的编码代作为第四编码代价。
[0431]
步骤705,第一候选编码代价、第二候选编码代价与第三候选编码代价中最小的编码代价对应的量化系数为第二量化系数。
[0432]
在本实施例中,对于非零的第一量化系数,率失真优化量化模块试图将第一量化系数置零,或将其绝对值缩小1或2来降低编码码率。因此,存在三个候选量化系数:第一候选量化系数、第二候选量化系数与第三候选量化系数。其中,第一候选量化系数为0,第二候选量化系数的符号与第一量化系数的符号相同,第二候选量化系数的绝对值等于第一量化系数的绝对值减去1,第三候选量化系数的符号与第一量化系数的符号相同,第三候选量化
系数的绝对值等于第一量化系数的绝对值减去2。
[0433]
在本实施例中,首先,将第一量化系数置零,并计算调整第一量化系数的第一候选编码代价。然后,如果第一量化系数的绝对值大于1,将第一量化系数调整为第二候选量化系数,并计算调整第一量化系数的第二候选编码代价,如果第一量化系数的绝对值大于2,将第一量化系数调整为第三候选量化系数,并计算调整第一量化系数的第三候选编码代价,然后,选取第一候选编码代价、第二候选编码代价与第三候选编码代价中最小的编码代作为第四编码代价,其中,第四编码代价为微调第一量化系数的编码代价。然后,选取第一候选编码代价、第二候选编码代价与第三候选编码代价中最小的编码代价对应的量化系数作为第二量化系数。
[0434]
其中,第四编码代价采用如下计算式计算得到:
[0435]
tweakedcoeffcost[cidx][x
′
][y
′
]=min(cost0[cidx][x
′
][y
′
],cost1[cidx][x
′
][y
′
],cost2[cidx][x
′
][y
′
]))
ꢀꢀꢀꢀꢀꢀꢀ
(49)
[0436]
其中,tweakedcoeffcost[cidx][x'][y']为第四编码代价。
[0437]
其中,第二量化系数采用如下计算式计算得到:
[0438][0439]
其中,newqcoeff[cidx][x'][y']为第二量化系数,sign[cidx][x'][y']为第一量化系数的符号,cost0[cidx][x'][y']为第一候选编码代价,cost1[cidx][x'][y']为第二候选编码代价,cost2[cidx][x'][y']为第三候选编码代价。
[0440]
其中,sign[cidx][x'][y']
×
(|qcoeff[cidx][x'][y']|-1)为第二候选量化系数,sign[cidx][x'][y']
×
(|qcoeff[cidx][x'][y']|-2)为第三候选量化系数。
[0441]
本技术另一示例性实施例还提供一种率失真优化量化方法。如图8所示,该率失真优化量化方法,可以包括以下步骤:
[0442]
步骤801,初始化rdoq参数。此处的rdoq参数为rdoq全局参数。
[0443]
当编码器能够适应hevc标准时,rdoq全局参数包括:qp1、bitdepth、transformshift、quantizationshift、quantizationscaler以及qcoeff[cidx][x][y]。
[0444]
当编码器能够适应av1标准时,rdoq全局参数还除了包括上述的全局参数,还包括qp2、dcqp与acqp。
[0445]
步骤802,为各个语法元素初始化上下文模型。
[0446]
在本实施例中,为第一语法元素、第二语法元素、第三语法元素、第四语法元素初始化对应的第一上下文模型、第二上下文模型、第三上下文模型与第四上下文模型。
[0447]
步骤803,量化变换系数。
[0448]
在本实施例中,对变换系数矩阵中的每个变换系数进行量化。本步骤与上述的步骤201相似,在此不再赘述。
[0449]
步骤804,更新量化当前tu的各个统计指标。
[0450]
在本步骤中,将tu划分为至少两个不重叠的cg,并对至少两个cg进行数据统计,并更新当前tu的各个统计指标。本步骤与上述的步骤202~203相似,在此不再赘述。
[0451]
此处的各个统计指标包括上述的第一量化系数子矩阵中绝对值为1的第一量化系
数的数量、第一量化系数子矩阵中绝对值大于1的第一量化系数的数量、第一量化系数子矩阵中绝对值大于2的第一量化系数的数量、第一量化系数矩阵中按照第一扫描顺序排列的第一个非零的第一量化系数的位置、第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为4的第一量化系数的位置、第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为7的第一量化系数的位置、第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为13的第一量化系数的位置以及第一量化系数子矩阵中按照第二扫描顺序排列的第一个绝对值为25的第一量化系数的位置。
[0452]
步骤805,获取当前tu的一个cg。
[0453]
在本实施例中,可以对tu的各个cg进行标识,以区分各个cg。率失真优化量化模块12可以包括多个调整模块124,多个调整模块124可以并行地获取tu的一个cg,以并行地处理cg。
[0454]
步骤806,微调cg的每一个非零的系数。
[0455]
在本实施例中,每个调整模块124微调对应的cg的每一个非零的第一量化系数。本步骤与上述的步骤204相似,在此不再赘述。
[0456]
步骤807,如有必要,对cg强制置零。
[0457]
在本实施例中,调整模块124会判断当前cg是否符合强制置零的条件,如果符合,则对cg强制置零。
[0458]
步骤808,判断当前的cg是否为当前tu的最后一个cg。
[0459]
在本实施例中,调整模块124会判断当前的cg是否为当前tu的最后一个cg,如果不是,则执行步骤805,获取下一个cg,如果是,则执行步骤809,结束流程。
[0460]
步骤809,结束。
[0461]
在本技术中,由于在对tu进行量化得到第一量化系数矩阵后,将第一量化系数矩阵划分为至少两个不重叠的cg,并对至少两个cg进行数据统计,获取量化统计数据,这样,利用量化统计数据可以用于消除至少两个cg之间的依赖关系,后续可以cg为单位并行处理量化系数。接着,针对每个cg,对非零的第一量化系数进行系数调整,得到第二量化系数子矩阵,至少两个cg的系数调整并行执行。然后,根据第二量化系数子矩阵以及cg与第一量化系数矩阵的关系,获取第二量化系数矩阵。综上,本技术提供的技术方案,可以并行处理量化系数,提高硬件的处理速度,降低硬件的处理延迟。
[0462]
本技术另一示例性实施例还提供一种率失真优化量化方法。在本实施例中,提供了cg层的处理流程。同时,也是上述步骤204的一种具体实施方式。如图9所示,该率失真优化量化方法,可以包括以下步骤:
[0463]
步骤901,输入cg。
[0464]
在本步骤中,向调整模块124输入tu的一个cg。
[0465]
步骤902,判断当前的第一量化系数是否为当前cg的最后一个第一量化系数。
[0466]
在本步骤中,判断当前的第一量化系数是否为按照第二扫描顺序扫描当前cg的最后一个第一量化系数。如果是,则执行步骤903,如果不是,则执行步骤907。
[0467]
步骤903,判断在第一扫描顺序中当前的第一量化系数是否在第一个非零的第一量化系数之前。
[0468]
在本步骤中,判断在第一扫描顺序中当前的第一量化系数是否在第一个非零的第
一量化系数之前,如果是,则执行步骤902,如果不是,则执行步骤904。即,在第一扫描顺序中当前的第一量化系数位于在第一个非零的第一量化系数之后时,执行步骤904。
[0469]
步骤904,计算将当前的第一量化系数强制置零的编码代价。
[0470]
在本步骤中,针对每个第一量化系数子矩阵,计算将当前的第一量化系数强制置零的编码代价,得到第三编码代价,并获取所有第三编码代价的和值,得到第五编码代价;第五编码代价为第一量化系数子矩阵归零的编码代价。
[0471]
步骤905,微调非零的第一量化系数并计算编码代价。
[0472]
在本步骤中,针对每个第一量化系数子矩阵,微调非零的第一量化系数并计算编码代价,得到第二量化系数与第四编码代价,并获取所有第四编码代价的和值,得到第六编码代价;第六编码代价为第一量化系数子矩阵进行系数微调的编码代价。
[0473]
步骤906,更新golomb-rice码的参数。
[0474]
在本步骤中,golomb-rice码的参数默认为0。如果当前的第一量化系数是第一量化系数子矩阵中第一个绝对值为4的系数,golomb-rice码的参数更新为1;如果当前的第一量化系数是第一量化系数子矩阵中第一个绝对值为7的系数,golomb-rice码的参数更新为2;如果当前的第一量化系数是第一量化系数子矩阵中第一个绝对值为13的系数,golomb-rice码的参数更新为3;如果当前的第一量化系数是第一量化系数子矩阵中第一个绝对值为25的系数,golomb-rice码的参数更新为4。
[0475]
步骤907,计算语法元素significance_cg_flag的上下文模型。
[0476]
在本步骤中,根据当前的4x4系数块(第一量化系数子矩阵)顶部的两个相邻的4x4系数块和左边的两个相邻的4x4系数块(第一量化系数子矩阵)的第一语法元素的值计算significance_cg_flag的上下文模型。
[0477]
步骤908,决定是否将当前cg强制置零。
[0478]
在本步骤中,根据第五编码代价和第六编码代价,判断是否将当前cg强制置零。如果第五编码代价小于第六编码代价,将cg强制置零,如果不是,微调非零的第一量化系数,得到第二量化系数。
[0479]
步骤909,输出cg'。
[0480]
在本步骤中,cg'为对cg调整后得到的第二量化系数子矩阵。
[0481]
本技术另一示例性实施例还提供一种率失真优化量化方法。本实施例提供上述步骤602的另一种实施方式。如图10所示,本实施例中,步骤602可以包括以下步骤:
[0482]
步骤1001,输入qcoeff[cidx][x'][y']。
[0483]
在本步骤中,输入cg中的一个qcoeff[cidx][x'][y']。
[0484]
步骤1002,判断|qcoeff[cidx][x'][y']|是否小于3。如果是,则执行步骤1003,如果不是,则执行步骤1004。
[0485]
步骤1003,如果cand0qceff[cidx][x'][y']=0,计算编码代价cost0。
[0486]
其中,cand0qceff[cidx][x'][y']为第一候选量化系数,编码代价cost0为上述的第一候选编码代价。
[0487]
步骤1004,判断|qcoeff[cidx][x'][y']|是否大于1。如果是,则执行步骤1005,如果不是,则执行步骤1006。
[0488]
步骤1005,如果cand1qceff[cidx][x'][y']=|qcoeff[cidx][x'][y']|-1,计算
编码代价cost1。
[0489]
其中,cand1qceff[cidx][x'][y']为第二候选量化系数。编码代价cost1为上述的第二候选编码代价。
[0490]
步骤1006,判断|qcoeff[cidx][x'][y']|是否大于0。如果是,则执行步骤1007,如果不是,则执行步骤1008。
[0491]
步骤1007,如果cand2qceff[cidx][x'][y']=qcoeff[cidx][x'][y'],计算编码代价cost2。
[0492]
其中,cand2qceff[cidx][x'][y']为第三候选量化系数,编码代价cost2为第三候选编码代价。
[0493]
步骤1008,从cand0qceff[cidx][x'][y']、cand1qceff[cidx][x'][y']与cand2qceff[cidx][x'][y']中选取编码代价最小的作为第二量化系数。
[0494]
在本步骤中,采用上述的式(50)从cand0qceff[cidx][x'][y']、cand1qceff[cidx][x'][y']与cand2qceff[cidx][x'][y']中选取编码代价最小的作为第二量化系数。
[0495]
步骤1009,输出第二量化系数。
[0496]
图11是根据一示例性实施例示出的率失真优化量化装置的框图。该率失真优化量化装置,应用于编码器,该编码器适应hevc标准与av1标准中任意一个时,在率失真优化量化过程中,对于码率估计和失真估计,均采用通用的变化量化算法。如图11所示,本实施例中,该率失真优化量化装置,包括:
[0497]
量化模块121,被配置为对变换系数矩阵进行量化,得到第一量化系数矩阵;其中,变换系数矩阵包括至少一个变换系数,第一量化系数矩阵包括至少一个第一量化系数;
[0498]
分解模块122,被配置为将第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵;
[0499]
统计模块123,被配置为对至少两个第一量化系数子矩阵进行数据统计,获取量化统计数据;量化统计数据用于消除至少两个第一量化系数子矩阵之间的依赖关系;
[0500]
调整模块124,被配置为针对每个第一量化系数子矩阵,对非零的第一量化系数进行系数调整,得到第二量化系数子矩阵;第二量化系数子矩阵包括至少一个第二量化系数;至少两个第一量化系数子矩阵的系数调整并行执行;
[0501]
获取模块125,被配置为根据第二量化系数子矩阵以及第一量化系数子矩阵与第一量化系数矩阵的关系,获取第二量化系数矩阵,第二量化系数矩阵包括至少一个第二量化系数。
[0502]
本技术的实施例还提出了一种电子设备,包括处理器和存储器;存储器用于存储处理器可执行的计算机程序;处理器用于执行存储器中的计算机程序,以实现上述任一实施例的率失真优化量化方法。
[0503]
本技术的实施例还提出了一种计算机可读存储介质,当存储介质中的可执行的计算机程序由处理器执行时,能够实现上述任一实施例的率失真优化量化方法。
[0504]
关于上述实施例中的装置,其中处理器执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
[0505]
图12是根据一示例性实施例示出的一种电子设备的框图。例如,电子设备1200可以被提供为一服务器。参照图12,设备1200包括处理组件1222,其进一步包括一个或多个处
理器,以及由存储器1232所代表的存储器资源,用于存储可由处理部件1222的执行的指令,例如应用程序。存储器1232中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1222被配置为执行指令,以执行上述用于率失真优化量化方法。
[0506]
设备1200还可以包括一个电源组件1226被配置为执行设备1200的电源管理,一个有线或无线网络接口1250被配置为将设备1200连接到网络,和一个输入输出(i/o)接口1258。设备1200可以操作基于存储在存储器1232的操作系统,例如windows servertm,macos xtm,unixtm,linuxtm,freebsdtm或类似。
[0507]
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器1232,上述指令可由设备1200的处理组件1222执行以完成上述方法。例如,非临时性计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。
[0508]
在本发明中,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。术语“多个”指两个或两个以上,除非另有明确的限定。
[0509]
上述对实施例的描述是为了便于本技术领域的普通技术人员能理解和应用本技术。熟悉本领域技术的人员显然可以容易地对这些实施例做出各种修改,并把在此说明的一般原理应用到其它实施例中而不必付出创造性的劳动。因此,本技术不限于这里的实施例,本领域技术人员根据本技术披露的内容,在不脱离本技术范围和精神的情况下做出的改进和修改都本技术的范围之内。
技术特征:
1.一种率失真优化量化方法,其特征在于,应用于编码器,所述编码器适应hevc标准与av1标准中任意一个时,在率失真优化量化过程中,对于码率估计和失真估计,均采用通用的变化量化算法;所述方法,包括:对变换系数矩阵进行量化,得到第一量化系数矩阵;其中,所述变换系数矩阵包括至少一个变换系数,所述第一量化系数矩阵包括至少一个第一量化系数;将所述第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵;对至少两个所述第一量化系数子矩阵进行数据统计,获取量化统计数据;所述量化统计数据用于消除至少两个所述第一量化系数子矩阵之间的依赖关系;针对每个所述第一量化系数子矩阵,对非零的所述第一量化系数进行系数调整,得到第二量化系数子矩阵;所述第二量化系数子矩阵包括至少一个第二量化系数;至少两个所述第一量化系数子矩阵的系数调整并行执行;根据所述第二量化系数子矩阵以及所述第一量化系数子矩阵与所述第一量化系数矩阵的关系,获取第二量化系数矩阵,所述第二量化系数矩阵包括至少一个所述第二量化系数。2.如权利要求1所述的率失真优化量化方法,其特征在于,所述第一量化系数采用如下计算式计算得到:qcoeff[cidx][x][y]=sign[cidx][x][y]
×
((|tcoeff[cidx][x][y]|
×
quantizationscaler[cidx][x][y]+(1<<(quantizationshift[cidx][x][y]-1)))>>quantizationshift[cidx][x][y]);其中,qcoeff[cidx][x][y]为所述第一量化系数,sign[cidx][x][y]为所述变换系数的符号,tcoeff[cidx][x][y]为所述变换系数,quantizationscaler[cidx][x][y]为量化缩放参数,quantizationshift[cidx][x][y]为量化偏移参数,cidx为y、u、v分量索引,x、y为所述变换系数在所述变换系数矩阵中的坐标。3.如权利要求2所述的率失真优化量化方法,其特征在于,当所述编码器适应hevc标准时,所述量化偏移参数采用如下计算式计算得到:其中,qp1为所述编码器适应所述hevc标准时的第一量化参数,transformshift为描述所述变换系数矩阵的内部变换移位的参数;和/或,当所述编码器适应av1标准时,所述量化偏移参数采用如下计算式计算得到:numbitsdcqp为表示低频变换系数的量化索引dcqp所需的比特位数,tusize为所述变换系数矩阵的大小,bitdepth为视频的比特位深度,numbitsacqp为表示高频变换系数的量化索引acqp所需的比特位数。4.如权利要求3所述的率失真优化量化方法,其特征在于,当所述编码器适应hevc标准时,所述transformshift采用如下计算式计算得到:transformshift=15-bitdepth-log2(tusize);其中,bitdepth为视频的比特位深度,tusize为所述变换系数矩阵的大小。5.如权利要求3所述的率失真优化量化方法,其特征在于,当所述编码器适应av1标准
时,所述dcqp采用如下计算式计算得到:其中,av1dcqlookup为第一表格,用于存储视频的比特位深度为8时所述第一量化参数与所述低频变换系数的量化索引的对应关系,所述av1dcqloopup10为第二表格,用于存储视频的比特位深度为10时所述第一量化参数与所述低频变换系数的量化索引的对应关系;所述acqp采用如下计算式计算得到:其中,av1acqlookup为第三表格,用于存储视频的比特位深度为8时所述第一量化参数与所述高频变换系数的量化索引的对应关系,所述av1acqloopup10为第四表格,用于存储视频的比特位深度为10时所述第一量化参数与所述高频变换系数的量化索引的对应关系。6.如权利要求3至5任一项所述的率失真优化量化方法,其特征在于,当所述编码器适应所述av1标准时,在计算所述量化偏移参数之前,包括:将所述编码器适应所述av1标准时的第二量化参数转换为所述第一量化参数。7.如权利要求6所述的率失真优化量化方法,其特征在于,当所述编码器适应av1标准时,所述第一量化参数采用如下计算式计算得到:其中,qp2为所述第二量化参数,av1tohevcqp为第五表格,用于存储视频的比特位深度为8时所述第二量化参数与所述第一量化参数的对应关系,av1tohevcqp10为第六表格,用于存储视频的比特位深度为10时所述第二量化参数与所述第一量化参数的对应关系。8.如权利要求2所述的率失真优化量化方法,其特征在于,当所述编码器适应hevc标准时,所述quantizationscaler[cidx][x][y]采用如下计算式计算得到:quantizationscaler[cidx][x][y]=hevcscalinglist[qp1%6];其中,hevcscalinglist为第七表格,用于存储所述编码器适应所述hevc标准时qp1%6与所述量化缩放参数的对应关系;和/或,当所述编码器适应av1标准时,所述quantizationscaler[cidx][x][y]采用如下计算式计算得到:numbitsdcqp为表示低频变换系数的量化索引dcqp所需的比特位数,numbitsacqp为表示高频变换系数的量化索引acqp所需的比特位数。9.如权利要求1所述的率失真优化量化方法,其特征在于,对至少两个所述第一量化系数子矩阵进行数据统计,获取量化统计数据,包括:对所述第一量化系数矩阵的所述第一量化系数子矩阵,按照指定的第一扫描顺序对至少两个所述第一量化系数子矩阵分别进行扫描;针对每个所述第一量化系数子矩阵,按照指定的第二扫描顺序对所述第一量化系数进行扫描,获取所述量化统计数据;所述第一扫描顺序与所述第二扫描顺序相同。
10.如权利要求9所述的率失真优化量化方法,其特征在于,所述量化统计数据包括:所述第一量化系数子矩阵中绝对值为1的第一量化系数的数量、所述第一量化系数子矩阵中绝对值大于1的第一量化系数的数量、所述第一量化系数子矩阵中绝对值大于2的第一量化系数的数量、所述第一量化系数矩阵中按照所述第一扫描顺序排列的第一个非零的第一量化系数的位置、所述第一量化系数子矩阵中按照所述第二扫描顺序排列的第一个绝对值为4的第一量化系数的位置、所述第一量化系数子矩阵中按照所述第二扫描顺序排列的第一个绝对值为7的第一量化系数的位置、所述第一量化系数子矩阵中按照所述第二扫描顺序排列的第一个绝对值为13的第一量化系数的位置以及所述第一量化系数子矩阵中按照所述第二扫描顺序排列的第一个绝对值为25的第一量化系数的位置。11.如权利要求1所述的率失真优化量化方法,其特征在于,所述针对每个所述第一量化系数子矩阵,对非零的所述第一量化系数进行系数调整,得到第二量化系数子矩阵,包括:针对每个非零的所述第一量化系数,计算按照至少两个系数调整方案进行系数调整的第一编码代价;针对每个系数调整方案,根据所有所述第一编码代价的和值,获得第二编码代价;所述第二编码代价为所述第一量化系数子矩阵进行系数调整的编码代价;从至少两个系数调整方案中确定目标系数调整方案,其中,所述目标系数调整方案的第二编码代价为至少两个系数调整方案的第二编码代价中最小的编码代价;根据目标系数调整方案对所述第一量化系数子矩阵中的非零的所述第一量化系数进行系数调整,得到所述第二量化系数子矩阵。12.如权利要求11所述的率失真优化量化方法,其特征在于,所述第一编码代价采用如下计算式计算得到:cost1[cidx][x
′
][y
′
]=distortion[cidx][x
′
][y
′
]+rate[cidx][x
′
][y
′
];其中,cost1[cidx][x'][y']为所述第一编码代价,distortion[cidx][x'][y']为像素域的误差,rate[cidx][x'][y']为编码码率,cidx为y、u、v分量索引,x'、y'为所述第一量化系数在所述第一量化系数子矩阵中的坐标。13.如权利要求12所述的率失真优化量化方法,其特征在于,所述像素域的误差采用如下计算式计算得到:distortion[cidx][x
′
][y
′
]=(merr[cidx][x
′
][y
′
]>>(2
×
transformshift+1))
×
merr[cidx][x
′
][y
′
];其中,merr[cidx][x'][y']为量化误差的反向还原值,transformshift为描述所述变换系数矩阵的内部变换移位的参数。14.如权利要求13所述的率失真优化量化方法,其特征在于,当所述编码器适应hevc标准且视频的比特位深度为8时,所述量化误差的反向还原值采用如下计算式计算得到:merr[cidx][x
′
][y
′
]=(err[cidx][x
′
][y
′
]>>12)
×
hevcscaler[qp1%6];其中,err[cidx][x'][y']为量化误差,hevcscaler为第八表格,用于存储qp1%6与放大系数的对应关系,qp1为所述编码器适应所述hevc标准时的第一量化参数;和/或,当所述编码器适应av1标准且视频的比特位深度为8时,所述量化误差的反向还原值采用如下计算式计算得到:
其中,err[cidx][x'][y']为量化误差,numbitsdcqp为表示低频变换系数的量化索引dcqp所需的比特位数,numbitsacqp为表示高频变换系数的量化索引acqp所需的比特位数。15.如权利要求13所述的率失真优化量化方法,其特征在于,视频的比特位深度为10时的量化误差的反向还原值采用如下方法得到:获取视频的比特位深度为8时的量化误差的反向还原值;将视频的比特位深度为8时的量化误差的反向还原值右移两位,得到视频的比特位深度为10时的量化误差的反向还原值。16.如权利要求13至14任一项所述的率失真优化量化方法,其特征在于,所述量化误差采用如下计算式计算得到:err[cidx][x
′
][y
′
]=||tcoeff[cidx][x
′
][y
′
]|
×
quantizationscaler[cidx][x
′
][y
′
]-(|qcoeff[cidx][x
′
][y
′
]|<<quantizationshift[cidx][x
′
][y
′
])|;其中,tcoeff[cidx][x'][y']为所述变换系数,quantizationscaler[cidx][x'][y']为量化缩放参数,qcoeff[cidx][x'][y']为所述第一量化系数,quantizationshift[cidx][x'][y']为量化偏移参数。17.如权利要求12所述的率失真优化量化方法,其特征在于,所述编码码率采用如下计算式计算得到:rate[cidx][x
′
][y
′
]=sigcoeffflagrate[cidx][y
′
][y
′
]+coeffabslevelrate[cidx][x
′
][y
′
];其中,sigcoeffflagrate[cidx][x'][y']为第二语法元素的第一码率估计,所述第二语法元素为sigcoeffflag,用于指出当前的所述第一量化系数是否为零,coeffabslevelrate[cidx][x'][y']为对非零的第一量化系数的绝对值进行编码的语法元素的第二码率估计。18.如权利要求17所述的率失真优化量化方法,其特征在于,当所述编码器适应hevc时,所述第一码率估计采用如下计算式计算得到:其中,rateesttab为第九表格,所述第九表格用于存储qp1%3、语法元素的条件概率状态与码率估计的对应关系,qp1为所述编码器适应所述hevc标准时的第一量化参数,sigcoeffflagtabidx为第二语法元素的当前条件概率状态,bitdepth为视频的比特位深度;和/或,当所述编码器适应av1标准时,sigcoeffflagrate[cidx][x'][y']采用如下计算式计算得到:其中,rateesttab为第九表格,所述第九表格用于存储qp1%3、语法元素的条件概率状态与码率估计的对应关系,qp1为所述编码器适应所述hevc标准时的第一量化参数,由所述编码器适应所述av1标准时的第二量化参数转换得到,sigcoeffflagtabidx为第二语法元
素的当前条件概率状态。19.如权利要求18所述的率失真优化量化方法,其特征在于,sigcoeffflagtabidx采用如下计算式计算得到:其中,sigcoeffctx为第二上下文模型,用于存储所述第二语法元素的条件概率状态,sigcoeffctxidx由当前的所述第一量化系数子矩阵顶部的两个相邻的所述第一量化系数子矩阵和左边的两个相邻的所述第一量化系数子矩阵的第一语法元素的值综合决定。20.如权利要求17所述的率失真优化量化方法,其特征在于,所述第二码率估计采用如下计算式计算得到:codffabslevelrate[cidx][x
′
][y
′
]=abscoeffgreaterthantoneflagrate[cidx][x
′
][y
′
]+abscoeffgreaterthantwoflagrate[cidx][x
′
][y
′
]+abscoeffminustworate[cidx][x
′
][y
′
];其中,abscoeffgreaterthanoneflagrate[cidx][x'][y']为第三语法元素的第三码率估计,所述第三语法元素为abscoeffgreaterthanoneflag,用于指出当前的第一量化系数的绝对值是否大于1,abscoeffgreaterthantwoflagrate[cidx][x'][y']为第五语法元素的第四码率估计,所述第五语法元素为abscoeffgreaterthantwo,用于指出当前的第一量化系数的绝对值是否大于2,abscoeffminustworate[cidx][x'][y']为第六语法元素的第五码率估计,所述第六语法元素为absceoffminustwo,用于表示当前的第一量化系数的绝对值减2。21.如权利要求20所述的率失真优化量化方法,其特征在于,当|qcoeff[cidx][x'][y']|<1时,所述第三码率估计等于0;qcoeff[cidx][x'][y']为所述第一量化系数;当|qcoeff[cidx][x'][y']|≥1且所述编码器适应hevc标准时,所述第三码率估计采用如下计算式计算得到:其中,rateesttab为第九表格,所述第九表格用于存储qp1%3、语法元素的条件概率状态与码率估计的对应关系,qp1为所述编码器适应所述hevc标准时的第一量化参数,greaterthanonetabidx为所述第三语法元素的当前条件概率状态,bitdepth为视频的比特位深度;和/或,当|qcoeff[cidx][x'][y']|≥1且所述编码器适应av1标准时,所述第三码率估计采用如下计算式计算得到:其中,rateesttab为第九表格,所述第九表格用于存储qp1%3、语法元素的条件概率状态与码率估计的对应关系,qp1为所述编码器适应所述hevc标准时的第一量化参数,由所述编码器适应所述av1标准时的第二量化参数转换得到,greaterthanonetabidx为所述第三语法元素的当前条件概率状态。22.如权利要求20所述的率失真优化量化方法,其特征在于,当|qcoeff[cidx][x']
[y']|<2时,所述第四码率估计等于0;qcoeff[cidx][x'][y']为所述第一量化系数;当|qcoeff[cidx][x'][y']|≥2且所述编码器适应hevc标准时,所述第四码率估计采用如下计算式计算得到:其中,rateesttab为第九表格,所述第九表格用于存储qp1%3、语法元素的条件概率状态与码率估计的对应关系,qp1为所述编码器适应所述hevc标准时的第一量化参数,greaterthantwotabidx为所述第五语法元素的当前条件概率状态,bitdepth为视频的比特位深度;和/或,当|qcoeff[cidx][x'][y']|≥2且所述编码器适应av1标准时,所述第四码率估计采用如下计算式计算得到:其中,rateesttab为第九表格,所述第九表格用于存储qp1%3、语法元素的条件概率状态与码率估计的对应关系,qp1为所述编码器适应所述hevc标准时的第一量化参数,由所述编码器适应所述av1标准时的第二量化参数转换得到,greaterthantwotabidx为所述第五语法元素的当前条件概率状态。23.如权利要求20所述的率失真优化量化方法,其特征在于,当|qcoeff[cidx][x'][y']|<3时,所述第五码率估计等于0;qcoeff[cidx][x'][y']为所述第一量化系数;当|qcoeff[cidx][x'][y']|≥3且所述编码器适应hevc标准时,所述第五码率估计采用如下计算式计算得到:abscoeffminustworate[cidx][x
′
][y
′
]=(golombcodelength
×
eqprobrateesttab[qp1-6*(bitdepth-8)]);其中,golombcodelength为采用golomb-rice码编码第六语法元素所需的码长,eqprobrateesttab为第十表格,用于存储在第六语法元素的条件概率均匀分布的情况下,索引值与码率估计的对应关系,所述索引值根据第一量化参数与比特位深度确定,所述第一量化参数为所述编码器适应所述hevc标准时的量化参数;和/或,当|qcoeff[cidx][x'][y']|≥3且所述编码器适应av1标准时,所述第五码率估计采用如下计算式计算得到:abscoeffminustworate[cidx][x
′
][y
′
]=golombcodelength
×
(eqprobrateesttab[qp1]-(eqprobrateestab[qp1]>>2));其中,golombcodelength为采用golomb-rice码编码第六语法元素所需的码长,eqprobrateesttab为第十表格,用于存储在第六语法元素的条件概率均匀分布的情况下,第一量化参数与码率估计的对应关系,所述第一量化参数由第二量化参数转换而来,所述第一量化参数为所述编码器适应所述hevc标准时的量化参数,所述第二量化参数为所述编码器适应所述av1标准时的量化参数。24.如权利要求10所述的率失真优化量化方法,其特征在于,所述针对每个所述第一量化系数子矩阵,对非零的所述第一量化系数进行系数调整,得到第二量化系数子矩阵,包括:
针对每个非零的所述第一量化系数,如果所述第一量化系数在所述第一扫描顺序中位于所述第一个非零的第一量化系数之后,计算将所述第一量化系数归零的第三编码代价;对所述第一量化系数进行微调,得到对应的所述第二量化系数,并计算微调所述第一量化系数的第四编码代价;获取所有所述第三编码代价的和值,得到第五编码代价;所述第五编码代价为所述第一量化系数子矩阵归零的编码代价;获取所有所述第四编码代价的和值,得到第六编码代价;所述第六编码代价为所述第一量化系数子矩阵进行系数微调的编码代价;如果所述第五编码代价小于所述第六编码代价,将所述第一量化系数子矩阵置零,得到所述第二量化系数子矩阵;如果所述第六编码代价小于所述第五编码代价,根据所述第二量化系数得到所述第二量化系数子矩阵。25.一种率失真优化量化装置,其特征在于,应用于编码器,所述编码器适应hevc标准与av1标准中任意一个时,在率失真优化量化过程中,对于码率估计和失真估计,均采用通用的变换量化算法;所述装置,包括:量化模块,被配置为对变换系数矩阵进行量化,得到第一量化系数矩阵;其中,所述变换系数矩阵包括至少一个变换系数,所述第一量化系数矩阵包括至少一个第一量化系数;分解模块,被配置为将所述第一量化系数矩阵划分为至少两个不重叠的第一量化系数子矩阵;统计模块,被配置为对至少两个所述第一量化系数子矩阵进行数据统计,获取量化统计数据;所述量化统计数据用于消除至少两个所述第一量化系数子矩阵之间的依赖关系;调整模块,被配置为针对每个所述第一量化系数子矩阵,对非零的所述第一量化系数进行系数调整,得到第二量化系数子矩阵;所述第二量化系数子矩阵包括至少一个第二量化系数;至少两个所述第一量化系数子矩阵的系数调整并行执行;获取模块,被配置为根据所述第二量化系数子矩阵以及所述第一量化系数子矩阵与所述第一量化系数矩阵的关系,获取第二量化系数矩阵,所述第二量化系数矩阵包括至少一个所述第二量化系数。26.一种电子设备,其特征在于,包括存储器与处理器,所述存储器用于存储所述处理器可执行的计算机程序;所述处理器用于执行所述存储器中的计算机程序,以实现如权利要求1~24任一项所述的方法。27.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,当所述存储介质中的可执行的计算机程序由处理器执行时,能够实现如权利要求1~24任一项所述的方法。
技术总结
本申请涉及一种率失真优化量化方法、装置、电子设备及存储介质。该率失真优化量化方法,应用于编码器,能适应HEVC标准与AV1标准中任意一个;该方法包括:对变换系数矩阵进行量化,得到第一量化系数矩阵;第一量化系数矩阵包括第一量化系数;将第一量化系数矩阵划分为不重叠的第一量化系数子矩阵;对第一量化系数子矩阵进行数据统计,获取量化统计数据;针对每个第一量化系数子矩阵,对非零的第一量化系数进行系数调整,得到第二量化系数子矩阵;第二量化系数子矩阵包括第二量化系数;根据第二量化系数子矩阵以及第一量化系数子矩阵与第一量化系数矩阵的关系,获取第二量化系数矩阵。本申请的技术方案,可以并行处理量化系数,降低硬件的处理延迟。降低硬件的处理延迟。降低硬件的处理延迟。
技术研发人员:徐士麟 张世佳 埃内斯托
受保护的技术使用者:镕铭微电子(济南)有限公司
技术研发日:2023.08.03
技术公布日:2023/10/15
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/