<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>