...
 
Commits (5)
......@@ -558,7 +558,11 @@ static uint32_t getMaxTileRowsByLevel( Level::Name level )
case Level::LEVEL6_1:
case Level::LEVEL6_2:
default:
#if JVET_S0156_LEVEL_DEFINITION
return 22;
#else
return 21;
#endif
}
}
......
......@@ -56,6 +56,24 @@ static const uint64_t MAX_CNFUINT64 = std::numeric_limits<uint64_t>::max();
static const LevelTierFeatures mainLevelTierInfo[] =
{
#if JVET_S0156_LEVEL_DEFINITION
// level, maxlumaps, maxcpb[tier],, maxSlicesPerAu,maxTilesPerAu,cols, maxLumaSr, maxBr[tier],, minCr[tier],,
{ Level::LEVEL1 , 36864, { 350, 0 }, 16, 1, 1, 552960ULL, { 128, 0 }, { 2, 2} },
{ Level::LEVEL2 , 122880, { 1500, 0 }, 16, 1, 1, 3686400ULL, { 1500, 0 }, { 2, 2} },
{ Level::LEVEL2_1, 245760, { 3000, 0 }, 20, 1, 1, 7372800ULL, { 3000, 0 }, { 2, 2} },
{ Level::LEVEL3 , 552960, { 6000, 0 }, 30, 4, 2, 16588800ULL, { 6000, 0 }, { 2, 2} },
{ Level::LEVEL3_1, 983040, { 10000, 0 }, 40, 9, 3, 33177600ULL, { 10000, 0 }, { 2, 2} },
{ Level::LEVEL4 , 2228224, { 12000, 30000 }, 75, 2, 5, 66846720ULL, { 12000, 30000 }, { 4, 4} },
{ Level::LEVEL4_1, 2228224, { 20000, 50000 }, 75, 2, 5, 133693440ULL, { 20000, 50000 }, { 4, 4} },
{ Level::LEVEL5 , 8912896, { 25000, 100000 }, 200, 110, 10, 267386880ULL, { 25000, 100000 }, { 6, 4} },
{ Level::LEVEL5_1, 8912896, { 40000, 160000 }, 200, 110, 10, 534773760ULL, { 40000, 160000 }, { 8, 4} },
{ Level::LEVEL5_2, 8912896, { 60000, 240000 }, 200, 110, 10, 1069547520ULL, { 60000, 240000 }, { 8, 4} },
{ Level::LEVEL6 , 35651584, { 80000, 240000 }, 600, 440, 20, 1069547520ULL, { 60000, 240000 }, { 8, 4} },
{ Level::LEVEL6_1, 35651584, { 120000, 480000 }, 600, 440, 20, 2139095040ULL, { 120000, 480000 }, { 8, 4} },
{ Level::LEVEL6_2, 35651584, { 180000, 800000 }, 600, 440, 20, 4278190080ULL, { 240000, 800000 }, { 8, 4} },
{ Level::LEVEL15_5, MAX_UINT,{ MAX_UINT, MAX_UINT }, MAX_UINT, MAX_UINT, MAX_UINT, MAX_CNFUINT64, {MAX_UINT, MAX_UINT }, { 0, 0} },
{ Level::NONE }
#else
// level , maxlumaps, maxcpb[tier],, maxSlice, tile rows, cols, maxLumaSr, maxBr[tier],, , minCr[tier],,
{ Level::LEVEL1 , 36864, { 350, 0 }, 16, 1, 1, 552960ULL, { 128, 0 }, { 2, 2} },
{ Level::LEVEL2 , 122880, { 1500, 0 }, 16, 1, 1, 3686400ULL, { 1500, 0 }, { 2, 2} },
......@@ -72,6 +90,7 @@ static const LevelTierFeatures mainLevelTierInfo[] =
{ Level::LEVEL6_2, 35651584, { 180000, 800000 }, 600, 22, 20, 4278190080ULL, { 240000, 800000 }, { 8, 4} },
{ Level::LEVEL15_5, MAX_UINT, { MAX_UINT, MAX_UINT }, MAX_UINT, MAX_UINT, MAX_UINT, MAX_CNFUINT64, {MAX_UINT, MAX_UINT }, { 0, 0} },
{ Level::NONE }
#endif
};
static const ProfileFeatures validProfiles[] =
......
......@@ -52,8 +52,13 @@ struct LevelTierFeatures
Level::Name level;
uint32_t maxLumaPs;
uint32_t maxCpb[Level::NUMBER_OF_TIERS]; // in units of CpbVclFactor or CpbNalFactor bits
#if JVET_S0156_LEVEL_DEFINITION
uint32_t maxSlicesPerAu;
uint32_t maxTilesPerAu;
#else
uint32_t maxSliceSegmentsPerPicture;
uint32_t maxTileRows;
#endif
uint32_t maxTileCols;
uint64_t maxLumaSr;
uint32_t maxBr[Level::NUMBER_OF_TIERS]; // in units of BrVclFactor or BrNalFactor bits/s
......
......@@ -314,8 +314,8 @@ public:
#else
: m_nonPackedConstraintFlag (false)
, m_nonProjectedConstraintFlag(false)
, m_noResChangeInClvsConstraintFlag(false)
#endif
, m_noResChangeInClvsConstraintFlag(false)
, m_oneTilePerPicConstraintFlag(false)
, m_picHeaderInSliceHeaderConstraintFlag(false)
, m_oneSlicePerPicConstraintFlag(false)
......
......@@ -87,6 +87,10 @@
#define JVET_S0248_HRD_CLEANUP 1 // JVET-S0248 Aspect7: When bp_alt_cpb_params_present_flag is equal to 1, the value of bp_du_hrd_params_present_flag shall be equal to 0.
#define JVET_S0156_LEVEL_DEFINITION 1 // JVET-S0156: On level definitions
#define JVET_S0064_SEI_BUFFERING_PERIOD_CLEANUP 1 // JVET-S0064: Conditionally signal bp_sublayer_dpb_output_offsets_present_flag
#define JVET_S0185_PROPOSAL2_SEI_CLEANUP 1 // JVET-S0185_PROPOSAL2: Move signalling of syntax element bp_alt_cpb_params_present_flag
#define JVET_S0181_PROPOSAL1 1 // JVET-0181_Proposal1: Conditionally signal bp_sublayer_initial_cpb_removal_delay_present_flag
......
......@@ -731,8 +731,8 @@ void SEIReader::xParseSEIBufferingPeriod(SEIBufferingPeriod& sei, uint32_t paylo
}
#else
sei_read_flag(pDecodedMessageOutputStream, code, "sublayer_initial_cpb_removal_delay_present_flag");
#endif
sei.m_sublayerInitialCpbRemovalDelayPresentFlag = code;
#endif
for (i = (sei.m_sublayerInitialCpbRemovalDelayPresentFlag ? 0 : sei.m_bpMaxSubLayers - 1); i < sei.m_bpMaxSubLayers; i++)
{
for( nalOrVcl = 0; nalOrVcl < 2; nalOrVcl ++ )
......@@ -750,8 +750,20 @@ void SEIReader::xParseSEIBufferingPeriod(SEIBufferingPeriod& sei, uint32_t paylo
}
}
}
#if JVET_S0064_SEI_BUFFERING_PERIOD_CLEANUP
if (sei.m_bpMaxSubLayers-1 > 0)
{
sei_read_flag(pDecodedMessageOutputStream, code, "bp_sublayer_dpb_output_offsets_present_flag");
sei.m_sublayerDpbOutputOffsetsPresentFlag = code;
}
else
{
sei.m_sublayerDpbOutputOffsetsPresentFlag = false;
}
#else
sei_read_flag( pDecodedMessageOutputStream, code, "sublayer_dpb_output_offsets_present_flag" );
sei.m_sublayerDpbOutputOffsetsPresentFlag = code;
#endif
if(sei.m_sublayerDpbOutputOffsetsPresentFlag)
{
for(int i = 0; i < sei.m_bpMaxSubLayers - 1; i++)
......
......@@ -333,7 +333,15 @@ void SEIWriter::xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei)
}
}
}
#if JVET_S0064_SEI_BUFFERING_PERIOD_CLEANUP
if (sei.m_bpMaxSubLayers-1 > 0)
{
WRITE_FLAG(sei.m_sublayerDpbOutputOffsetsPresentFlag, "bp_sublayer_dpb_output_offsets_present_flag");
}
#else
WRITE_FLAG(sei.m_sublayerDpbOutputOffsetsPresentFlag, "sublayer_dpb_output_offsets_present_flag");
#endif
if(sei.m_sublayerDpbOutputOffsetsPresentFlag)
{
for(int i = 0; i < sei.m_bpMaxSubLayers - 1; i++)
......