# HG changeset patch # User Min Chen <chenm...@163.com> # Date 1395687461 25200 # Node ID 842aab45735b6b309f6945d4a9f04588ee0e8324 # Parent fdd7c6168cf42a11240ff1c7fc7b401605524db2 improvement TEncBinCABAC::encodeBin by temporary variant and reduce AND operator
diff -r fdd7c6168cf4 -r 842aab45735b source/Lib/TLibEncoder/TEncBinCoderCABAC.cpp --- a/source/Lib/TLibEncoder/TEncBinCoderCABAC.cpp Fri Mar 21 14:44:35 2014 -0500 +++ b/source/Lib/TLibEncoder/TEncBinCoderCABAC.cpp Mon Mar 24 11:57:41 2014 -0700 @@ -190,25 +190,30 @@ } ctxModel.bBinsCoded = 1; - uint32_t mps = sbacGetMps(mstate); + uint32_t range = m_range; uint32_t state = sbacGetState(mstate); - uint32_t lps = g_lpsTable[state][(m_range >> 6) & 3]; - m_range -= lps; + uint32_t lps = g_lpsTable[state][((uint8_t)range >> 6)]; + range -= lps; - assert(lps != 0); + assert(lps >= 2); - int numBits = (uint32_t)(m_range - 256) >> 31; + int numBits = (uint32_t)(range - 256) >> 31; uint32_t low = m_low; - uint32_t range = m_range; - if (binValue != mps) + + // NOTE: MPS must be LOWEST bit in mstate + assert(((binValue ^ mstate) & 1) == (binValue != sbacGetMps(mstate))); + if ((binValue ^ mstate) & 1) { // NOTE: lps is non-zero and the maximum of idx is 8 because lps less than 256 //numBits = g_renormTable[lps >> 3]; unsigned long idx; CLZ32(idx, lps); + assert(state != 63 || idx == 1); + numBits = 8 - idx; - if (numBits >= 6) + if (state >= 63) numBits = 6; + assert(numBits <= 6); low += range; range = lps; _______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel