[x265] cleanup TEncSbac
Satoshi Nakagawa
nakagawa424 at oki.com
Wed Feb 12 02:33:23 CET 2014
# HG changeset patch
# User Satoshi Nakagawa <nakagawa424 at oki.com>
# Date 1392168582 -32400
# Wed Feb 12 10:29:42 2014 +0900
# Node ID 01cde6b3045672dfba2530b97d62c43dec8b579d
# Parent d6fdfa9f493871eff9283d0968179a8c93063230
cleanup TEncSbac
diff -r d6fdfa9f4938 -r 01cde6b30456 source/Lib/TLibCommon/TComTrQuant.cpp
--- a/source/Lib/TLibCommon/TComTrQuant.cpp Tue Feb 11 12:57:32 2014 -0600
+++ b/source/Lib/TLibCommon/TComTrQuant.cpp Wed Feb 12 10:29:42 2014 +0900
@@ -642,9 +642,9 @@
baseLevel = (c1Idx < C1FLAG_NUMBER) ? (2 + (c2Idx < C2FLAG_NUMBER)) : 1;
if (level >= baseLevel)
{
- if (level > 3 * (1 << goRiceParam))
+ if (goRiceParam < 4 && level > (3 << goRiceParam))
{
- goRiceParam = std::min<uint32_t>(goRiceParam + 1, 4);
+ goRiceParam++;
}
}
if (level >= 1)
diff -r d6fdfa9f4938 -r 01cde6b30456 source/Lib/TLibEncoder/TEncBinCoderCABAC.cpp
--- a/source/Lib/TLibEncoder/TEncBinCoderCABAC.cpp Tue Feb 11 12:57:32 2014 -0600
+++ b/source/Lib/TLibEncoder/TEncBinCoderCABAC.cpp Wed Feb 12 10:29:42 2014 +0900
@@ -57,11 +57,6 @@
m_bitIf = bitIf;
}
-void TEncBinCABAC::uninit()
-{
- m_bitIf = 0;
-}
-
void TEncBinCABAC::start()
{
m_low = 0;
diff -r d6fdfa9f4938 -r 01cde6b30456 source/Lib/TLibEncoder/TEncBinCoderCABAC.h
--- a/source/Lib/TLibEncoder/TEncBinCoderCABAC.h Tue Feb 11 12:57:32 2014 -0600
+++ b/source/Lib/TLibEncoder/TEncBinCoderCABAC.h Wed Feb 12 10:29:42 2014 +0900
@@ -55,7 +55,6 @@
virtual ~TEncBinCABAC();
void init(TComBitIf* bitIf);
- void uninit();
void start();
void finish();
diff -r d6fdfa9f4938 -r 01cde6b30456 source/Lib/TLibEncoder/TEncEntropy.cpp
--- a/source/Lib/TLibEncoder/TEncEntropy.cpp Tue Feb 11 12:57:32 2014 -0600
+++ b/source/Lib/TLibEncoder/TEncEntropy.cpp Wed Feb 12 10:29:42 2014 +0900
@@ -450,11 +450,14 @@
}
else
{
+ uint32_t interDir = cu->getInterDir(subPartIdx);
encodeInterDirPU(cu, subPartIdx);
for (uint32_t refListIdx = 0; refListIdx < 2; refListIdx++)
{
- if (cu->getSlice()->getNumRefIdx(refListIdx) > 0)
+ if (interDir & (1 << refListIdx))
{
+ assert(cu->getSlice()->getNumRefIdx(refListIdx) > 0);
+
encodeRefFrmIdxPU(cu, subPartIdx, refListIdx);
encodeMvdPU(cu, subPartIdx, refListIdx);
encodeMVPIdxPU(cu, subPartIdx, refListIdx);
@@ -489,7 +492,7 @@
return;
}
- if (cu->getInterDir(absPartIdx) & (1 << list))
+ assert(cu->getInterDir(absPartIdx) & (1 << list));
{
m_entropyCoderIf->codeRefFrmIdx(cu, absPartIdx, list);
}
@@ -506,7 +509,7 @@
{
assert(!cu->isIntra(absPartIdx));
- if (cu->getInterDir(absPartIdx) & (1 << list))
+ assert(cu->getInterDir(absPartIdx) & (1 << list));
{
m_entropyCoderIf->codeMvd(cu, absPartIdx, list);
}
@@ -514,9 +517,9 @@
void TEncEntropy::encodeMVPIdxPU(TComDataCU* cu, uint32_t absPartIdx, int list)
{
- if ((cu->getInterDir(absPartIdx) & (1 << list)))
+ assert(cu->getInterDir(absPartIdx) & (1 << list));
{
- m_entropyCoderIf->codeMVPIdx(cu, absPartIdx, list);
+ m_entropyCoderIf->codeMVPIdx(cu->getMVPIdx(list, absPartIdx));
}
}
diff -r d6fdfa9f4938 -r 01cde6b30456 source/Lib/TLibEncoder/TEncEntropy.h
--- a/source/Lib/TLibEncoder/TEncEntropy.h Tue Feb 11 12:57:32 2014 -0600
+++ b/source/Lib/TLibEncoder/TEncEntropy.h Wed Feb 12 10:29:42 2014 +0900
@@ -66,9 +66,7 @@
virtual void setBitstream(TComBitIf* p) = 0;
virtual void setSlice(TComSlice* p) = 0;
virtual void resetBits() = 0;
- virtual void resetCoeffCost() = 0;
virtual uint32_t getNumberOfWrittenBits() = 0;
- virtual uint32_t getCoeffCost() = 0;
virtual void codeVPS(TComVPS* vps) = 0;
virtual void codeSPS(TComSPS* sps) = 0;
@@ -78,7 +76,7 @@
virtual void codeTilesWPPEntryPoint(TComSlice* slice) = 0;
virtual void codeTerminatingBit(uint32_t isLast) = 0;
virtual void codeSliceFinish() = 0;
- virtual void codeMVPIdx(TComDataCU* cu, uint32_t absPartIdx, int list) = 0;
+ virtual void codeMVPIdx(uint32_t symbol) = 0;
virtual void codeScalingList(TComScalingList* scalingList) = 0;
public:
@@ -107,7 +105,6 @@
virtual void codeMvd(TComDataCU* cu, uint32_t absPartIdx, int eRefList) = 0;
virtual void codeDeltaQP(TComDataCU* cu, uint32_t absPartIdx) = 0;
virtual void codeCoeffNxN(TComDataCU* cu, TCoeff* pcCoef, uint32_t absPartIdx, uint32_t width, uint32_t height, uint32_t depth, TextType ttype) = 0;
- virtual void codeTransformSkipFlags(TComDataCU* cu, uint32_t absPartIdx, uint32_t width, uint32_t height, TextType ttype) = 0;
virtual void codeSAOSign(uint32_t code) = 0;
virtual void codeSaoMaxUvlc(uint32_t code, uint32_t maxSymbol) = 0;
virtual void codeSaoMerge(uint32_t code) = 0;
@@ -115,9 +112,6 @@
virtual void codeSaoUflc(uint32_t length, uint32_t code) = 0;
virtual void estBit(estBitsSbacStruct* estBitsSbac, int width, int height, TextType ttype) = 0;
- virtual void codeDFFlag(uint32_t code, const char *symbolName) = 0;
- virtual void codeDFSvlc(int code, const char *symbolName) = 0;
-
virtual ~TEncEntropyIf() {}
};
@@ -137,12 +131,8 @@
void resetBits() { m_entropyCoderIf->resetBits(); }
- void resetCoeffCost() { m_entropyCoderIf->resetCoeffCost(); }
-
uint32_t getNumberOfWrittenBits() { return m_entropyCoderIf->getNumberOfWrittenBits(); }
- uint32_t getCoeffCost() { return m_entropyCoderIf->getCoeffCost(); }
-
void resetEntropy() { m_entropyCoderIf->resetEntropy(); }
void determineCabacInitIdx() { m_entropyCoderIf->determineCabacInitIdx(); }
diff -r d6fdfa9f4938 -r 01cde6b30456 source/Lib/TLibEncoder/TEncSbac.cpp
--- a/source/Lib/TLibEncoder/TEncSbac.cpp Tue Feb 11 12:57:32 2014 -0600
+++ b/source/Lib/TLibEncoder/TEncSbac.cpp Wed Feb 12 10:29:42 2014 +0900
@@ -184,7 +184,6 @@
// new structure here
: m_slice(NULL)
, m_binIf(NULL)
- , m_coeffCost(0)
{
memset(m_contextModels, 0, sizeof(m_contextModels));
}
@@ -235,7 +234,6 @@
initBuffer(&m_contextModels[OFF_TRANSFORMSKIP_FLAG_CTX], sliceType, qp, (UChar*)INIT_TRANSFORMSKIP_FLAG, 2 * NUM_TRANSFORMSKIP_FLAG_CTX);
initBuffer(&m_contextModels[OFF_CU_TRANSQUANT_BYPASS_FLAG_CTX], sliceType, qp, (UChar*)INIT_CU_TRANSQUANT_BYPASS_FLAG, NUM_CU_TRANSQUANT_BYPASS_FLAG_CTX);
// new structure
- m_lastQp = qp;
m_binIf->start();
}
@@ -300,18 +298,6 @@
}
}
-void TEncSbac::codeDFFlag(uint32_t code, const char *symbolName)
-{
- (void)symbolName;
- WRITE_FLAG(code, symbolName);
-}
-
-void TEncSbac::codeDFSvlc(int code, const char *symbolName)
-{
- (void)symbolName;
- WRITE_SVLC(code, symbolName);
-}
-
#define SCALING_LIST_OUTPUT_RESULT 0 //JCTVC-G880/JCTVC-G1016 quantization matrices
#define PRINT_RPS_INFO 0 ///< Enable/disable the printing of bits used to send the RPS.
@@ -1361,27 +1347,9 @@
m_binIf->finish();
}
-void TEncSbac::xWriteUnarySymbol(uint32_t symbol, ContextModel* scmModel, int offset)
-{
- m_binIf->encodeBin(symbol ? 1 : 0, scmModel[0]);
-
- if (0 == symbol)
- {
- return;
- }
-
- while (symbol--)
- {
- m_binIf->encodeBin(symbol ? 1 : 0, scmModel[offset]);
- }
-}
-
void TEncSbac::xWriteUnaryMaxSymbol(uint32_t symbol, ContextModel* scmModel, int offset, uint32_t maxSymbol)
{
- if (maxSymbol == 0)
- {
- return;
- }
+ assert(maxSymbol > 0);
m_binIf->encodeBin(symbol ? 1 : 0, scmModel[0]);
@@ -1439,8 +1407,9 @@
if (codeNumber < (COEF_REMAIN_BIN_REDUCTION << param))
{
length = codeNumber >> param;
+ codeNumber -= length << param;
m_binIf->encodeBinsEP((1 << (length + 1)) - 2, length + 1);
- m_binIf->encodeBinsEP((codeNumber % (1 << param)), param);
+ m_binIf->encodeBinsEP(codeNumber, param);
}
else
{
@@ -1478,18 +1447,12 @@
{
m_binIf->copyState(src->m_binIf);
- this->m_coeffCost = src->m_coeffCost;
- this->m_lastQp = src->m_lastQp;
-
memcpy(m_contextModels, src->m_contextModels, MAX_OFF_CTX_MOD * sizeof(ContextModel));
}
-void TEncSbac::codeMVPIdx(TComDataCU* cu, uint32_t absPartIdx, int eRefList)
+void TEncSbac::codeMVPIdx(uint32_t symbol)
{
- int symbol = cu->getMVPIdx(eRefList, absPartIdx);
- int num = AMVP_MAX_NUM_CANDS;
-
- xWriteUnaryMaxSymbol(symbol, &m_contextModels[OFF_MVP_IDX_CTX], 1, num - 1);
+ m_binIf->encodeBin(symbol, m_contextModels[OFF_MVP_IDX_CTX]);
}
void TEncSbac::codePartSize(TComDataCU* cu, uint32_t absPartIdx, uint32_t depth)
@@ -1534,7 +1497,7 @@
{
m_binIf->encodeBin(0, m_contextModels[OFF_PART_SIZE_CTX + 0]);
m_binIf->encodeBin(0, m_contextModels[OFF_PART_SIZE_CTX + 1]);
- if (depth == g_maxCUDepth - g_addCUDepth && !(cu->getWidth(absPartIdx) == 8 && cu->getHeight(absPartIdx) == 8))
+ if (depth == g_maxCUDepth - g_addCUDepth && !(cu->getWidth(absPartIdx) == 8))
{
m_binIf->encodeBin(1, m_contextModels[OFF_PART_SIZE_CTX + 2]);
}
@@ -1550,7 +1513,7 @@
}
case SIZE_NxN:
{
- if (depth == g_maxCUDepth - g_addCUDepth && !(cu->getWidth(absPartIdx) == 8 && cu->getHeight(absPartIdx) == 8))
+ if (depth == g_maxCUDepth - g_addCUDepth && !(cu->getWidth(absPartIdx) == 8))
{
m_binIf->encodeBin(0, m_contextModels[OFF_PART_SIZE_CTX + 0]);
m_binIf->encodeBin(0, m_contextModels[OFF_PART_SIZE_CTX + 1]);
@@ -1634,11 +1597,11 @@
*/
void TEncSbac::codeMergeIndex(TComDataCU* cu, uint32_t absPartIdx)
{
- uint32_t unaryIdx = cu->getMergeIndex(absPartIdx);
uint32_t numCand = cu->getSlice()->getMaxNumMergeCand();
if (numCand > 1)
{
+ uint32_t unaryIdx = cu->getMergeIndex(absPartIdx);
m_binIf->encodeBin((unaryIdx != 0), m_contextModels[OFF_MERGE_IDX_EXT_CTX]);
assert(unaryIdx < numCand);
@@ -1776,7 +1739,7 @@
const uint32_t interDir = cu->getInterDir(absPartIdx) - 1;
const uint32_t ctx = cu->getCtxInterDir(absPartIdx);
- if (cu->getPartitionSize(absPartIdx) == SIZE_2Nx2N || cu->getHeight(absPartIdx) != 8)
+ if (cu->getPartitionSize(absPartIdx) == SIZE_2Nx2N || cu->getWidth(absPartIdx) != 8)
{
m_binIf->encodeBin(interDir == 2 ? 1 : 0, m_contextModels[OFF_INTER_DIR_CTX + ctx]);
}
@@ -1788,40 +1751,30 @@
void TEncSbac::codeRefFrmIdx(TComDataCU* cu, uint32_t absPartIdx, int eRefList)
{
+ int refFrame = cu->getCUMvField(eRefList)->getRefIdx(absPartIdx);
+ m_binIf->encodeBin(refFrame > 0, m_contextModels[OFF_REF_NO_CTX]);
+
+ if (refFrame > 0)
{
- int refFrame = cu->getCUMvField(eRefList)->getRefIdx(absPartIdx);
- int idx = 0;
- m_binIf->encodeBin((refFrame == 0 ? 0 : 1), m_contextModels[OFF_REF_NO_CTX]);
-
+ uint32_t refNum = cu->getSlice()->getNumRefIdx(eRefList) - 2;
+ if (refNum == 0)
+ {
+ return;
+ }
+ refFrame--;
+ m_binIf->encodeBin(refFrame > 0, m_contextModels[OFF_REF_NO_CTX + 1]);
if (refFrame > 0)
{
- uint32_t refNum = cu->getSlice()->getNumRefIdx(eRefList) - 2;
- idx++;
- refFrame--;
- // TODO: reference codeMergeIndex() to improvement
- for (uint32_t i = 0; i < refNum; ++i)
- {
- const uint32_t symbol = i == refFrame ? 0 : 1;
- if (i == 0)
- {
- m_binIf->encodeBin(symbol, m_contextModels[OFF_REF_NO_CTX + idx]);
- }
- else
- {
- m_binIf->encodeBinEP(symbol);
- }
- if (symbol == 0)
- {
- break;
- }
- }
+ uint32_t mask = (1 << refFrame) - 2;
+ mask >>= (refFrame == refNum) ? 1 : 0;
+ m_binIf->encodeBinsEP(mask, refFrame - (refFrame == refNum));
}
}
}
void TEncSbac::codeMvd(TComDataCU* cu, uint32_t absPartIdx, int eRefList)
{
- if (cu->getSlice()->getMvdL1ZeroFlag() && eRefList == REF_PIC_LIST_1 && cu->getInterDir(absPartIdx) == 3)
+ if (eRefList == REF_PIC_LIST_1 && cu->getSlice()->getMvdL1ZeroFlag() && cu->getInterDir(absPartIdx) == 3)
{
return;
}
@@ -1911,13 +1864,13 @@
DTRACE_CABAC_T("\n")
}
-void TEncSbac::codeTransformSkipFlags(TComDataCU* cu, uint32_t absPartIdx, uint32_t width, uint32_t height, TextType ttype)
+void TEncSbac::codeTransformSkipFlags(TComDataCU* cu, uint32_t absPartIdx, uint32_t width, TextType ttype)
{
if (cu->getCUTransquantBypass(absPartIdx))
{
return;
}
- if (width != 4 || height != 4)
+ if (width != 4)
{
return;
}
@@ -1998,9 +1951,6 @@
}
pcmSample = cu->getPCMSampleCr() + chromaOffset;
- width = cu->getWidth(absPartIdx) / 2;
- height = cu->getHeight(absPartIdx) / 2;
- sampleBits = cu->getSlice()->getSPS()->getPCMBitDepthChroma();
for (y = 0; y < height; y++)
{
@@ -2150,11 +2100,7 @@
(void)depth;
#endif // if ENC_DEC_TRACE
- if (width > m_slice->getSPS()->getMaxTrSize())
- {
- width = m_slice->getSPS()->getMaxTrSize();
- height = m_slice->getSPS()->getMaxTrSize();
- }
+ assert(width <= m_slice->getSPS()->getMaxTrSize());
// compute number of significant coefficients
uint32_t numSig = TEncEntropy::countNonZeroCoeffs(coeff, width * height);
@@ -2163,7 +2109,7 @@
return;
if (cu->getSlice()->getPPS()->getUseTransformSkip())
{
- codeTransformSkipFlags(cu, absPartIdx, width, height, ttype);
+ codeTransformSkipFlags(cu, absPartIdx, width, ttype);
}
ttype = ttype == TEXT_LUMA ? TEXT_LUMA : TEXT_CHROMA;
@@ -2232,7 +2178,7 @@
const int lastScanSet = scanPosLast >> LOG2_SCAN_SET_SIZE;
uint32_t c1 = 1;
- uint32_t goRiceParam = 0;
+ uint32_t goRiceParam;
int scanPosSig = scanPosLast;
for (int subSet = lastScanSet; subSet >= 0; subSet--)
@@ -2339,9 +2285,9 @@
if (c1 == 0)
{
- baseCtxMod = (ttype == TEXT_LUMA) ? &m_contextModels[OFF_ABS_FLAG_CTX + ctxSet] : &m_contextModels[OFF_ABS_FLAG_CTX + NUM_ABS_FLAG_CTX_LUMA + ctxSet];
if (firstC2FlagIdx != -1)
{
+ baseCtxMod = (ttype == TEXT_LUMA) ? &m_contextModels[OFF_ABS_FLAG_CTX + ctxSet] : &m_contextModels[OFF_ABS_FLAG_CTX + NUM_ABS_FLAG_CTX_LUMA + ctxSet];
uint32_t symbol = absCoeff[firstC2FlagIdx] > 2;
m_binIf->encodeBin(symbol, baseCtxMod[0]);
}
@@ -2366,9 +2312,9 @@
if (absCoeff[idx] >= baseLevel)
{
xWriteCoefRemainExGolomb(absCoeff[idx] - baseLevel, goRiceParam);
- if (absCoeff[idx] > 3 * (1 << goRiceParam))
+ if (goRiceParam < 4 && absCoeff[idx] > (3 << goRiceParam))
{
- goRiceParam = std::min<uint32_t>(goRiceParam + 1, 4);
+ goRiceParam++;
}
}
if (absCoeff[idx] >= 2)
@@ -2483,13 +2429,14 @@
void TEncSbac::estSignificantCoeffGroupMapBit(estBitsSbacStruct* estBitsSbac, TextType ttype)
{
assert((ttype == TEXT_LUMA) || (ttype == TEXT_CHROMA));
- int firstCtx = 0, numCtx = NUM_SIG_CG_FLAG_CTX;
+ const int firstCtx = 0, numCtx = NUM_SIG_CG_FLAG_CTX;
+ const ContextModel * const baseCoeffGroupCtx = &m_contextModels[OFF_SIG_CG_FLAG_CTX + (ttype ? NUM_SIG_CG_FLAG_CTX : 0)];
for (int ctxIdx = firstCtx; ctxIdx < firstCtx + numCtx; ctxIdx++)
{
for (uint32_t bin = 0; bin < 2; bin++)
{
- estBitsSbac->significantCoeffGroupBits[ctxIdx][bin] = sbacGetEntropyBits(m_contextModels[OFF_SIG_CG_FLAG_CTX + ((ttype ? NUM_SIG_CG_FLAG_CTX : 0) + ctxIdx)].m_state, bin);
+ estBitsSbac->significantCoeffGroupBits[ctxIdx][bin] = sbacGetEntropyBits(baseCoeffGroupCtx[ctxIdx].m_state, bin);
}
}
}
@@ -2504,7 +2451,7 @@
{
int firstCtx = 1, numCtx = 8;
- if (X265_MAX(width, height) >= 16)
+ if (width >= 16)
{
firstCtx = (ttype == TEXT_LUMA) ? 21 : 12;
numCtx = (ttype == TEXT_LUMA) ? 6 : 3;
diff -r d6fdfa9f4938 -r 01cde6b30456 source/Lib/TLibEncoder/TEncSbac.h
--- a/source/Lib/TLibEncoder/TEncSbac.h Tue Feb 11 12:57:32 2014 -0600
+++ b/source/Lib/TLibEncoder/TEncSbac.h Wed Feb 12 10:29:42 2014 +0900
@@ -64,8 +64,6 @@
void init(TEncBinCABAC* p) { m_binIf = p; }
- void uninit() { m_binIf = 0; }
-
// Virtual list
void resetEntropy();
void determineCabacInitIdx();
@@ -80,10 +78,6 @@
void setSlice(TComSlice* p) { m_slice = p; }
// SBAC RD
- void resetCoeffCost() { m_coeffCost = 0; }
-
- uint32_t getCoeffCost() { return m_coeffCost; }
-
void load(TEncSbac* scr);
void loadIntraDirModeLuma(TEncSbac* scr);
void store(TEncSbac* dest);
@@ -125,7 +119,6 @@
private:
- void xWriteUnarySymbol(uint32_t symbol, ContextModel* scmModel, int offset);
void xWriteUnaryMaxSymbol(uint32_t symbol, ContextModel* scmModel, int offset, uint32_t maxSymbol);
void xWriteEpExGolomb(uint32_t symbol, uint32_t count);
void xWriteCoefRemainExGolomb(uint32_t symbol, uint32_t ¶m);
@@ -133,16 +126,12 @@
void xCopyFrom(TEncSbac* src);
void xCopyContextsFrom(TEncSbac* src);
- void codeDFFlag(uint32_t /*code*/, const char* /*symbolName*/);
- void codeDFSvlc(int /*code*/, const char* /*symbolName*/);
void xCodeScalingList(TComScalingList* scalingList, uint32_t sizeId, uint32_t listId);
public:
TComSlice* m_slice;
TEncBinCABAC* m_binIf;
- //SBAC RD
- uint32_t m_coeffCost;
//--Adaptive loop filter
@@ -153,7 +142,7 @@
void codeMergeFlag(TComDataCU* cu, uint32_t absPartIdx);
void codeMergeIndex(TComDataCU* cu, uint32_t absPartIdx);
void codeSplitFlag(TComDataCU* cu, uint32_t absPartIdx, uint32_t depth);
- void codeMVPIdx(TComDataCU* cu, uint32_t absPartIdx, int eRefList);
+ void codeMVPIdx(uint32_t symbol);
void codePartSize(TComDataCU* cu, uint32_t absPartIdx, uint32_t depth);
void codePredMode(TComDataCU* cu, uint32_t absPartIdx);
@@ -174,7 +163,7 @@
void codeLastSignificantXY(uint32_t posx, uint32_t posy, int width, int height, TextType ttype, uint32_t scanIdx);
void codeCoeffNxN(TComDataCU* cu, TCoeff* coef, uint32_t absPartIdx, uint32_t width, uint32_t height, uint32_t depth, TextType ttype);
- void codeTransformSkipFlags(TComDataCU* cu, uint32_t absPartIdx, uint32_t width, uint32_t height, TextType ttype);
+ void codeTransformSkipFlags(TComDataCU* cu, uint32_t absPartIdx, uint32_t width, TextType ttype);
// -------------------------------------------------------------------------------------------------------------------
// for RD-optimizatioon
@@ -190,7 +179,6 @@
private:
- uint32_t m_lastQp;
ContextModel m_contextModels[MAX_OFF_CTX_MOD];
};
}
More information about the x265-devel
mailing list