Commit f9a9ec4f authored by Zhipin Deng's avatar Zhipin Deng

JVET_R0052: Remove separate colour plane coding from VVC version 1

parent da3d6fea
......@@ -61,7 +61,9 @@ Slice::Slice()
#endif
, m_rpl0Idx ( -1 )
, m_rpl1Idx ( -1 )
#if !JVET_R0052_RM_SEPARATE_COLOUR_PLANE
, m_colourPlaneId ( 0 )
#endif
, m_eNalUnitType ( NAL_UNIT_CODED_SLICE_IDR_W_RADL )
, m_pictureHeaderInSliceHeader ( false )
, m_eSliceType ( I_SLICE )
......@@ -167,7 +169,9 @@ void Slice::initSlice()
m_aiNumRefIdx[i] = 0;
}
m_colFromL0Flag = true;
#if !JVET_R0052_RM_SEPARATE_COLOUR_PLANE
m_colourPlaneId = 0;
#endif
m_colRefIdx = 0;
m_lmcsEnabledFlag = 0;
m_explicitScalingListUsed = 0;
......@@ -2922,7 +2926,9 @@ SPS::SPS()
, m_SBT ( false )
, m_ISP ( false )
, m_chromaFormatIdc (CHROMA_420)
#if !JVET_R0052_RM_SEPARATE_COLOUR_PLANE
, m_separateColourPlaneFlag ( 0 )
#endif
, m_uiMaxTLayers ( 1)
, m_ptlDpbHrdParamsPresentFlag (1)
, m_SubLayerDpbParamsFlag (0)
......
......@@ -1348,7 +1348,9 @@ private:
bool m_SBT;
bool m_ISP;
ChromaFormat m_chromaFormatIdc;
#if !JVET_R0052_RM_SEPARATE_COLOUR_PLANE
bool m_separateColourPlaneFlag; //!< separate colour plane flag
#endif
uint32_t m_uiMaxTLayers; // maximum number of temporal layers
......@@ -1546,8 +1548,10 @@ public:
#endif
ChromaFormat getChromaFormatIdc () const { return m_chromaFormatIdc; }
void setChromaFormatIdc (ChromaFormat i) { m_chromaFormatIdc = i; }
#if !JVET_R0052_RM_SEPARATE_COLOUR_PLANE
void setSeparateColourPlaneFlag ( bool b ) { m_separateColourPlaneFlag = b; }
bool getSeparateColourPlaneFlag () const { return m_separateColourPlaneFlag; }
#endif
static int getWinUnitX (int chromaFormatIdc) { CHECK(chromaFormatIdc < 0 || chromaFormatIdc >= NUM_CHROMA_FORMAT, "Invalid chroma format parameter"); return m_winUnitX[chromaFormatIdc]; }
static int getWinUnitY (int chromaFormatIdc) { CHECK(chromaFormatIdc < 0 || chromaFormatIdc >= NUM_CHROMA_FORMAT, "Invalid chroma format parameter"); return m_winUnitY[chromaFormatIdc]; }
......@@ -2695,7 +2699,9 @@ private:
ReferencePictureList m_localRPL1; //< RPL for L1 when present in slice header
int m_rpl0Idx; //< index of used RPL in the SPS or -1 for local RPL in the slice header
int m_rpl1Idx; //< index of used RPL in the SPS or -1 for local RPL in the slice header
#if !JVET_R0052_RM_SEPARATE_COLOUR_PLANE
int m_colourPlaneId; //!< 4:4:4 colour plane ID
#endif
NalUnitType m_eNalUnitType; ///< Nal unit type for the slice
bool m_pictureHeaderInSliceHeader;
uint32_t m_nuhLayerId; ///< Nal unit layer id
......@@ -2954,8 +2960,10 @@ public:
bool isPocRestrictedByDRAP( int poc, bool precedingDRAPinDecodingOrder );
bool isPOCInRefPicList( const ReferencePictureList *rpl, int poc );
void checkConformanceForDRAP( uint32_t temporalId );
#if !JVET_R0052_RM_SEPARATE_COLOUR_PLANE
void setColourPlaneId( int id ) { m_colourPlaneId = id; }
int getColourPlaneId() const { return m_colourPlaneId; }
#endif
void setLambdas( const double lambdas[MAX_NUM_COMPONENT] ) { for (int component = 0; component < MAX_NUM_COMPONENT; component++) m_lambdas[component] = lambdas[component]; }
const double* getLambdas() const { return m_lambdas; }
......
......@@ -52,6 +52,8 @@
//########### place macros to be removed in next cycle below this line ###############
#define JVET_R0052_RM_SEPARATE_COLOUR_PLANE 1 // JVET_R0052: Remove separate colour plane coding from VVC version 1
#define JVET_Q0280_CONSTRAINT_ON_VPS_ID 1 // JVET-Q0280: Same VPS ID value across layers
#define JVET_R0042_SUBPIC_CHECK 1 // JVET_R0042: SubPicture types related constraints
......
......@@ -1441,11 +1441,13 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS)
pcSPS->setGDREnabledFlag(uiCode);
READ_CODE(2, uiCode, "chroma_format_idc"); pcSPS->setChromaFormatIdc( ChromaFormat(uiCode) );
#if !JVET_R0052_RM_SEPARATE_COLOUR_PLANE
if( pcSPS->getChromaFormatIdc() == CHROMA_444 )
{
READ_FLAG( uiCode, "separate_colour_plane_flag"); CHECK(uiCode != 0, "separate_colour_plane_flag shall be equal to 0");
pcSPS->setSeparateColourPlaneFlag( uiCode != 0 );
}
#endif
#if JVET_R0058
READ_FLAG(uiCode, "ref_pic_resampling_enabled_flag"); pcSPS->setRprEnabledFlag(uiCode);
......@@ -1477,7 +1479,11 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS)
READ_UVLC(uiCode, "sps_conf_win_top_offset"); conf.setWindowTopOffset(uiCode);
READ_UVLC(uiCode, "sps_conf_win_bottom_offset"); conf.setWindowBottomOffset(uiCode);
}
#if !JVET_R0052_RM_SEPARATE_COLOUR_PLANE
const uint32_t chromaArrayType = (int) pcSPS->getSeparateColourPlaneFlag() ? 0 : pcSPS->getChromaFormatIdc();
#else
const uint32_t chromaArrayType = (int) pcSPS->getChromaFormatIdc();
#endif
READ_CODE(2, uiCode, "sps_log2_ctu_size_minus5"); pcSPS->setCTUSize(1 << (uiCode + 5));
CHECK(uiCode > 2, "sps_log2_ctu_size_minus5 must be less than or equal to 2");
......@@ -3878,7 +3884,9 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par
#endif
#if JVET_R0202_WHEN_PH_IN_SH_NO_SUBPIC_SEPARATE_COLOR
CHECK(pcSlice->getPictureHeaderInSliceHeader() && sps->getSubPicInfoPresentFlag() == 1, "When sps_subpic_info_present_flag is equal to 1, the value of sh_picture_header_in_slice_header_flag shall be equal to 0");
#if !JVET_R0052_RM_SEPARATE_COLOUR_PLANE
CHECK(pcSlice->getPictureHeaderInSliceHeader() && sps->getSeparateColourPlaneFlag() == 1, "when separate_colour_plane_flag is equal to 1, the value of picture_header_in_slice_header_flag shall be equal to 0");
#endif
#endif
const ChromaFormat chFmt = sps->getChromaFormatIdc();
......@@ -4193,6 +4201,7 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par
}
#endif
#if !JVET_R0052_RM_SEPARATE_COLOUR_PLANE
// 4:4:4 colour plane ID
if( sps->getSeparateColourPlaneFlag() )
{
......@@ -4203,8 +4212,7 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par
{
pcSlice->setColourPlaneId( 0 );
}
#endif
if( pps->getRplInfoInPhFlag() )
{
pcSlice->setRPL0(picHeader->getRPL0());
......
......@@ -1823,7 +1823,11 @@ void EncLib::xInitPPS(PPS &pps, const SPS &sps)
{
chromaDbfOffsetNotSameAsLuma = false;
}
#if !JVET_R0052_RM_SEPARATE_COLOUR_PLANE
const uint32_t chromaArrayType = (int)sps.getSeparateColourPlaneFlag() ? 0 : sps.getChromaFormatIdc();
#else
const uint32_t chromaArrayType = (int)sps.getChromaFormatIdc();
#endif
if( ( chromaArrayType != CHROMA_400 ) && ( chromaQPOffsetNotZero || chromaDbfOffsetNotSameAsLuma ) )
{
pps.setPPSChromaToolFlag(true);
......
......@@ -886,6 +886,7 @@ void HLSWriter::codeSPS( const SPS* pcSPS )
WRITE_CODE(int(pcSPS->getChromaFormatIdc ()), 2, "chroma_format_idc");
const ChromaFormat format = pcSPS->getChromaFormatIdc();
#if !JVET_R0052_RM_SEPARATE_COLOUR_PLANE
const uint32_t separate_colour_plane_flag = pcSPS->getSeparateColourPlaneFlag();
if( format == CHROMA_444 )
{
......@@ -894,6 +895,9 @@ void HLSWriter::codeSPS( const SPS* pcSPS )
}
const uint32_t chromaArrayType = separate_colour_plane_flag ? 0 : format;
#else
const uint32_t chromaArrayType = format;
#endif
#if JVET_R0058
WRITE_FLAG(pcSPS->getRprEnabledFlag(), "ref_pic_resampling_enabled_flag");
......@@ -2521,12 +2525,13 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice )
}
#endif
#if !JVET_R0052_RM_SEPARATE_COLOUR_PLANE
// 4:4:4 colour plane ID
if( pcSlice->getSPS()->getSeparateColourPlaneFlag() )
{
WRITE_CODE( pcSlice->getColourPlaneId(), 2, "colour_plane_id" );
}
#endif
if( !pcSlice->getPPS()->getRplInfoInPhFlag() && (!pcSlice->getIdrPicFlag() || pcSlice->getSPS()->getIDRRefParamListPresent()))
{
//Write L0 related syntax elements
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment