diff --git a/source/Lib/DecoderLib/DecCu.cpp b/source/Lib/DecoderLib/DecCu.cpp index 051f4b2495e9564e7311f5321b5028c1ab778735..88adc04e6f834a4e8f65605dee16344a4b23982e 100644 --- a/source/Lib/DecoderLib/DecCu.cpp +++ b/source/Lib/DecoderLib/DecCu.cpp @@ -214,8 +214,11 @@ void DecCu::xIntraRecBlk( TransformUnit& tu, const ComponentID compID ) } #if JVET_M0427_INLOOP_RESHAPER const Slice &slice = *cs.slice; +#if JVET_M0483_IBC bool flag = slice.getReshapeInfo().getUseSliceReshaper() && (slice.isIntra() || (!slice.isIntra() && m_pcReshape->getCTUFlag())); - +#else + bool flag = slice.getReshapeInfo().getUseSliceReshaper() && (slice.isIntra() || (!slice.isIntra() && m_pcReshape->getCTUFlag()) || (slice.getSliceType() == P_SLICE && slice.getSPS()->getSpsNext().getIBCMode())); +#endif if (flag && slice.getReshapeInfo().getSliceReshapeChromaAdj() && (compID != COMPONENT_Y)) { const Area area = tu.Y().valid() ? tu.Y() : Area(recalcPosition(tu.chromaFormat, tu.chType, CHANNEL_TYPE_LUMA, tu.blocks[tu.chType].pos()), recalcSize(tu.chromaFormat, tu.chType, CHANNEL_TYPE_LUMA, tu.blocks[tu.chType].size())); @@ -274,7 +277,11 @@ void DecCu::xIntraRecBlk( TransformUnit& tu, const ComponentID compID ) CompArea tmpArea(COMPONENT_Y, area.chromaFormat, Position(0, 0), area.size()); PelBuf tmpPred; #endif +#if JVET_M0483_IBC if (slice.getReshapeInfo().getUseSliceReshaper() && (m_pcReshape->getCTUFlag() || slice.isIntra()) && compID == COMPONENT_Y) +#else + if (slice.getReshapeInfo().getUseSliceReshaper() && (m_pcReshape->getCTUFlag() || slice.isIntra() || (slice.getSliceType() == P_SLICE && slice.getSPS()->getSpsNext().getIBCMode())) && compID == COMPONENT_Y) +#endif { #if REUSE_CU_RESULTS { @@ -293,7 +300,11 @@ void DecCu::xIntraRecBlk( TransformUnit& tu, const ComponentID compID ) pReco.copyFrom( piPred ); #endif #if JVET_M0427_INLOOP_RESHAPER +#if JVET_M0483_IBC if (slice.getReshapeInfo().getUseSliceReshaper() && (m_pcReshape->getCTUFlag() || slice.isIntra()) && compID == COMPONENT_Y) +#else + if (slice.getReshapeInfo().getUseSliceReshaper() && (m_pcReshape->getCTUFlag() || slice.isIntra() || (slice.getSliceType() == P_SLICE && slice.getSPS()->getSpsNext().getIBCMode())) && compID == COMPONENT_Y) +#endif { #if REUSE_CU_RESULTS { diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp index bf47465199ff7104e6e685ac94a2fec34dce6733..3f53a84df6240aa79f39db05785d756d3bedb22d 100644 --- a/source/Lib/DecoderLib/DecLib.cpp +++ b/source/Lib/DecoderLib/DecLib.cpp @@ -1277,7 +1277,11 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl { m_cReshaper.setReshapeFlag(false); } +#if JVET_M0483_IBC if ((pcSlice->getSliceType() == I_SLICE) && m_cReshaper.getSliceReshaperInfo().getUseSliceReshaper()) +#else + if ((pcSlice->getSliceType() == I_SLICE || (pcSlice->getSliceType() == P_SLICE && pcSlice->getSPS()->getSpsNext().getIBCMode())) && m_cReshaper.getSliceReshaperInfo().getUseSliceReshaper()) +#endif { m_cReshaper.setCTUFlag(false); m_cReshaper.setRecReshaped(true); diff --git a/source/Lib/EncoderLib/EncGOP.cpp b/source/Lib/EncoderLib/EncGOP.cpp index 91d4dbd25f2e2bf3ece823f35add70ffdcc4b7a7..abcd1c40d8ef50bf8cedf69d1bd1bd4d7a2ac8cd 100644 --- a/source/Lib/EncoderLib/EncGOP.cpp +++ b/source/Lib/EncoderLib/EncGOP.cpp @@ -2205,18 +2205,29 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic, if (m_pcCfg->getReshapeSignalType() == RESHAPE_SIGNAL_PQ) { +#if JVET_M0483_IBC m_pcReshaper->preAnalyzerHDR(pcPic, pcSlice->getSliceType(), m_pcCfg->getReshapeCW(), m_pcCfg->getDualITree()); +#else + m_pcReshaper->preAnalyzerHDR(pcPic, pcSlice->getSliceType(), m_pcCfg->getReshapeCW(), m_pcCfg->getDualITree(), m_pcCfg->getIBCMode()); +#endif } else if (m_pcCfg->getReshapeSignalType() == RESHAPE_SIGNAL_SDR) { +#if JVET_M0483_IBC m_pcReshaper->preAnalyzerSDR(pcPic, pcSlice->getSliceType(), m_pcCfg->getReshapeCW(), m_pcCfg->getDualITree()); +#else + m_pcReshaper->preAnalyzerSDR(pcPic, pcSlice->getSliceType(), m_pcCfg->getReshapeCW(), m_pcCfg->getDualITree(), m_pcCfg->getIBCMode()); +#endif } else { THROW("Reshaper for signal other than PQ and SDR currently not defined!"); } - +#if JVET_M0483_IBC if (pcSlice->getSliceType() == I_SLICE ) +#else + if (pcSlice->getSliceType() == I_SLICE || (pcSlice->getSliceType() == P_SLICE && m_pcCfg->getIBCMode())) +#endif { if (m_pcCfg->getReshapeSignalType() == RESHAPE_SIGNAL_PQ) { diff --git a/source/Lib/EncoderLib/EncReshape.cpp b/source/Lib/EncoderLib/EncReshape.cpp index e7c8dcd90bef92e3cb0c9c365f2100fefd8dcd85..e9be72f9f41d4b4bc9438b83af03669f57e52102 100644 --- a/source/Lib/EncoderLib/EncReshape.cpp +++ b/source/Lib/EncoderLib/EncReshape.cpp @@ -107,7 +107,11 @@ void EncReshape::destroy() \param pcPic describe pointer of current coding picture \param sliceType describe the slice type */ +#if JVET_M0483_IBC void EncReshape::preAnalyzerHDR(Picture *pcPic, const SliceType sliceType, const ReshapeCW& reshapeCW, bool isDualT) +#else +void EncReshape::preAnalyzerHDR(Picture *pcPic, const SliceType sliceType, const ReshapeCW& reshapeCW, bool isDualT, bool isIBC) +#endif { if (m_lumaBD >= 10) { @@ -119,10 +123,18 @@ void EncReshape::preAnalyzerHDR(Picture *pcPic, const SliceType sliceType, const } else { +#if JVET_M0483_IBC if (sliceType == I_SLICE ) { m_sliceReshapeInfo.sliceReshaperModelPresentFlag = true; } +#else + if (sliceType == I_SLICE || (sliceType == P_SLICE && isIBC)) { m_sliceReshapeInfo.sliceReshaperModelPresentFlag = true; } +#endif else { m_sliceReshapeInfo.sliceReshaperModelPresentFlag = false; } } +#if JVET_M0483_IBC if (sliceType == I_SLICE && isDualT) { m_sliceReshapeInfo.enableChromaAdj = 0; } +#else + if ((sliceType == I_SLICE || (sliceType == P_SLICE && isIBC)) && isDualT) { m_sliceReshapeInfo.enableChromaAdj = 0; } +#endif else { m_sliceReshapeInfo.enableChromaAdj = 1; } } else @@ -138,14 +150,21 @@ void EncReshape::preAnalyzerHDR(Picture *pcPic, const SliceType sliceType, const \param sliceType describe the slice type \param reshapeCW describe some input info */ +#if JVET_M0483_IBC void EncReshape::preAnalyzerSDR(Picture *pcPic, const SliceType sliceType, const ReshapeCW& reshapeCW, bool isDualT) +#else +void EncReshape::preAnalyzerSDR(Picture *pcPic, const SliceType sliceType, const ReshapeCW& reshapeCW, bool isDualT, bool isIBC) +#endif { m_sliceReshapeInfo.sliceReshaperModelPresentFlag = true; m_sliceReshapeInfo.sliceReshaperEnableFlag = true; int modIP = pcPic->getPOC() - pcPic->getPOC() / reshapeCW.rspFpsToIp * reshapeCW.rspFpsToIp; - +#if JVET_M0483_IBC if (sliceType == I_SLICE || (reshapeCW.rspIntraPeriod == -1 && modIP == 0)) +#else + if (sliceType == I_SLICE || (reshapeCW.rspIntraPeriod == -1 && modIP == 0) || (sliceType == P_SLICE && isIBC)) +#endif { if (m_sliceReshapeInfo.sliceReshaperModelPresentFlag == true) { @@ -460,7 +479,11 @@ void EncReshape::preAnalyzerSDR(Picture *pcPic, const SliceType sliceType, const } m_chromaAdj = m_sliceReshapeInfo.enableChromaAdj; +#if JVET_M0483_IBC if (sliceType == I_SLICE && isDualT) +#else + if ((sliceType == I_SLICE || (sliceType == P_SLICE && isIBC)) && isDualT) +#endif { m_sliceReshapeInfo.enableChromaAdj = 0; } diff --git a/source/Lib/EncoderLib/EncReshape.h b/source/Lib/EncoderLib/EncReshape.h index 64c9540c9662effbfd00da413657b57fa08020fd..81fc6a0b912f85858bfa820b503694e9f85f0b81 100644 --- a/source/Lib/EncoderLib/EncReshape.h +++ b/source/Lib/EncoderLib/EncReshape.h @@ -105,9 +105,13 @@ public: bool getSrcReshaped() { return m_srcReshaped; } void setSrcReshaped(bool b) { m_srcReshaped = b; } - +#if JVET_M0483_IBC void preAnalyzerSDR(Picture *pcPic, const SliceType sliceType, const ReshapeCW& reshapeCW, bool isDualT); void preAnalyzerHDR(Picture *pcPic, const SliceType sliceType, const ReshapeCW& reshapeCW, bool isDualT); +#else + void preAnalyzerSDR(Picture *pcPic, const SliceType sliceType, const ReshapeCW& reshapeCW, bool isDualT, bool isIBC); + void preAnalyzerHDR(Picture *pcPic, const SliceType sliceType, const ReshapeCW& reshapeCW, bool isDualT, bool isIBC); +#endif void bubbleSortDsd(double *array, int * idx, int n); void swap(int *xp, int *yp) { int temp = *xp; *xp = *yp; *yp = temp; } void swap(double *xp, double *yp) { double temp = *xp; *xp = *yp; *yp = temp; } diff --git a/source/Lib/EncoderLib/IntraSearch.cpp b/source/Lib/EncoderLib/IntraSearch.cpp index 2bfc52a97d057b477f1c8154db1e4dc355b00005..648f5042c0a4acd7a009b5c71769ae65fca662f6 100644 --- a/source/Lib/EncoderLib/IntraSearch.cpp +++ b/source/Lib/EncoderLib/IntraSearch.cpp @@ -1807,7 +1807,11 @@ void IntraSearch::xIntraCodingTUBlock(TransformUnit &tu, const ComponentID &comp #if JVET_M0427_INLOOP_RESHAPER const Slice &slice = *cs.slice; +#if JVET_M0483_IBC bool flag = slice.getReshapeInfo().getUseSliceReshaper() && (slice.isIntra() || (!slice.isIntra() && m_pcReshape->getCTUFlag())); +#else + bool flag = slice.getReshapeInfo().getUseSliceReshaper() && (slice.isIntra() || (!slice.isIntra() && m_pcReshape->getCTUFlag()) || (slice.getSliceType() == P_SLICE && slice.getSPS()->getSpsNext().getIBCMode())); +#endif if (flag && slice.getReshapeInfo().getSliceReshapeChromaAdj() && isChroma(compID)) { const Area area = tu.Y().valid() ? tu.Y() : Area(recalcPosition(tu.chromaFormat, tu.chType, CHANNEL_TYPE_LUMA, tu.blocks[tu.chType].pos()), recalcSize(tu.chromaFormat, tu.chType, CHANNEL_TYPE_LUMA, tu.blocks[tu.chType].size()));