<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, Oct 12, 2013 at 3:10 AM, Min Chen <span dir="ltr"><<a href="mailto:chenm003@163.com" target="_blank">chenm003@163.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"># HG changeset patch<br>
# User Min Chen <<a href="mailto:chenm003@163.com">chenm003@163.com</a>><br>
# Date 1381565425 -28800<br>
# Node ID e5778c8db6af3cc61e1affc600324a93df57a11b<br>
# Parent  9a02765f182e9da2924113f7e712abf3ea22759f<br>
cabac: cleanup TEncBinCoderCABACCounter to reduce C++ feature<br>
<br>
diff -r 9a02765f182e -r e5778c8db6af source/Lib/TLibEncoder/TEncBinCoderCABAC.cpp<br>
--- a/source/Lib/TLibEncoder/TEncBinCoderCABAC.cpp      Fri Oct 11 23:41:41 2013 -0500<br>
+++ b/source/Lib/TLibEncoder/TEncBinCoderCABAC.cpp      Sat Oct 12 16:10:25 2013 +0800<br>
@@ -47,6 +47,7 @@<br>
     : m_pcTComBitIf(0)<br>
     , m_binCountIncrement(0)<br>
     , m_fracBits(0)<br>
+    , m_isCounter(false)<br>
 {}<br>
<br>
 TEncBinCABAC::~TEncBinCABAC()<br>
