Skip to content
Snippets Groups Projects
Commit a2e8f917 authored by Frank Bossen's avatar Frank Bossen
Browse files

Merge branch 'Debug_tileIdx_subpic_extraction' into 'master'

Ticket #1192: Bug fixes for tile_idx_delta in subpicture extraction

See merge request jvet/VVCSoftware_VTM!1760
parents 95b0063e 577447a8
No related branches found
No related tags found
No related merge requests found
...@@ -223,6 +223,8 @@ void BitstreamExtractorApp::xRewritePPS (PPS &targetPPS, const PPS &sourcePPS, S ...@@ -223,6 +223,8 @@ void BitstreamExtractorApp::xRewritePPS (PPS &targetPPS, const PPS &sourcePPS, S
std::vector<uint32_t> tileRowHeight; std::vector<uint32_t> tileRowHeight;
std::vector<uint32_t> tileColBd; std::vector<uint32_t> tileColBd;
std::vector<uint32_t> tileRowBd; std::vector<uint32_t> tileRowBd;
int subpicTopLeftTileX = -1;
int subpicTopLeftTileY = -1;
for (int i=0; i<= sourcePPS.getNumTileColumns(); i++) for (int i=0; i<= sourcePPS.getNumTileColumns(); i++)
{ {
...@@ -230,6 +232,10 @@ void BitstreamExtractorApp::xRewritePPS (PPS &targetPPS, const PPS &sourcePPS, S ...@@ -230,6 +232,10 @@ void BitstreamExtractorApp::xRewritePPS (PPS &targetPPS, const PPS &sourcePPS, S
if ((currentColBd >= subPic.getSubPicCtuTopLeftX()) && (currentColBd <= (subPic.getSubPicCtuTopLeftX() + subPic.getSubPicWidthInCTUs()))) if ((currentColBd >= subPic.getSubPicCtuTopLeftX()) && (currentColBd <= (subPic.getSubPicCtuTopLeftX() + subPic.getSubPicWidthInCTUs())))
{ {
tileColBd.push_back(currentColBd - subPic.getSubPicCtuTopLeftX()); tileColBd.push_back(currentColBd - subPic.getSubPicCtuTopLeftX());
if (subpicTopLeftTileX == -1)
{
subpicTopLeftTileX = i;
}
} }
} }
numTileCols=(int)tileColBd.size() - 1; numTileCols=(int)tileColBd.size() - 1;
...@@ -249,6 +255,10 @@ void BitstreamExtractorApp::xRewritePPS (PPS &targetPPS, const PPS &sourcePPS, S ...@@ -249,6 +255,10 @@ void BitstreamExtractorApp::xRewritePPS (PPS &targetPPS, const PPS &sourcePPS, S
if ((currentRowBd >= subPic.getSubPicCtuTopLeftY()) && (currentRowBd <= (subPic.getSubPicCtuTopLeftY() + subPic.getSubPicHeightInCTUs()))) if ((currentRowBd >= subPic.getSubPicCtuTopLeftY()) && (currentRowBd <= (subPic.getSubPicCtuTopLeftY() + subPic.getSubPicHeightInCTUs())))
{ {
tileRowBd.push_back(currentRowBd - subPic.getSubPicCtuTopLeftY()); tileRowBd.push_back(currentRowBd - subPic.getSubPicCtuTopLeftY());
if(subpicTopLeftTileY == -1)
{
subpicTopLeftTileY = i;
}
} }
} }
numTileRows=(int)tileRowBd.size() - 1; numTileRows=(int)tileRowBd.size() - 1;
...@@ -295,6 +305,11 @@ void BitstreamExtractorApp::xRewritePPS (PPS &targetPPS, const PPS &sourcePPS, S ...@@ -295,6 +305,11 @@ void BitstreamExtractorApp::xRewritePPS (PPS &targetPPS, const PPS &sourcePPS, S
{ {
int targetNumSlices = subPic.getNumSlicesInSubPic(); int targetNumSlices = subPic.getNumSlicesInSubPic();
targetPPS.setNumSlicesInPic(targetNumSlices); targetPPS.setNumSlicesInPic(targetNumSlices);
// To avoid the bitstream writer writing tile_idx_delta in the bitstream
if ( (targetPPS.getNumSlicesInPic() - 1) <= 1)
{
targetPPS.setTileIdxDeltaPresentFlag(0);
}
for (int i=0, cnt=0; i<sourcePPS.getNumSlicesInPic(); i++) for (int i=0, cnt=0; i<sourcePPS.getNumSlicesInPic(); i++)
{ {
...@@ -310,23 +325,14 @@ void BitstreamExtractorApp::xRewritePPS (PPS &targetPPS, const PPS &sourcePPS, S ...@@ -310,23 +325,14 @@ void BitstreamExtractorApp::xRewritePPS (PPS &targetPPS, const PPS &sourcePPS, S
cnt++; cnt++;
} }
} }
// renumber tiles to close gaps // Find out new slices tile index after removal of some tiles
for (int i=0; i<targetPPS.getNumSlicesInPic(); i++) for (int i=0; i<targetPPS.getNumSlicesInPic(); i++)
{ {
int minVal = MAX_INT; int tileInPicX = targetPPS.getSliceTileIdx(i) % sourcePPS.getNumTileColumns();
int minPos = -1; int tileInPicY = targetPPS.getSliceTileIdx(i) / sourcePPS.getNumTileColumns();
for (int j=0; j<targetPPS.getNumSlicesInPic(); j++) int tileInSubpicX = tileInPicX - subpicTopLeftTileX;
{ int tileInSubpicY = tileInPicY - subpicTopLeftTileY;
if ((targetPPS.getSliceTileIdx(j) < minVal) && (targetPPS.getSliceTileIdx(j) >= i)) targetPPS.setSliceTileIdx(i, tileInSubpicY * numTileCols + tileInSubpicX);
{
minVal = targetPPS.getSliceTileIdx(j);
minPos = j;
}
}
if ( minPos != -1)
{
targetPPS.setSliceTileIdx(minPos, i);
}
} }
} }
......
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