总所周知,QP是整数。然而HM/JEM均支持浮点QP(floating point QP),而且HM中从HM-1.0就开始支持了,这是为什么呢?先来看配置文件的参数说明:
从上图可以看出,配置文件中的QP被程序读进来的时候是一个浮点数Double TAppEncCfg::m_fQP。读进来之后在函数TAppEncCfg::parseCfg中对这个浮点QP进行如下处理:
// allocate slice-based dQP values
m_aidQP = new Int[ m_framesToBeEncoded + m_iGOPSize + 1 ];
::memset( m_aidQP, 0, sizeof(Int)*( m_framesToBeEncoded + m_iGOPSize + 1 ) );
// handling of floating-point QP values
// if QP is