@@ -73,6 +74,14 @@<br>
<br>
 void TEncBinCABAC::finish()<br>
 {<br>
+    if (m_isCounter)<br>
+    {<br>
+        // TODO: why write 0 bits?<br>
+        m_pcTComBitIf->write(0, UInt(m_fracBits >> 15));<br>
+        m_fracBits &= 32767;<br>
+        assert(0);<br>
+    }<br>
+<br>
     if (m_uiLow >> (32 - m_bitsLeft))<br></blockquote><div><br></div><div>Can you make a sweep through the CABAC source files and remove hungarian notation (separate patch, of course)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

     {<br>
         //assert( m_numBufferedBytes > 0 );<br>
@@ -166,7 +175,10 @@<br>
<br>
 UInt TEncBinCABAC::getNumWrittenBits()<br>
 {<br>
-    return m_pcTComBitIf->getNumberOfWrittenBits() + 8 * m_numBufferedBytes + 23 - m_bitsLeft;<br>
+    if (m_isCounter)<br>
+        return m_pcTComBitIf->getNumberOfWrittenBits() + UInt(m_fracBits >> 15);<br>
+    else<br>
+        return m_pcTComBitIf->getNumberOfWrittenBits() + 8 * m_numBufferedBytes + 23 - m_bitsLeft;<br>
 }<br>
<br>
 /**<br>
@@ -186,6 +198,12 @@<br>
         DTRACE_CABAC_T("\n")<br>
     }<br>
     m_uiBinsCoded += m_binCountIncrement;<br>
+    if (m_isCounter)<br>
+    {<br>
+        m_fracBits += rcCtxModel.getEntropyBits(binValue);<br>
+        rcCtxModel.update(binValue);<br>
+        return;<br>
+    }<br>
     rcCtxModel.setBinsCoded(1);<br>
<br>
     UInt  uiLPS   = g_lpsTable[rcCtxModel.getState()][(m_uiRange >> 6) & 3];<br>
@@ -230,6 +248,11 @@<br>
         DTRACE_CABAC_T("\n")<br>
     }<br>
     m_uiBinsCoded += m_binCountIncrement;<br>
+    if (m_isCounter)<br>
+    {<br>
+        m_fracBits += 32768;<br>
+        return;<br>
+    }<br>
     m_uiLow <<= 1;<br>
     if (binValue)<br>
     {<br>
@@ -249,6 +272,11 @@<br>
 void TEncBinCABAC::encodeBinsEP(UInt binValues, int numBins)<br>
 {<br>
     m_uiBinsCoded += numBins & - m_binCountIncrement;<br>
+    if (m_isCounter)<br>
+    {<br>
+        m_fracBits += 32768 * numBins;<br>
+        return;<br>
+    }<br>
<br>
     for (int i = 0; i < numBins; i++)<br>
     {<br>
@@ -285,6 +313,12 @@<br>
 void TEncBinCABAC::encodeBinTrm(UInt binValue)<br>
 {<br>
     m_uiBinsCoded += m_binCountIncrement;<br>
+    if (m_isCounter)<br>
+    {<br>
+        m_fracBits += ContextModel::getEntropyBitsTrm(binValue);<br>
+        return;<br>
+    }<br>
+<br>
     m_uiRange -= 2;<br>
     if (binValue)<br>
     {<br>
diff -r 9a02765f182e -r e5778c8db6af source/Lib/TLibEncoder/TEncBinCoderCABAC.h<br>
--- a/source/Lib/TLibEncoder/TEncBinCoderCABAC.h        Fri Oct 11 23:41:41 2013 -0500<br>
+++ b/source/Lib/TLibEncoder/TEncBinCoderCABAC.h        Sat Oct 12 16:10:25 2013 +0800<br>
@@ -98,6 +98,7 @@<br>
     UInt                m_uiBinsCoded;<br>
     int                 m_binCountIncrement;<br>
     UInt64              m_fracBits;<br>
+    bool                m_isCounter;<br>
 };<br>
 }<br>
 //! \}<br>
diff -r 9a02765f182e -r e5778c8db6af source/Lib/TLibEncoder/TEncSampleAdaptiveOffset.cpp<br>
--- a/source/Lib/TLibEncoder/TEncSampleAdaptiveOffset.cpp       Fri Oct 11 23:41:41 2013 -0500<br>
+++ b/source/Lib/TLibEncoder/TEncSampleAdaptiveOffset.cpp       Sat Oct 12 16:10:25 2013 +0800<br>
@@ -497,16 +497,17 @@<br>
<br>
     int maxDepth = 4;<br>
     m_rdSbacCoders = new TEncSbac * *[maxDepth + 1];<br>
-    m_binCoderCABAC = new TEncBinCABACCounter * *[maxDepth + 1];<br>
+    m_binCoderCABAC = new TEncBinCABAC * *[maxDepth + 1];<br>
<br>
     for (int d = 0; d < maxDepth + 1; d++)<br>
     {<br>
         m_rdSbacCoders[d] = new TEncSbac*[CI_NUM];<br>
-        m_binCoderCABAC[d] = new TEncBinCABACCounter*[CI_NUM];<br>
+        m_binCoderCABAC[d] = new TEncBinCABAC*[CI_NUM];<br>
         for (int ciIdx = 0; ciIdx < CI_NUM; ciIdx++)<br>
         {<br>
             m_rdSbacCoders[d][ciIdx] = new TEncSbac;<br>
-            m_binCoderCABAC[d][ciIdx] = new TEncBinCABACCounter;<br>
+            m_binCoderCABAC[d][ciIdx] = new TEncBinCABAC;<br>
+            m_binCoderCABAC[d][ciIdx]->m_isCounter = true;<br>
             m_rdSbacCoders[d][ciIdx]->init(m_binCoderCABAC[d][ciIdx]);<br>
         }<br>
     }<br>
diff -r 9a02765f182e -r e5778c8db6af source/Lib/TLibEncoder/TEncSampleAdaptiveOffset.h<br>
--- a/source/Lib/TLibEncoder/TEncSampleAdaptiveOffset.h Fri Oct 11 23:41:41 2013 -0500<br>
+++ b/source/Lib/TLibEncoder/TEncSampleAdaptiveOffset.h Sat Oct 12 16:10:25 2013 +0800<br>
@@ -63,7 +63,7 @@<br>
     TEncEntropy*      m_entropyCoder;<br>
     TEncSbac***       m_rdSbacCoders;            ///< for CABAC<br>
     TEncSbac*         m_rdGoOnSbacCoder;<br>
-    TEncBinCABACCounter*** m_binCoderCABAC;          ///< temporal CABAC state storage for RD computation<br>
+    TEncBinCABAC***   m_binCoderCABAC;          ///< temporal CABAC state storage for RD computation<br>
<br>
     Int64  ***m_count;    //[MAX_NUM_SAO_PART][MAX_NUM_SAO_TYPE][MAX_NUM_SAO_CLASS];<br>
     Int64  ***m_offset;   //[MAX_NUM_SAO_PART][MAX_NUM_SAO_TYPE][MAX_NUM_SAO_CLASS];<br>
diff -r 9a02765f182e -r e5778c8db6af source/Lib/TLibEncoder/TEncSbac.h<br>
--- a/source/Lib/TLibEncoder/TEncSbac.h Fri Oct 11 23:41:41 2013 -0500<br>
+++ b/source/Lib/TLibEncoder/TEncSbac.h Sat Oct 12 16:10:25 2013 +0800<br>
@@ -45,7 +45,6 @@<br>
 #include "TEncEntropy.h"<br>
 #include "TEncBinCoder.h"<br>
 #include "TEncBinCoderCABAC.h"<br>
-#include "TEncBinCoderCABACCounter.h"<br>
<br>
 namespace x265 {<br>
 // private namespace<br>
diff -r 9a02765f182e -r e5778c8db6af source/encoder/CMakeLists.txt<br>
--- a/source/encoder/CMakeLists.txt     Fri Oct 11 23:41:41 2013 -0500<br>
+++ b/source/encoder/CMakeLists.txt     Sat Oct 12 16:10:25 2013 +0800<br>
@@ -17,7 +17,6 @@<br>
     ../Lib/TLibEncoder/TEncAnalyze.h<br>
     ../Lib/TLibEncoder/TEncBinCoder.h<br>
     ../Lib/TLibEncoder/TEncBinCoderCABAC.h<br>
-    ../Lib/TLibEncoder/TEncBinCoderCABACCounter.h<br>
     ../Lib/TLibEncoder/TEncCavlc.h<br>
     ../Lib/TLibEncoder/TEncCfg.h<br>
     ../Lib/TLibEncoder/TEncCu.h<br>
@@ -31,7 +30,6 @@<br>
     ../Lib/TLibEncoder/SEIwrite.cpp<br>
     ../Lib/TLibEncoder/SyntaxElementWriter.cpp<br>
     ../Lib/TLibEncoder/TEncBinCoderCABAC.cpp<br>
-    ../Lib/TLibEncoder/TEncBinCoderCABACCounter.cpp<br>
     ../Lib/TLibEncoder/TEncCavlc.cpp<br>
     ../Lib/TLibEncoder/TEncCu.cpp<br>
     ../Lib/TLibEncoder/TEncEntropy.cpp<br>
diff -r 9a02765f182e -r e5778c8db6af source/encoder/cturow.cpp<br>
--- a/source/encoder/cturow.cpp Fri Oct 11 23:41:41 2013 -0500<br>
+++ b/source/encoder/cturow.cpp Sat Oct 12 16:10:25 2013 +0800<br>
@@ -31,22 +31,24 @@<br>
<br>
 void CTURow::create(Encoder* top)<br>
 {<br>
+    m_rdGoOnBinCodersCABAC.m_isCounter = true;<br>
     m_rdGoOnSbacCoder.init(&m_rdGoOnBinCodersCABAC);<br>
     m_sbacCoder.init(&m_binCoderCABAC);<br>
     m_trQuant.init(1 << top->getQuadtreeTULog2MaxSize(), top->param.bEnableRDOQ, top->param.bEnableRDOQTS, top->param.bEnableTSkipFast);<br>
<br>
     m_rdSbacCoders = new TEncSbac **[g_maxCUDepth + 1];<br>
-    m_binCodersCABAC = new TEncBinCABACCounter **[g_maxCUDepth + 1];<br>
+    m_binCodersCABAC = new TEncBinCABAC **[g_maxCUDepth + 1];<br>
<br>
     for (UInt depth = 0; depth < g_maxCUDepth + 1; depth++)<br>
     {<br>
         m_rdSbacCoders[depth]  = new TEncSbac*[CI_NUM];<br>
-        m_binCodersCABAC[depth] = new TEncBinCABACCounter*[CI_NUM];<br>
+        m_binCodersCABAC[depth] = new TEncBinCABAC*[CI_NUM];<br>
<br>
         for (int ciIdx = 0; ciIdx < CI_NUM; ciIdx++)<br>
         {<br>
             m_rdSbacCoders[depth][ciIdx] = new TEncSbac;<br>
-            m_binCodersCABAC[depth][ciIdx] = new TEncBinCABACCounter;<br>
+            m_binCodersCABAC[depth][ciIdx] = new TEncBinCABAC;<br>
+            m_binCodersCABAC[depth][ciIdx]->m_isCounter = true;<br></blockquote><div><br></div><div>this would be a lot cleaner to me if the TEncBinCABAC constructor took a (bool bIsCounter) argument.</div><div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
             m_rdSbacCoders[depth][ciIdx]->init(m_binCodersCABAC[depth][ciIdx]);<br>
         }<br>
     }<br>
diff -r 9a02765f182e -r e5778c8db6af source/encoder/cturow.h<br>
--- a/source/encoder/cturow.h   Fri Oct 11 23:41:41 2013 -0500<br>
+++ b/source/encoder/cturow.h   Sat Oct 12 16:10:25 2013 +0800<br>
@@ -49,7 +49,7 @@<br>
     TEncSbac               m_rdGoOnSbacCoder;<br>
     TEncSbac               m_bufferSbacCoder;<br>
     TEncBinCABAC           m_binCoderCABAC;<br>
-    TEncBinCABACCounter    m_rdGoOnBinCodersCABAC;<br>
+    TEncBinCABAC           m_rdGoOnBinCodersCABAC;<br>
     TComBitCounter         m_bitCounter;<br>
     TComRdCost             m_rdCost;<br>
     TEncEntropy            m_entropyCoder;<br>
@@ -57,7 +57,7 @@<br>
     TEncCu                 m_cuCoder;<br>
     TComTrQuant            m_trQuant;<br>
     TEncSbac            ***m_rdSbacCoders;<br>
-    TEncBinCABACCounter ***m_binCodersCABAC;<br>
+    TEncBinCABAC        ***m_binCodersCABAC;<br>
<br>
     void create(Encoder* top);<br>
<br>
diff -r 9a02765f182e -r e5778c8db6af source/encoder/framefilter.cpp<br>
--- a/source/encoder/framefilter.cpp    Fri Oct 11 23:41:41 2013 -0500<br>
+++ b/source/encoder/framefilter.cpp    Sat Oct 12 16:10:25 2013 +0800<br>
@@ -82,6 +82,7 @@<br>
<br>
     m_saoRowDelay = m_cfg->param.bEnableLoopFilter ? 1 : 0;<br>
     m_loopFilter.setCfg(pic->getSlice()->getPPS()->getLoopFilterAcrossTilesEnabledFlag());<br>
+    m_rdGoOnBinCodersCABAC.m_isCounter = true;<br>
     m_rdGoOnSbacCoder.init(&m_rdGoOnBinCodersCABAC);<br>
     m_entropyCoder.setEntropyCoder(&m_rdGoOnSbacCoder, pic->getSlice());<br>
     m_entropyCoder.setBitstream(&m_bitCounter);<br>
@@ -128,7 +129,7 @@<br>
     if (row == 0 && m_cfg->param.bEnableSAO)<br>
     {<br>
         // NOTE: not need, seems HM's bug, I want to keep output exact matched.<br>
-        m_rdGoOnBinCodersCABAC.m_fracBits = ((TEncBinCABACCounter*)((TEncSbac*)m_rdGoOnSbacCoderRow0->m_pcBinIf))->m_fracBits;<br>
+        m_rdGoOnBinCodersCABAC.m_fracBits = ((TEncBinCABAC*)((TEncSbac*)m_rdGoOnSbacCoderRow0->m_pcBinIf))->m_fracBits;<br>
         m_sao.startSaoEnc(m_pic, &m_entropyCoder, &m_rdGoOnSbacCoder);<br>
     }<br>
<br>
diff -r 9a02765f182e -r e5778c8db6af source/encoder/framefilter.h<br>
--- a/source/encoder/framefilter.h      Fri Oct 11 23:41:41 2013 -0500<br>
+++ b/source/encoder/framefilter.h      Sat Oct 12 16:10:25 2013 +0800<br>
@@ -69,7 +69,7 @@<br>
     // SAO<br>
     TEncEntropy                 m_entropyCoder;<br>
     TEncSbac                    m_rdGoOnSbacCoder;<br>
-    TEncBinCABACCounter         m_rdGoOnBinCodersCABAC;<br>
+    TEncBinCABAC                m_rdGoOnBinCodersCABAC;<br>
     TComBitCounter              m_bitCounter;<br>
     TEncSbac*                   m_rdGoOnSbacCoderRow0;  // for bitstream exact only, depends on HM's bug<br>
 };<br>
<br>
_______________________________________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Steve Borho
</div></div>