# HG changeset patch
# User Min Chen <[email protected]>
# Date 1381565425 -28800
# Node ID e5778c8db6af3cc61e1affc600324a93df57a11b
# Parent  9a02765f182e9da2924113f7e712abf3ea22759f
cabac: cleanup TEncBinCoderCABACCounter to reduce C++ feature

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

_______________________________________________
x265-devel mailing list
[email protected]
https://mailman.videolan.org/listinfo/x265-devel

Reply via email to