HEVC标准中的HEVC量化(Uniform case)步骤需要在计算电平系数时右移QP/6。
对于 QP 不能被 6 整除的情况,我不确定如何执行这种右移。任何帮助将不胜感激。
参考:高效视频编码 (HEVC) 标准中的核心变换设计:Madhukar Budagavi,IEEE 高级成员,Arild Fuldseth,Gisle Bjøntegaard,Vivienne Sze,IEEE 成员和 Mangesh Sadafale
HEVC标准中的HEVC量化(Uniform case)步骤需要在计算电平系数时右移QP/6。
对于 QP 不能被 6 整除的情况,我不确定如何执行这种右移。任何帮助将不胜感激。
参考:高效视频编码 (HEVC) 标准中的核心变换设计:Madhukar Budagavi,IEEE 高级成员,Arild Fuldseth,Gisle Bjøntegaard,Vivienne Sze,IEEE 成员和 Mangesh Sadafale
在 HEVC 参考软件 (HM 16.5) 中,量化步q
长计算如下:
Double q[MAX_QP + 1];
for (int v = 0; v <= MAX_QP; v++)
{
q[v] = (Double)(g_invQuantScales[v % 6] * (1 << (v / 6))) / 64;
}
其中g_invQuantScales
定义如下:
const Int g_invQuantScales[SCALING_LIST_REM_NUM] =
{
40,45,51,57,64,72
};
也就是说,asv
是整数,v/6
是整数除法。例如,这里解释了 c 中整数除法的行为:C 中整数除法的行为是什么?
基本上,v
这里总是非负的,整数除法的结果将与精确商上的地板运算相同。
从这个意义上说,您引用的论文中的等式(8)有点误导,因为写作是“代码风格”。
如果您需要自己用另一种语言实现它,则应确保使用地板操作。例如“<< floor(QP/6)”