diff --git a/source/Lib/CommonLib/Contexts.h b/source/Lib/CommonLib/Contexts.h index 33ff4acea7cd665dc0a3319b5e73254c25622167..11d9324ccb3b8b383cbce4041b626f6eded6fa1b 100644 --- a/source/Lib/CommonLib/Contexts.h +++ b/source/Lib/CommonLib/Contexts.h @@ -1130,8 +1130,8 @@ public: TempCtx ( CtxCache* cache, const Ctx& ctx ) : m_ctx( *cache->get() ), m_cache( cache ) { m_ctx = ctx; } TempCtx ( CtxCache* cache, SubCtx&& subCtx ) : m_ctx( *cache->get() ), m_cache( cache ) { m_ctx = std::forward<SubCtx>(subCtx); } ~TempCtx() { m_cache->cache( &m_ctx ); } - const Ctx& operator=( const Ctx& ctx ) { return ( m_ctx = ctx ); } - SubCtx operator=( SubCtx&& subCtx ) { return m_ctx = std::forward<SubCtx>( subCtx ); } + void operator=( const Ctx& ctx ) { m_ctx = ctx ; } + void operator=( SubCtx&& subCtx ) { m_ctx = std::forward<SubCtx>( subCtx ); } operator const Ctx& () const { return m_ctx; } operator Ctx& () { return m_ctx; } private: diff --git a/source/Lib/EncoderLib/CABACWriter.cpp b/source/Lib/EncoderLib/CABACWriter.cpp index eb2141217d494edc0773e5b26fe0e45ac1b8531d..fd150405b40f7c9edba2b648c323125172827350 100644 --- a/source/Lib/EncoderLib/CABACWriter.cpp +++ b/source/Lib/EncoderLib/CABACWriter.cpp @@ -6518,7 +6518,7 @@ void CABACWriter::geo_merge_idx1(const PredictionUnit& pu) #if JVET_AG0112_REGRESSION_BASED_GPM_BLENDING uint64_t CABACWriter::geo_blend_est( const TempCtx& ctxStart, const int flag ) { - getCtx() = ctxStart; + getCtx() = SubCtx(Ctx::GeoBlendFlag,ctxStart); resetBits(); m_BinEncoder.encodeBin( flag, Ctx::GeoBlendFlag() ); @@ -6677,7 +6677,7 @@ uint64_t CABACWriter::geo_mmvdIdx_est(const TempCtx& ctxStart, const int geoMMVD #if JVET_AG0164_AFFINE_GPM uint64_t CABACWriter::geo_affFlag_est(const TempCtx& ctxStart, const int flag, int ctxOffset) { - getCtx() = ctxStart; + getCtx() = SubCtx(Ctx::AffineFlag,ctxStart); resetBits(); m_BinEncoder.encodeBin(flag, Ctx::AffineFlag(ctxOffset)); @@ -6694,7 +6694,7 @@ uint64_t CABACWriter::geoBldFlagEst(const PredictionUnit& pu, const TempCtx& ctx uint64_t CABACWriter::geoBldFlagEst(const TempCtx& ctxStart, const int flag) #endif { - getCtx() = ctxStart; + getCtx() = SubCtx(Ctx::GeoBldFlag,ctxStart); resetBits(); #if JVET_AH0314_ADAPTIVE_GPM_BLENDING_IMPROV int blkSizeSmall = pu.lwidth() < pu.lheight() ? pu.lwidth() : pu.lheight(); diff --git a/source/Lib/EncoderLib/EncAdaptiveLoopFilter.cpp b/source/Lib/EncoderLib/EncAdaptiveLoopFilter.cpp index c45943db0c459d982a5a2a4ee3746fcc643ca348..944ae6daf30388244b9151cea55754bd3cabd6ec 100644 --- a/source/Lib/EncoderLib/EncAdaptiveLoopFilter.cpp +++ b/source/Lib/EncoderLib/EncAdaptiveLoopFilter.cpp @@ -6377,7 +6377,7 @@ void EncAdaptiveLoopFilter::alfEncoderCtb(CodingStructure& cs, AlfParam& alfPar } } - m_CABACEstimator->getCtx() = ctxStart; + m_CABACEstimator->getCtx() = AlfCtx(ctxStart); for (int ctbIdx = 0; ctbIdx < m_numCTUsInPic; ctbIdx++) { @@ -8284,7 +8284,7 @@ void EncAdaptiveLoopFilter::determineControlIdcValues(CodingStructure &cs, const const uint32_t numberOfChromaSamples = std::min<int>(buf->height - yCtu, ctuHeightC) * std::min<int>(buf->width - xCtu, ctuWidthC); const uint32_t thresholdC = (numberOfChromaSamples >> 2); - m_CABACEstimator->getCtx() = ctxBest; + m_CABACEstimator->getCtx() = SubCtx(Ctx::CcAlfFilterControlFlag,ctxBest); ctxStart = SubCtx(Ctx::CcAlfFilterControlFlag, m_CABACEstimator->getCtx()); for (int filterIdx = 0; filterIdx <= MAX_NUM_CC_ALF_FILTERS; filterIdx++) @@ -8303,7 +8303,7 @@ void EncAdaptiveLoopFilter::determineControlIdcValues(CodingStructure &cs, const { ssd = trainingDistortion[filterIdx][ctuIdx]; } - m_CABACEstimator->getCtx() = ctxStart; + m_CABACEstimator->getCtx() = SubCtx(Ctx::CcAlfFilterControlFlag,ctxStart); m_CABACEstimator->resetBits(); const Position lumaPos = Position({ xCtu << getComponentScaleX(compID, cs.pcv->chrFormat), yCtu << getComponentScaleY(compID, cs.pcv->chrFormat) }); @@ -8370,7 +8370,7 @@ void EncAdaptiveLoopFilter::determineControlIdcValues(CodingStructure &cs, const } curTotalRate = prevRate; - m_CABACEstimator->getCtx() = ctxInitial; + m_CABACEstimator->getCtx() = SubCtx(Ctx::CcAlfFilterControlFlag,ctxInitial); m_CABACEstimator->resetBits(); int ctuIdx = 0; for (int y = 0; y < buf->height; y += ctuHeightC) @@ -8394,7 +8394,7 @@ void EncAdaptiveLoopFilter::determineControlIdcValues(CodingStructure &cs, const #endif // restore for next iteration - m_CABACEstimator->getCtx() = ctxInitial; + m_CABACEstimator->getCtx() = SubCtx(Ctx::CcAlfFilterControlFlag,ctxInitial); } std::vector<int> EncAdaptiveLoopFilter::getAvailableCcAlfApsIds(CodingStructure& cs, ComponentID compID) @@ -8655,7 +8655,7 @@ void EncAdaptiveLoopFilter::deriveCcAlfFilter( CodingStructure& cs, ComponentID } } - m_CABACEstimator->getCtx() = ctxStartCcAlfFilterControlFlag; + m_CABACEstimator->getCtx() = SubCtx(Ctx::CcAlfFilterControlFlag,ctxStartCcAlfFilterControlFlag); uint64_t curTotalDistortion = 0; double curTotalRate = 0; diff --git a/source/Lib/EncoderLib/EncSampleAdaptiveOffset.cpp b/source/Lib/EncoderLib/EncSampleAdaptiveOffset.cpp index 117a3a5a2ae3e13a13a448f2d4d4acec0cb363fe..e850b03daddc3ffb75168926810912c7463d2b68 100644 --- a/source/Lib/EncoderLib/EncSampleAdaptiveOffset.cpp +++ b/source/Lib/EncoderLib/EncSampleAdaptiveOffset.cpp @@ -6823,7 +6823,7 @@ void EncSampleAdaptiveOffset::determineCcSaoControlIdc(CodingStructure& cs, cons uint8_t bestSetIdc = 0; uint8_t bestSetIdx = 0; - m_CABACEstimator->getCtx() = ctxBest; + m_CABACEstimator->getCtx() = SubCtx(Ctx::CcSaoControlIdc,ctxBest); ctxStart = SubCtx(Ctx::CcSaoControlIdc, m_CABACEstimator->getCtx()); for (int setIdx = 0; setIdx <= MAX_CCSAO_SET_NUM; setIdx++) @@ -6832,7 +6832,7 @@ void EncSampleAdaptiveOffset::determineCcSaoControlIdc(CodingStructure& cs, cons continue; uint8_t setIdc = ccSaoParam.mapIdxToIdc[setIdx]; - m_CABACEstimator->getCtx() = ctxStart; + m_CABACEstimator->getCtx() = SubCtx(Ctx::CcSaoControlIdc,ctxStart); m_CABACEstimator->resetBits(); const Position lumaPos = Position({ xCtb << getComponentScaleX(compID, cs.pcv->chrFormat), yCtb << getComponentScaleY(compID, cs.pcv->chrFormat) }); @@ -6886,7 +6886,7 @@ void EncSampleAdaptiveOffset::determineCcSaoControlIdc(CodingStructure& cs, cons } curTotalRate = prevRate; - m_CABACEstimator->getCtx() = ctxInitial; + m_CABACEstimator->getCtx() = SubCtx(Ctx::CcSaoControlIdc,ctxInitial); m_CABACEstimator->resetBits(); ctbIdx = 0; for (int yCtb = 0; yCtb < picHeightC; yCtb += ctuHeightC) @@ -6908,7 +6908,7 @@ void EncSampleAdaptiveOffset::determineCcSaoControlIdc(CodingStructure& cs, cons #endif // restore for next iteration - m_CABACEstimator->getCtx() = ctxInitial; + m_CABACEstimator->getCtx() = SubCtx(Ctx::CcSaoControlIdc,ctxInitial); } int EncSampleAdaptiveOffset::lengthUvlc(int uiCode) @@ -7117,7 +7117,7 @@ void EncSampleAdaptiveOffset::deriveCcSaoRDO(CodingStructure& cs, const Componen } } - m_CABACEstimator->getCtx() = ctxStartCcSaoControlFlag; + m_CABACEstimator->getCtx() = SubCtx(Ctx::CcSaoControlIdc,ctxStartCcSaoControlFlag); int64_t curTotalDist = 0; double curTotalRate = 0;