diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 4aceeb7a079025b2c6d2f4fe4da6c8adf11d4e4e..1770d94a113fa149d027d4929009d14c80aba18c 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -62,6 +62,8 @@ #define JVET_R0205 1 // JVET-R0205: Condition presence of inter_layer_ref_pics_present_flag on sps_video_parameter_set_id +#define JVET_R0277_RPL 1 // JVET-R0277: Modified condition for sh_num_ref_idx_active_override_flag, inference for sh_collocated_from_l0_flag equal to 1 for P-slices + #define JVET_R0186_CLEANUP 1 // JVET-R0186 aspect 1: Signal the pps_no_pic_partition_flag ahead in the PPS. #define JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA 1 // Use two separate flags (one for Cb, one for Cr) to replace ph_alf_chroma_idc in PH and sh_alf_chroma_idc in SH diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 56cd2438e39e5b16feda2b20e969a73c71a6702e..e66f797954d5bb9dfa175f3361067af6c6c42076 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -3840,8 +3840,10 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par pcSlice->setNumRefIdx(REF_PIC_LIST_0, 0); pcSlice->setNumRefIdx(REF_PIC_LIST_1, 0); } +#if !JVET_R0277_RPL else { +#endif if ((!pcSlice->isIntra() && pcSlice->getRPL0()->getNumRefEntries() > 1) || (pcSlice->isInterB() && pcSlice->getRPL1()->getNumRefEntries() > 1) ) { @@ -3907,7 +3909,9 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par pcSlice->setNumRefIdx( REF_PIC_LIST_0, pcSlice->isIntra() ? 0 : 1 ); pcSlice->setNumRefIdx( REF_PIC_LIST_1, pcSlice->isInterB() ? 1 : 0 ); } +#if !JVET_R0277_RPL } +#endif if (pcSlice->isInterP() || pcSlice->isInterB()) { @@ -3927,6 +3931,21 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par if ( picHeader->getEnableTMVPFlag() ) { +#if JVET_R0277_RPL + if( pcSlice->getSliceType() == P_SLICE ) + { + pcSlice->setColFromL0Flag( true ); + } + else if( !pps->getRplInfoInPhFlag() && pcSlice->getSliceType() == B_SLICE ) + { + READ_FLAG( uiCode, "collocated_from_l0_flag" ); + pcSlice->setColFromL0Flag( uiCode ); + } + else + { + pcSlice->setColFromL0Flag( picHeader->getPicColFromL0Flag() ); + } +#else if ( !pps->getRplInfoInPhFlag()) { if ( pcSlice->getSliceType() == B_SLICE ) @@ -3943,6 +3962,7 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par { pcSlice->setColFromL0Flag(picHeader->getPicColFromL0Flag()); } +#endif if (!pps->getRplInfoInPhFlag()) { diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index fd3581ebe37f3f92c2095d9362e9669a275fd4d8..c1d318bebd0b283d3f1710de90bcafc2490f3cae 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -2363,8 +2363,10 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice ) } } +#if !JVET_R0277_RPL if( pcSlice->getPPS()->getRplInfoInPhFlag() || !pcSlice->getIdrPicFlag()|| pcSlice->getSPS()->getIDRRefParamListPresent() ) { +#endif //check if numrefidxes match the defaults. If not, override if ((!pcSlice->isIntra() && pcSlice->getRPL0()->getNumRefEntries() > 1) || @@ -2405,7 +2407,9 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice ) pcSlice->setNumRefIdx( REF_PIC_LIST_0, pcSlice->isIntra() ? 0 : 1 ); pcSlice->setNumRefIdx( REF_PIC_LIST_1, pcSlice->isInterB() ? 1 : 0 ); } +#if !JVET_R0277_RPL } +#endif if( !pcSlice->isIntra() )