[x265] [PATCH 2 of 3] cabac: writeByte() for faster CABAC output

Min Chen chenm003 at 163.com
Tue Oct 15 14:31:42 CEST 2013


# HG changeset patch
# User Min Chen <chenm003 at 163.com>
# Date 1381840265 -28800
# Node ID edccd210d53260d0807bf7539d060262694b5561
# Parent  369ea551e0304070c137fa5c0122c80dfeff96f6
cabac: writeByte() for faster CABAC output

diff -r 369ea551e030 -r edccd210d532 source/Lib/TLibCommon/TComBitCounter.h
--- a/source/Lib/TLibCommon/TComBitCounter.h	Tue Oct 15 20:30:43 2013 +0800
+++ b/source/Lib/TLibCommon/TComBitCounter.h	Tue Oct 15 20:31:05 2013 +0800
@@ -64,6 +64,7 @@
     virtual ~TComBitCounter()   {}
 
     void        write(UInt /*uiBits*/, UInt uiNumberOfBits)  { m_uiBitCounter += uiNumberOfBits; }
+    void        writeByte(UInt /*val*/)                      { m_uiBitCounter += 8; }
 
     void        resetBits()                                  { m_uiBitCounter = 0; }
 
diff -r 369ea551e030 -r edccd210d532 source/Lib/TLibCommon/TComBitStream.cpp
--- a/source/Lib/TLibCommon/TComBitStream.cpp	Tue Oct 15 20:30:43 2013 +0800
+++ b/source/Lib/TLibCommon/TComBitStream.cpp	Tue Oct 15 20:31:05 2013 +0800
@@ -128,6 +128,14 @@
     m_num_held_bits = next_num_held_bits;
 }
 
+void TComOutputBitstream::writeByte(UInt val)
+{
+    // NOTE: we are here only in Cabac
+    assert(m_num_held_bits == 0);
+
+    push_back(val);
+}
+
 void TComOutputBitstream::writeAlignOne()
 {
     UInt num_bits = getNumBitsUntilByteAligned();
diff -r 369ea551e030 -r edccd210d532 source/Lib/TLibCommon/TComBitStream.h
--- a/source/Lib/TLibCommon/TComBitStream.h	Tue Oct 15 20:30:43 2013 +0800
+++ b/source/Lib/TLibCommon/TComBitStream.h	Tue Oct 15 20:31:05 2013 +0800
@@ -64,6 +64,7 @@
     virtual void        writeAlignZero() {}
 
     virtual void        write(UInt uiBits, UInt uiNumberOfBits)  = 0;
+    virtual void        writeByte(UInt val)                      = 0;
     virtual void        resetBits()                              = 0;
     virtual UInt getNumberOfWrittenBits() const = 0;
     virtual ~TComBitIf() {}
@@ -103,6 +104,7 @@
      * the current bitstream
      */
     void        write(UInt uiBits, UInt uiNumberOfBits);
+    void        writeByte(UInt val);
 
     /** insert one bits until the bitstream is byte-aligned */
     void        writeAlignOne();
diff -r 369ea551e030 -r edccd210d532 source/Lib/TLibEncoder/TEncBinCoderCABAC.cpp
--- a/source/Lib/TLibEncoder/TEncBinCoderCABAC.cpp	Tue Oct 15 20:30:43 2013 +0800
+++ b/source/Lib/TLibEncoder/TEncBinCoderCABAC.cpp	Tue Oct 15 20:31:05 2013 +0800
@@ -85,10 +85,10 @@
     {
         //assert( m_numBufferedBytes > 0 );
         //assert( m_bufferedByte != 0xff );
-        m_pcTComBitIf->write(m_bufferedByte + 1, 8);
+        m_pcTComBitIf->writeByte(m_bufferedByte + 1);
         while (m_numBufferedBytes > 1)
         {
-            m_pcTComBitIf->write(0x00, 8);
+            m_pcTComBitIf->writeByte(0x00);
             m_numBufferedBytes--;
         }
 
@@ -98,11 +98,11 @@
     {
         if (m_numBufferedBytes > 0)
         {
-            m_pcTComBitIf->write(m_bufferedByte, 8);
+            m_pcTComBitIf->writeByte(m_bufferedByte);
         }
         while (m_numBufferedBytes > 1)
         {
-            m_pcTComBitIf->write(0xff, 8);
+            m_pcTComBitIf->writeByte(0xff);
             m_numBufferedBytes--;
         }
     }
@@ -361,12 +361,12 @@
             UInt carry = leadByte >> 8;
             UInt byte = m_bufferedByte + carry;
             m_bufferedByte = leadByte & 0xff;
-            m_pcTComBitIf->write(byte, 8);
+            m_pcTComBitIf->writeByte(byte);
 
             byte = (0xff + carry) & 0xff;
             while (m_numBufferedBytes > 1)
             {
-                m_pcTComBitIf->write(byte, 8);
+                m_pcTComBitIf->writeByte(byte);
                 m_numBufferedBytes--;
             }
         }



More information about the x265-devel mailing list