# 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