From 376ead2d8ec651c8f2faae71ca71e26104181b36 Mon Sep 17 00:00:00 2001 From: spaluri <seethal.paluri@lge.com> Date: Tue, 19 May 2020 17:49:04 -0700 Subject: [PATCH] JVET-R0184: Wraparound for Subpictures --- source/Lib/CommonLib/Mv.cpp | 13 +++++++++++++ source/Lib/CommonLib/TypeDef.h | 2 ++ source/Lib/DecoderLib/VLCReader.cpp | 10 ++++++++++ 3 files changed, 25 insertions(+) diff --git a/source/Lib/CommonLib/Mv.cpp b/source/Lib/CommonLib/Mv.cpp index 2bfb1333a..1d90a76d5 100644 --- a/source/Lib/CommonLib/Mv.cpp +++ b/source/Lib/CommonLib/Mv.cpp @@ -90,8 +90,21 @@ bool wrapClipMv( Mv& rcMv, const Position& pos, const struct Size& size, const S int iOffset = 8; int iHorMax = ( pps->getPicWidthInLumaSamples() + sps->getMaxCUWidth() - size.width + iOffset - (int)pos.x - 1 ) << iMvShift; int iHorMin = ( -( int ) sps->getMaxCUWidth() - iOffset - ( int ) pos.x + 1 ) << iMvShift; + +#if JVET_R0184_WRAPAROUND_SUBPICS + int iVerMax = ( pps->getPicHeightInLumaSamples() + iOffset - ( int ) pos.y - 1 ) << iMvShift; + int iVerMin = ( -( int ) sps->getMaxCUHeight() - iOffset - ( int ) pos.y + 1 ) << iMvShift; + + const SubPic& curSubPic = pps->getSubPicFromPos( pos ); + if( curSubPic.getTreatedAsPicFlag() ) + { + iVerMax = ( ( curSubPic.getSubPicBottom() + 1 ) + iOffset - ( int ) pos.y - 1 ) << iMvShift; + iVerMin = ( -( int ) sps->getMaxCUHeight() - iOffset - ( ( int ) pos.y - curSubPic.getSubPicTop() ) + 1 ) << iMvShift; + } +#else int iVerMax = ( pps->getPicHeightInLumaSamples() + iOffset - (int)pos.y - 1 ) << iMvShift; int iVerMin = ( -( int ) sps->getMaxCUHeight() - iOffset - ( int ) pos.y + 1 ) << iMvShift; +#endif int mvX = rcMv.getHor(); if(mvX > iHorMax) diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 2f307705e..5d736b580 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -51,6 +51,8 @@ #include <cassert> //########### place macros to be removed in next cycle below this line ############### +#define JVET_R0184_WRAPAROUND_SUBPICS 1 // JVET-R0184: Wraparound for subpictures + #define JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING 1 // JVET-R0078: disable chroma DBF offset signalling #define JVET_R0194_CONSTRAINT_PS_SHARING_REFERENCING 1 // JVET-R0194: Constraint that if slice at layer A refer to PS at layer B, then all OLS that contains layer A must contain layer B as well. diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index d38bc7b5e..137a47ee3 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -1840,6 +1840,16 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS) } #endif +#if JVET_R0184_WRAPAROUND_SUBPICS + if (pcSPS->getWrapAroundEnabledFlag()) + { + for (int i = 0; i < pcSPS->getNumSubPics(); i++) + { + CHECK(pcSPS->getSubPicTreatedAsPicFlag(i) && (pcSPS->getSubPicWidth(i) != (pcSPS->getMaxPicWidthInLumaSamples() + pcSPS->getCTUSize() - 1) / pcSPS->getCTUSize()), "sps_ref_wraparound_enabled_flag cannot be equal to 1 when there is at least one subpicture with SubPicTreatedAsPicFlag equal to 1 and the subpicture’s width is not equal to picture’s width"); + } + } +#endif + READ_FLAG( uiCode, "sps_temporal_mvp_enabled_flag" ); pcSPS->setSPSTemporalMVPEnabledFlag(uiCode); if ( pcSPS->getSPSTemporalMVPEnabledFlag() ) -- GitLab