[x265] [PATCH] cabac: cleanup TEncBinCoderCABACCounter to reduce C++ feature
Steve Borho
steve at borho.org
Sat Oct 12 22:05:38 CEST 2013
On Sat, Oct 12, 2013 at 3:10 AM, Min Chen <chenm003 at 163.com> wrote:
> # HG changeset patch
> # User Min Chen <chenm003 at 163.com>
> # 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))
>
Can you make a sweep through the CABAC source files and remove hungarian
notation (separate patch, of course)
> {
> //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;
>
this would be a lot cleaner to me if the TEncBinCABAC constructor took a
(bool bIsCounter) argument.
>
> 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
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
--
Steve Borho
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20131012/a2f72962/attachment.html>
More information about the x265-devel
mailing list