From c83e1672d075d0c7cc9274c41cdeaf336021f5bd Mon Sep 17 00:00:00 2001 From: biaowang <biao.wang@huawei.com> Date: Sat, 28 Mar 2020 14:12:49 +0100 Subject: [PATCH] fixTicket983: rect_slice_flag signaling --- source/Lib/CommonLib/TypeDef.h | 2 ++ source/Lib/DecoderLib/VLCReader.cpp | 13 ++++++++++++- source/Lib/EncoderLib/VLCWriter.cpp | 7 +++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 1c7b98b412..a71731ede7 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -58,6 +58,8 @@ #define JVET_Q0371_DEBLOCKING_CLEANUP 1 //JVET_Q0371: cleanup on deblocking across subpicture boundaries +#define JVET_Q0289_BUGFIX_RECT_SLICE_FLAG 1 //JVET-Q0289: If NumTilesInPic is equal to 1, don't signal the rect_slice_flag and infer its value to be 1. + #define CABAC_RETRAIN 1 // CABAC retraining based on VTM8rc1 #define JVET_Q0210_SUBPIC_VIRTUAL_BOUNDARY_CONSTRAINT 1 // JVET-Q0210 (aspect 7): when subpicture signalling is present, virtual boundaries if present shall be in the SPS. diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 4f6d7f067a..bdd78d2487 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -533,9 +533,20 @@ void HLSyntaxReader::parsePPS( PPS* pcPPS ) #endif } pcPPS->initTiles(); - // rectangular slice signalling +#if JVET_Q0289_BUGFIX_RECT_SLICE_FLAG + if (pcPPS->getNumTiles() > 1) + { + READ_CODE(1, uiCode, "rect_slice_flag"); + } + else + { + uiCode = 1; + } + pcPPS->setRectSliceFlag(uiCode == 1); +#else READ_CODE(1, uiCode, "rect_slice_flag"); pcPPS->setRectSliceFlag( uiCode == 1 ); +#endif if (pcPPS->getRectSliceFlag()) { READ_FLAG(uiCode, "single_slice_per_subpic_flag"); pcPPS->setSingleSlicePerSubPicFlag(uiCode == 1); diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index 1b6652af2e..1837ea1346 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -333,7 +333,14 @@ void HLSWriter::codePPS( const PPS* pcPPS ) } // rectangular slice signalling +#if JVET_Q0289_BUGFIX_RECT_SLICE_FLAG + if (pcPPS->getNumTiles() > 1) + { + WRITE_FLAG(pcPPS->getRectSliceFlag() ? 1 : 0, "rect_slice_flag"); + } +#else WRITE_FLAG( pcPPS->getRectSliceFlag( ) ? 1 : 0, "rect_slice_flag"); +#endif if (pcPPS->getRectSliceFlag()) { WRITE_FLAG(pcPPS->getSingleSlicePerSubPicFlag( ) ? 1 : 0, "single_slice_per_subpic_flag"); -- GitLab