Add too many times deltaQPBits in RDO Process

Issue #457 new
Zhihui Liu created an issue

in CheckIntra() Function, we will run

m_entropyCoder.codeCoeff(cu, 0, bCodeDQP, tuDepthRange)

in codeCoeff(), we will call encodeTransform() if not I400, then in encodeTransform(), we will run

    if (cu.m_slice->m_pps->bUseDQP && bCodeDQP)
    {
        uint32_t log2CUSize = cu.m_log2CUSize[absPartIdx];
        uint32_t absPartIdxLT = absPartIdx & (0xFF << (log2CUSize - LOG2_UNIT_SIZE) * 2);
        codeDeltaQP(cu, absPartIdxLT);
        bCodeDQP = false;
    }

Now, here we add deltaQPBits once, then return to checkIntra(), we will run checkDQP() at last, then we will run:

if (cu.getQtRootCbf(0))
        {
            if (m_param->rdLevel >= 3)
            {
                mode.contexts.resetBits();
                mode.contexts.codeDeltaQP(cu, 0);
                uint32_t bits = mode.contexts.getNumberOfWrittenBits();
                mode.totalBits += bits;
                updateModeCost(mode);
            }
...

here, if cbf=1, we will add deltaQPBits twice, it's not very good, why we add deltaQPBits more than once for the same cu and mode.

Comments (2)

  1. Log in to comment