Commit fe7a9e49 authored by Zhipin Deng's avatar Zhipin Deng

JVET_R0052: Remove separate colour plane coding from VVC version 1

parent bec4e310
......@@ -57,7 +57,9 @@ Slice::Slice()
, m_prevIRAPSubpicType ( NAL_UNIT_INVALID )
, 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 )
......@@ -161,7 +163,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;
......@@ -2691,7 +2695,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)
......
......@@ -1274,7 +1274,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
......@@ -1451,8 +1453,10 @@ public:
int getLayerId() const { return m_layerId; }
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]; }
......@@ -2528,7 +2532,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
......@@ -2777,8 +2783,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; }
......
......@@ -51,11 +51,11 @@
#include <cassert>
//########### place macros to be removed in next cycle below this line ###############
//########### place macros to be be kept 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
//########### place macros to be be kept below this line ###############
#define JVET_R0351_HIGH_BIT_DEPTH_SUPPORT 1 // JVET-R0351: high bit depth coding support (syntax changes, no mathematical differences for CTCs)
#define JVET_R0351_HIGH_BIT_DEPTH_ENABLED 0 // JVET-R0351: high bit depth coding enabled (increases accuracies of some calculations, e.g. transforms)
......
......@@ -1306,11 +1306,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
READ_FLAG(uiCode, "ref_pic_resampling_enabled_flag"); pcSPS->setRprEnabledFlag(uiCode);
if (uiCode)
......@@ -1338,7 +1340,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");
......@@ -3247,7 +3253,9 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par
CHECK(pcSlice->getPictureHeaderInSliceHeader() && pps->getWpInfoInPhFlag() == 1, "When sh_picture_header_in_slice_header_flag is equal to 1, wp_info_in_ph_flag shall be equal to 0");
CHECK(pcSlice->getPictureHeaderInSliceHeader() && pps->getQpDeltaInfoInPhFlag() == 1, "When sh_picture_header_in_slice_header_flag is equal to 1, qp_delta_info_in_ph_flag shall be equal to 0");
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
const ChromaFormat chFmt = sps->getChromaFormatIdc();
const uint32_t numValidComp=getNumberValidComponents(chFmt);
......@@ -3510,6 +3518,7 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par
pcSlice->setExplicitScalingListUsed(pcSlice->getPictureHeaderInSliceHeader() ? picHeader->getExplicitScalingListEnabledFlag() : false);
}
#if !JVET_R0052_RM_SEPARATE_COLOUR_PLANE
// 4:4:4 colour plane ID
if( sps->getSeparateColourPlaneFlag() )
{
......@@ -3520,8 +3529,7 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par
{
pcSlice->setColourPlaneId( 0 );
}
#endif
if( pps->getRplInfoInPhFlag() )
{
pcSlice->setRPL0(picHeader->getRPL0());
......
......@@ -1718,7 +1718,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);
......
......@@ -779,6 +779,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 )
{
......@@ -787,6 +788,9 @@ void HLSWriter::codeSPS( const SPS* pcSPS )
}
const uint32_t chromaArrayType = separate_colour_plane_flag ? 0 : format;
#else
const uint32_t chromaArrayType = format;
#endif
WRITE_FLAG(pcSPS->getRprEnabledFlag(), "ref_pic_resampling_enabled_flag");
if (pcSPS->getRprEnabledFlag())
......@@ -2101,12 +2105,13 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice )
WRITE_FLAG(pcSlice->getExplicitScalingListUsed(), "slice_explicit_scaling_list_used_flag");
}
#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