# HG changeset patch
# User Min Chen <[email protected]>
# Date 1395189216 25200
# Node ID e08877d1b13ae1cca82a5d63e26a9f4089e9a300
# Parent  e9f08d038ff0dc17152002d2b2b70138d08465d7
replace parameters (oneCtx, absCtx) by pointer m_estBitsSbac->..

diff -r e9f08d038ff0 -r e08877d1b13a source/Lib/TLibCommon/TComTrQuant.cpp
--- a/source/Lib/TLibCommon/TComTrQuant.cpp     Tue Mar 18 17:33:12 2014 -0700
+++ b/source/Lib/TLibCommon/TComTrQuant.cpp     Tue Mar 18 17:33:36 2014 -0700
@@ -628,15 +628,17 @@
 
                 //===== coefficient level estimation =====
                 uint32_t level;
-                uint32_t oneCtx = 4 * ctxSet + c1;
-                uint32_t absCtx = ctxSet + c2;
+                const uint32_t oneCtx = 4 * ctxSet + c1;
+                const uint32_t absCtx = ctxSet + c2;
+                const int *greaterOneBits = 
m_estBitsSbac->greaterOneBits[oneCtx];
+                const int *levelAbsBits = m_estBitsSbac->levelAbsBits[absCtx];
                 double curCostSig = 0;
 
                 costCoeff[scanPos] = MAX_DOUBLE;
                 if (scanPos == lastScanPos)
                 {
                     level = xGetCodedLevel(costCoeff[scanPos], curCostSig, 
costSig[scanPos],
-                                           levelDouble, maxAbsLevel, 
baseLevel, oneCtx, absCtx, goRiceParam,
+                                           levelDouble, maxAbsLevel, 
baseLevel, greaterOneBits, levelAbsBits, goRiceParam,
                                            c1c2Idx, qbits, scaleFactor, 1);
                 }
                 else
@@ -651,7 +653,7 @@
                     {
                         curCostSig = xGetRateSigCoef(1, ctxSig);
                         level = xGetCodedLevel(costCoeff[scanPos], curCostSig, 
costSig[scanPos],
-                                               levelDouble, maxAbsLevel, 
baseLevel, oneCtx, absCtx, goRiceParam,
+                                               levelDouble, maxAbsLevel, 
baseLevel, greaterOneBits, levelAbsBits, goRiceParam,
                                                c1c2Idx, qbits, scaleFactor, 0);
                     }
                     else
@@ -663,13 +665,13 @@
                 deltaU[blkPos] = (levelDouble - ((int)level << qbits)) >> 
(qbits - 8);
                 if (level > 0)
                 {
-                    int rateNow = xGetICRate(level, level - baseLevel, oneCtx, 
absCtx, goRiceParam, c1c2Idx);
-                    rateIncUp[blkPos] = xGetICRate(level + 1, level + 1 - 
baseLevel, oneCtx, absCtx, goRiceParam, c1c2Idx) - rateNow;
-                    rateIncDown[blkPos] = xGetICRate(level - 1, level - 1 - 
baseLevel, oneCtx, absCtx, goRiceParam, c1c2Idx) - rateNow;
+                    int rateNow = xGetICRate(level, level - baseLevel, 
greaterOneBits, levelAbsBits, goRiceParam, c1c2Idx);
+                    rateIncUp[blkPos] = xGetICRate(level + 1, level + 1 - 
baseLevel, greaterOneBits, levelAbsBits, goRiceParam, c1c2Idx) - rateNow;
+                    rateIncDown[blkPos] = xGetICRate(level - 1, level - 1 - 
baseLevel, greaterOneBits, levelAbsBits, goRiceParam, c1c2Idx) - rateNow;
                 }
                 else // level == 0
                 {
-                    rateIncUp[blkPos] = 
m_estBitsSbac->greaterOneBits[oneCtx][0];
+                    rateIncUp[blkPos] = greaterOneBits[0];
                 }
                 dstCoeff[blkPos] = level;
                 baseCost           += costCoeff[scanPos];
@@ -1145,8 +1147,8 @@
                                             int      levelDouble,
                                             uint32_t maxAbsLevel,
                                             uint32_t baseLevel,
-                                            uint32_t ctxNumOne,
-                                            uint32_t ctxNumAbs,
+                                            const int *greaterOneBits,
+                                            const int *levelAbsBits,
                                             uint32_t absGoRice,
                                             uint32_t c1c2Idx,
                                             int      qbits,
@@ -1176,10 +1178,11 @@
 
     double bestCodedCost = codedCost;
     double bestCodedCostSig = codedCostSig;
+    int diffLevel = maxAbsLevel - baseLevel;
     for (int absLevel = maxAbsLevel; absLevel >= minAbsLevel; absLevel--)
     {
         assert(fabs((double)err2 - double(levelDouble  - (absLevel << qbits)) 
* double(levelDouble  - (absLevel << qbits)) * scaleFactor) < 1e-5);
-        double curCost = err2 + xGetICRateCost(absLevel, absLevel - baseLevel, 
ctxNumOne, ctxNumAbs, absGoRice, c1c2Idx);
+        double curCost = err2 + xGetICRateCost(absLevel, diffLevel, 
greaterOneBits, levelAbsBits, absGoRice, c1c2Idx);
         curCost       += curCostSig;
 
         if (curCost < bestCodedCost)
@@ -1189,6 +1192,7 @@
             bestCodedCostSig = curCostSig;
         }
         err2 += errInc;
