Opened 4 months ago

Last modified 4 months ago

#1298 new enhancement

Last rectangular slice in frame is not always locate in bottom right corner

Reported by: kerzhy Owned by:
Priority: minor Milestone:
Component: VTM Version: VTM-9.3
Keywords: slice partition Cc: ksuehring, XiangLi, fbossen, jvet@…, jvet@…

Description

Due to spec, the last slice is not signalled, assuming it is located in the bottom right corner.

It is supposed to be located in bottom right corner due to this condition from spec:

tileX = tileIdx % NumTileColumns
tileY = tileIdx / NumTileColumns
if( i < pps_num_slices_in_pic_minus1 ) {
    sliceWidthInTiles[ i ] = pps_slice_width_in_tiles_minus1[ i ] + 1
    sliceHeightInTiles[ i ] = pps_slice_height_in_tiles_minus1[ i ] + 1
} else {
      sliceWidthInTiles[ i ] = NumTileColumns − tileX
      sliceHeightInTiles[ i ] = NumTileRows − tileY
      NumSlicesInTile[ i ] = 1
}

However, if we use tile_delta_idx values and multiple slices in tile we can get situation where last slice will not be located in the bottom right corner.

Example:

  • Red lines – slice boundaries
  • Green lines – tile boundaries

https://drive.google.com/file/d/1lhMEdViqxiu37JRIv007JSoLNwXgGUu2/view

Here we can see, that num_slices_in_pic_minus1 = 3, and current slice (slice with purple square) has index = 3 (so it is the last).

And bottom right slice has index 1:

https://drive.google.com/file/d/1oK1z0QNJlKPjYuNZ4RHDQuH1bRxgMhvw/view

So is it a bug or a feature that last slice supposed to be in the right bottom corner (by spec) but this condition can be violated and overcome in some cases?

P.S. Stream is in attachments.

Attachments (1)

test_vvc_not_last_slice.vvc (10.1 KB) - added by kerzhy 4 months ago.
Stream from the example

Download all attachments as: .zip

Change history (3)

Changed 4 months ago by kerzhy

Stream from the example

comment:1 Changed 4 months ago by kerzhy

  • Keywords partition added; patrtition removed

comment:2 Changed 4 months ago by bheng

I believe such a stream is illegal based on the following requirement from Section 7.4.8 - Slice header semantics:

"The shapes of the slices of a picture shall be such that each CTU, when decoded, shall have its entire left boundary and entire top boundary consisting of a picture boundary or consisting of boundaries of previously decoded CTU(s)."

The syntax is not designed to prevent every possible illegal configuration, but the statement above should make such streams invalid.

Note: See TracTickets for help on using tickets.