diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 05325441f3e6f341dffebdcb1832311902a84dc4..451720415ff08b8d97660e39b08ffeefd5ce56d5 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -3004,6 +3004,13 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag picHeader->setDisProfFlag(0); } +#if JVET_Q0819_PH_CHANGES + if( (pps->getUseWP() || pps->getWPBiPred()) && pps->getWpInfoInPhFlag() ) + { + parsePredWeightTable(picHeader, sps); + } +#endif + #if !JVET_Q0806 // triangle merge candidate list size if (sps->getUseTriangle() && picHeader->getMaxNumMergeCand() >= 2) @@ -3073,13 +3080,6 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag picHeader->setMaxNumIBCMergeCand(0); } -#if JVET_Q0819_PH_CHANGES - if ((pps->getUseWP() || pps->getWPBiPred()) && pps->getWpInfoInPhFlag()) - { - parsePredWeightTable(picHeader, sps); - } -#endif - #if JVET_Q0819_PH_CHANGES if (pps->getQpDeltaInfoInPhFlag()) { @@ -3929,6 +3929,8 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par #if JVET_Q0819_PH_CHANGES if (pps->getWpInfoInPhFlag()) { + CHECK(pcSlice->getNumRefIdx(REF_PIC_LIST_0) > picHeader->getNumL0Weights(), "ERROR: Number of active reference picture L0 is greater than the number of weighted prediction signalled in Picture Header"); + CHECK(pcSlice->getNumRefIdx(REF_PIC_LIST_1) > picHeader->getNumL1Weights(), "ERROR: Number of active reference picture L1 is greater than the number of weighted prediction signalled in Picture Header"); pcSlice->setWpScaling(picHeader->getWpScalingAll()); } else @@ -4646,6 +4648,8 @@ void HLSyntaxReader::parsePredWeightTable(PicHeader *picHeader, const SPS *sps) uint32_t numLxWeights; READ_UVLC(numLxWeights, "num_l0_weights"); + picHeader->setNumL0Weights(numLxWeights); + picHeader->setNumL1Weights(0); bool moreSyntaxToBeParsed = true; for (int numRef = 0; numRef < NUM_REF_PIC_LIST_01 && moreSyntaxToBeParsed; numRef++) @@ -4751,6 +4755,7 @@ void HLSyntaxReader::parsePredWeightTable(PicHeader *picHeader, const SPS *sps) { READ_UVLC(numLxWeights, "num_l1_weights"); moreSyntaxToBeParsed = (numLxWeights == 0) ? false : true; + picHeader->setNumL1Weights(numLxWeights); } } CHECK(totalSignalledWeightFlags > 24, "Too many weight flag signalled"); diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index 2ad1b2d30b1b2748340879526c7e58f0e0b11a40..a831ddb176fd7a185f1db234bca4b8e832b2f130 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -2139,6 +2139,13 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader ) picHeader->setDisProfFlag(0); } +#if JVET_Q0819_PH_CHANGES + if ((pps->getUseWP() || pps->getWPBiPred()) && pps->getWpInfoInPhFlag()) + { + xCodePredWeightTable(picHeader, sps); + } +#endif + #if !JVET_Q0806 // triangle merge candidate list size if (sps->getUseTriangle() && picHeader->getMaxNumMergeCand() >= 2) @@ -2187,13 +2194,6 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader ) WRITE_UVLC(IBC_MRG_MAX_NUM_CANDS - picHeader->getMaxNumIBCMergeCand(), "pic_six_minus_max_num_ibc_merge_cand"); } -#if JVET_Q0819_PH_CHANGES - if ((pps->getUseWP() || pps->getWPBiPred()) && pps->getWpInfoInPhFlag()) - { - xCodePredWeightTable(picHeader, sps); - } -#endif - #if JVET_Q0819_PH_CHANGES if (pps->getQpDeltaInfoInPhFlag()) {