+        diffLevel--;
     }
     codedCost = bestCodedCost;
     codedCostSig = bestCodedCostSig;
@@ -1204,15 +1208,13 @@
  */
 FORCEINLINE double TComTrQuant::xGetICRateCost(uint32_t absLevel,
                                           int32_t  diffLevel,
-                                          uint32_t ctxNumOne,
-                                          uint32_t ctxNumAbs,
+                                          const int *greaterOneBits,
+                                          const int *levelAbsBits,
                                           uint32_t absGoRice,
                                           uint32_t c1c2Idx) const
 {
     assert(absLevel > 0);
     uint32_t rate = xGetIEPRate();
-    const int *greaterOneBits = m_estBitsSbac->greaterOneBits[ctxNumOne];
-    const int *levelAbsBits = m_estBitsSbac->levelAbsBits[ctxNumAbs];
 
     if (diffLevel < 0)
     {
@@ -1262,8 +1264,8 @@
 
 inline int TComTrQuant::xGetICRate(uint32_t absLevel,
                                     int32_t diffLevel,
-                                   uint32_t ctxNumOne,
-                                   uint32_t ctxNumAbs,
+                                   const int *greaterOneBits,
+                                   const int *levelAbsBits,
                                    uint32_t absGoRice,
                                    uint32_t c1c2Idx) const
 {
@@ -1275,8 +1277,8 @@
         return 0;
     }
     int rate = 0;
-    const int *greaterOneBits = m_estBitsSbac->greaterOneBits[ctxNumOne];
-    const int *levelAbsBits = m_estBitsSbac->levelAbsBits[ctxNumAbs];
+    //const int *greaterOneBits = m_estBitsSbac->greaterOneBits[ctxNumOne];
+    //const int *levelAbsBits = m_estBitsSbac->levelAbsBits[ctxNumAbs];
 
     if (diffLevel < 0)
     {
diff -r e9f08d038ff0 -r e08877d1b13a source/Lib/TLibCommon/TComTrQuant.h
--- a/source/Lib/TLibCommon/TComTrQuant.h       Tue Mar 18 17:33:12 2014 -0700
+++ b/source/Lib/TLibCommon/TComTrQuant.h       Tue Mar 18 17:33:36 2014 -0700
@@ -194,12 +194,12 @@
     uint32_t xRateDistOptQuant(TComDataCU* cu, int32_t* srcCoeff, TCoeff* 
dstCoeff, uint32_t trSize, TextType ttype, uint32_t absPartIdx, int32_t 
*lastPos);
 
     inline uint32_t xGetCodedLevel(double& codedCost, const double curCostSig, 
double& codedCostSig, int levelDouble,
-                                   uint32_t maxAbsLevel, uint32_t baseLevel, 
uint32_t ctxNumOne, uint32_t ctxNumAbs, uint32_t absGoRice,
+                                   uint32_t maxAbsLevel, uint32_t baseLevel, 
const int *greaterOneBits, const int *levelAbsBits, uint32_t absGoRice,
                                    uint32_t c1c2Idx, int qbits, double scale, 
bool bLast) const;
 
-    inline double xGetICRateCost(uint32_t absLevel, int32_t  diffLevel, 
uint32_t ctxNumOne, uint32_t ctxNumAbs, uint32_t absGoRice, uint32_t c1c2Idx) 
const;
+    inline double xGetICRateCost(uint32_t absLevel, int32_t  diffLevel, const 
int *greaterOneBits, const int *levelAbsBits, uint32_t absGoRice, uint32_t 
c1c2Idx) const;
 
-    inline int    xGetICRate(uint32_t absLevel, int32_t diffLevel, uint32_t 
ctxNumOne, uint32_t ctxNumAbs, uint32_t absGoRice, uint32_t c1c2Idx) const;
+    inline int    xGetICRate(uint32_t absLevel, int32_t diffLevel, const int 
*greaterOneBits, const int *levelAbsBits, uint32_t absGoRice, uint32_t c1c2Idx) 
const;
 
     inline double xGetRateLast(uint32_t posx, uint32_t posy) const;
 
@@ -207,7 +207,7 @@
 
     inline double xGetRateSigCoef(uint32_t sig, uint32_t ctxNumSig) const { 
return m_lambda * m_estBitsSbac->significantBits[ctxNumSig][sig]; }
 
-    inline double xGetICost(double rage) const { return m_lambda * rage; } 
///< Get the cost for a specific rate
+    inline double xGetICost(double rate) const { return m_lambda * rate; } 
///< Get the cost for a specific rate
 
     inline uint32_t xGetIEPRate() const          { return 32768; }            
///< Get the cost of an equal probable bit
 

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

Reply via email to