Skip to content
Snippets Groups Projects
Commit 748e885a authored by Karsten Suehring's avatar Karsten Suehring
Browse files

Merge branch 'S0117-VB-REWRITING' into 'master'

JVET-S0117 Virtual boundary rewriting for subpicture extraction

See merge request jvet/VVCSoftware_VTM!2056
parents bf364ecd 253a61ec
No related branches found
No related tags found
No related merge requests found
......@@ -292,6 +292,47 @@ void BitstreamExtractorApp::xRewriteSPS (SPS &targetSPS, const SPS &sourceSPS, S
conf.setWindowRightOffset(subpicConfWinRightOffset);
conf.setWindowTopOffset(subpicConfWinTopOffset);
conf.setWindowBottomOffset(subpicConfWinBottomOffset);
#if JVET_S0117_VB // Virtual boundaries rewriting
if (sourceSPS.getVirtualBoundariesEnabledFlag() && sourceSPS.getVirtualBoundariesPresentFlag())
{
targetSPS.setNumVerVirtualBoundaries(0);
for (int i = 0; i < sourceSPS.getNumVerVirtualBoundaries() ; i ++)
{
int subPicLeftX = subPic.getSubPicCtuTopLeftX() * sourceSPS.getCTUSize();
int subPicRightX = (subPic.getSubPicCtuTopLeftX() + subPic.getSubPicWidthInCTUs()) * sourceSPS.getCTUSize();
if (subPicRightX > sourceSPS.getMaxPicWidthInLumaSamples())
{
subPicRightX = sourceSPS.getMaxPicWidthInLumaSamples();
}
if ( sourceSPS.getVirtualBoundariesPosX(i) > subPicLeftX && sourceSPS.getVirtualBoundariesPosX(i) < subPicRightX)
{
targetSPS.setVirtualBoundariesPosX(targetSPS.getNumVerVirtualBoundaries(), sourceSPS.getVirtualBoundariesPosX(i) - subPicLeftX);
targetSPS.setNumVerVirtualBoundaries(targetSPS.getNumVerVirtualBoundaries() + 1);
}
}
targetSPS.setNumHorVirtualBoundaries(0);
for (int i = 0; i < sourceSPS.getNumHorVirtualBoundaries(); i++)
{
int subPicTopY = subPic.getSubPicCtuTopLeftY() * sourceSPS.getCTUSize();
int subPicBottomY = (subPic.getSubPicCtuTopLeftY() + subPic.getSubPicHeightInCTUs()) * sourceSPS.getCTUSize();
if (subPicBottomY > sourceSPS.getMaxPicHeightInLumaSamples())
{
subPicBottomY = sourceSPS.getMaxPicHeightInLumaSamples();
}
if (sourceSPS.getVirtualBoundariesPosY(i) > subPicTopY && sourceSPS.getVirtualBoundariesPosY(i) < subPicBottomY)
{
targetSPS.setVirtualBoundariesPosY(targetSPS.getNumHorVirtualBoundaries(), sourceSPS.getVirtualBoundariesPosY(i) - subPicTopY);
targetSPS.setNumHorVirtualBoundaries(targetSPS.getNumHorVirtualBoundaries() + 1);
}
}
if (targetSPS.getNumVerVirtualBoundaries() == 0 && targetSPS.getNumHorVirtualBoundaries() == 0)
{
targetSPS.setVirtualBoundariesEnabledFlag(0);
}
}
#endif
}
void BitstreamExtractorApp::xRewritePPS(PPS &targetPPS, const PPS &sourcePPS, const SPS &sourceSPS, SubPic &subPic)
......@@ -307,7 +348,7 @@ void BitstreamExtractorApp::xRewritePPS(PPS &targetPPS, const PPS &sourcePPS, co
// picture size
targetPPS.setPicWidthInLumaSamples(subPic.getSubPicWidthInLumaSample());
targetPPS.setPicHeightInLumaSamples(subPic.getSubPicHeightInLumaSample());
// todo: Conformance window
// todo: Conformance window (conf window rewriting is not needed per JVET-S0117)
int subWidthC = SPS::getWinUnitX(sourceSPS.getChromaFormatIdc());
int subHeightC = SPS::getWinUnitY(sourceSPS.getChromaFormatIdc());
......
......@@ -73,6 +73,8 @@
// JVET-S0158 #4c: Insert SEI NAL units to directly contain those SEI messages that were scalable-nested HRD-related SEI messages that apply to the output bitstream, and remove their original container SEI NAL units from the output bitstream. When the target OLS includes only one layer, apply the same for scalable-nested non-HRD-related SEI messages.
#define JVET_S0117_VB 1 // sub-picture extraction VB rewriting
//########### place macros to be be kept below this line ###############
#define GDR_ENABLED 1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment