* [FFmpeg-devel] [PATCH 1/2] lavc/vvc: Fix NumEntryPoints derivation @ 2025-02-23 12:04 Frank Plowman 2025-02-23 12:04 ` [FFmpeg-devel] [PATCH 2/2] lavc/vvc: Fix pps_single_slice_picture Frank Plowman 2025-03-02 12:41 ` [FFmpeg-devel] [PATCH 1/2] lavc/vvc: Fix NumEntryPoints derivation Nuo Mi 0 siblings, 2 replies; 7+ messages in thread From: Frank Plowman @ 2025-02-23 12:04 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Frank Plowman, nuomi2021 If pps_single_slice_per_subpic_flag is 1, slice_{width,height}_in_ctus are undefined and we must instead get the dimensions of the slice by referring to the corresponding subpicture. Signed-off-by: Frank Plowman <post@frankplowman.com> --- libavcodec/cbs_h266_syntax_template.c | 34 ++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/libavcodec/cbs_h266_syntax_template.c b/libavcodec/cbs_h266_syntax_template.c index 58211026bb..b84f3e29db 100644 --- a/libavcodec/cbs_h266_syntax_template.c +++ b/libavcodec/cbs_h266_syntax_template.c @@ -3440,13 +3440,35 @@ static int FUNC(slice_header) (CodedBitstreamContext *ctx, RWContext *rw, for (i = 0; i < current->curr_subpic_idx; i++) { slice_idx += pps->num_slices_in_subpic[i]; } - width_in_tiles = - pps->pps_slice_width_in_tiles_minus1[slice_idx] + 1; - if (entropy_sync) - height = pps->slice_height_in_ctus[slice_idx]; - else - height = pps->pps_slice_height_in_tiles_minus1[slice_idx] + 1; + if (pps->pps_single_slice_per_subpic_flag) { + const int width_in_ctus = sps->sps_subpic_width_minus1[slice_idx] + 1; + const int subpic_l = sps->sps_subpic_ctu_top_left_x[slice_idx]; + const int subpic_r = subpic_l + width_in_ctus; + + int ctb_x = 0, tile_x = 0; + for (; ctb_x < subpic_l && tile_x < pps->num_tile_columns; tile_x++) + ctb_x += pps->col_width_val[tile_x]; + + width_in_tiles = 0; + for (; ctb_x < subpic_r && tile_x < pps->num_tile_columns; tile_x++) { + ctb_x += pps->col_width_val[tile_x]; + width_in_tiles++; + } + + if (entropy_sync) + height = sps->sps_subpic_height_minus1[slice_idx] + 1; + else + height = pps->pps_slice_height_in_tiles_minus1[slice_idx] + 1; + } else { + width_in_tiles = + pps->pps_slice_width_in_tiles_minus1[slice_idx] + 1; + + if (entropy_sync) + height = pps->slice_height_in_ctus[slice_idx]; + else + height = pps->pps_slice_height_in_tiles_minus1[slice_idx] + 1; + } current->num_entry_points = width_in_tiles * height; } else { -- 2.47.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 7+ messages in thread
* [FFmpeg-devel] [PATCH 2/2] lavc/vvc: Fix pps_single_slice_picture 2025-02-23 12:04 [FFmpeg-devel] [PATCH 1/2] lavc/vvc: Fix NumEntryPoints derivation Frank Plowman @ 2025-02-23 12:04 ` Frank Plowman 2025-02-24 2:23 ` James Almer 2025-03-02 12:49 ` Nuo Mi 2025-03-02 12:41 ` [FFmpeg-devel] [PATCH 1/2] lavc/vvc: Fix NumEntryPoints derivation Nuo Mi 1 sibling, 2 replies; 7+ messages in thread From: Frank Plowman @ 2025-02-23 12:04 UTC (permalink / raw) To: ffmpeg-devel; +Cc: Frank Plowman, nuomi2021 Signed-off-by: Frank Plowman <post@frankplowman.com> --- libavcodec/vvc/ps.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libavcodec/vvc/ps.c b/libavcodec/vvc/ps.c index fae6655cc0..603a6d42d1 100644 --- a/libavcodec/vvc/ps.c +++ b/libavcodec/vvc/ps.c @@ -368,9 +368,10 @@ static int pps_add_ctus(VVCPPS *pps, int *off, const int rx, const int ry, static void pps_single_slice_picture(VVCPPS *pps, int *off) { + pps->num_ctus_in_slice[0] = 0; for (int j = 0; j < pps->r->num_tile_rows; j++) { for (int i = 0; i < pps->r->num_tile_columns; i++) { - pps->num_ctus_in_slice[0] = pps_add_ctus(pps, off, + pps->num_ctus_in_slice[0] += pps_add_ctus(pps, off, pps->col_bd[i], pps->row_bd[j], pps->r->col_width_val[i], pps->r->row_height_val[j]); } -- 2.47.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] lavc/vvc: Fix pps_single_slice_picture 2025-02-23 12:04 ` [FFmpeg-devel] [PATCH 2/2] lavc/vvc: Fix pps_single_slice_picture Frank Plowman @ 2025-02-24 2:23 ` James Almer 2025-02-24 19:16 ` Frank Plowman 2025-03-02 12:49 ` Nuo Mi 1 sibling, 1 reply; 7+ messages in thread From: James Almer @ 2025-02-24 2:23 UTC (permalink / raw) To: ffmpeg-devel [-- Attachment #1.1.1: Type: text/plain, Size: 1077 bytes --] On 2/23/2025 9:04 AM, Frank Plowman wrote: > Signed-off-by: Frank Plowman <post@frankplowman.com> > --- > libavcodec/vvc/ps.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/libavcodec/vvc/ps.c b/libavcodec/vvc/ps.c > index fae6655cc0..603a6d42d1 100644 > --- a/libavcodec/vvc/ps.c > +++ b/libavcodec/vvc/ps.c > @@ -368,9 +368,10 @@ static int pps_add_ctus(VVCPPS *pps, int *off, const int rx, const int ry, > > static void pps_single_slice_picture(VVCPPS *pps, int *off) > { > + pps->num_ctus_in_slice[0] = 0; > for (int j = 0; j < pps->r->num_tile_rows; j++) { > for (int i = 0; i < pps->r->num_tile_columns; i++) { > - pps->num_ctus_in_slice[0] = pps_add_ctus(pps, off, > + pps->num_ctus_in_slice[0] += pps_add_ctus(pps, off, > pps->col_bd[i], pps->row_bd[j], > pps->r->col_width_val[i], pps->r->row_height_val[j]); > } Is there a sample in the conformance suite this fixes? Or one we can upload to FATE to make a test. [-- Attachment #1.2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 495 bytes --] [-- Attachment #2: Type: text/plain, Size: 251 bytes --] _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] lavc/vvc: Fix pps_single_slice_picture 2025-02-24 2:23 ` James Almer @ 2025-02-24 19:16 ` Frank Plowman 2025-03-02 12:03 ` Nuo Mi 0 siblings, 1 reply; 7+ messages in thread From: Frank Plowman @ 2025-02-24 19:16 UTC (permalink / raw) To: ffmpeg-devel On 24/02/2025 02:23, James Almer wrote: > On 2/23/2025 9:04 AM, Frank Plowman wrote: >> Signed-off-by: Frank Plowman <post@frankplowman.com> >> --- >> libavcodec/vvc/ps.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/libavcodec/vvc/ps.c b/libavcodec/vvc/ps.c >> index fae6655cc0..603a6d42d1 100644 >> --- a/libavcodec/vvc/ps.c >> +++ b/libavcodec/vvc/ps.c >> @@ -368,9 +368,10 @@ static int pps_add_ctus(VVCPPS *pps, int *off, const int rx, const int ry, >> >> static void pps_single_slice_picture(VVCPPS *pps, int *off) >> { >> + pps->num_ctus_in_slice[0] = 0; >> for (int j = 0; j < pps->r->num_tile_rows; j++) { >> for (int i = 0; i < pps->r->num_tile_columns; i++) { >> - pps->num_ctus_in_slice[0] = pps_add_ctus(pps, off, >> + pps->num_ctus_in_slice[0] += pps_add_ctus(pps, off, >> pps->col_bd[i], pps->row_bd[j], >> pps->r->col_width_val[i], pps->r->row_height_val[j]); >> } > > Is there a sample in the conformance suite this fixes? Or one we can > upload to FATE to make a test. Hi James, The conformance suite is pretty lacking here considering the number of combinations of these different partitioning tools possible in VVC. I think the lack of examples in the conformance suite is the main reason we're still running into bugs in this area. I crafted a sample which exhibits this bug though, and have sent it to samples-request@ffmpeg.org. I tried to also craft a sample which tests 93aae172ea909ec96b67077b8b3005886a83d0ae, but any attempt at this seemed to segfault the reference software :) -- All the best, Frank _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] lavc/vvc: Fix pps_single_slice_picture 2025-02-24 19:16 ` Frank Plowman @ 2025-03-02 12:03 ` Nuo Mi 0 siblings, 0 replies; 7+ messages in thread From: Nuo Mi @ 2025-03-02 12:03 UTC (permalink / raw) To: FFmpeg development discussions and patches On Tue, Feb 25, 2025 at 3:16 AM Frank Plowman <post@frankplowman.com> wrote: > On 24/02/2025 02:23, James Almer wrote: > > On 2/23/2025 9:04 AM, Frank Plowman wrote: > >> Signed-off-by: Frank Plowman <post@frankplowman.com> > >> --- > >> libavcodec/vvc/ps.c | 3 ++- > >> 1 file changed, 2 insertions(+), 1 deletion(-) > >> > >> diff --git a/libavcodec/vvc/ps.c b/libavcodec/vvc/ps.c > >> index fae6655cc0..603a6d42d1 100644 > >> --- a/libavcodec/vvc/ps.c > >> +++ b/libavcodec/vvc/ps.c > >> @@ -368,9 +368,10 @@ static int pps_add_ctus(VVCPPS *pps, int *off, > const int rx, const int ry, > >> > >> static void pps_single_slice_picture(VVCPPS *pps, int *off) > >> { > >> + pps->num_ctus_in_slice[0] = 0; > >> for (int j = 0; j < pps->r->num_tile_rows; j++) { > >> for (int i = 0; i < pps->r->num_tile_columns; i++) { > >> - pps->num_ctus_in_slice[0] = pps_add_ctus(pps, off, > >> + pps->num_ctus_in_slice[0] += pps_add_ctus(pps, off, > >> pps->col_bd[i], pps->row_bd[j], > >> pps->r->col_width_val[i], pps->r->row_height_val[j]); > >> } > > > > Is there a sample in the conformance suite this fixes? Or one we can > > upload to FATE to make a test. > > Hi James, > > The conformance suite is pretty lacking here considering the number of > combinations of these different partitioning tools possible in VVC. > I think the lack of examples in the conformance suite is the main reason > we're still running into bugs in this area. > > I crafted a sample which exhibits this bug though, and have sent it to > samples-request@ffmpeg.org. I tried to also craft a sample which tests > 93aae172ea909ec96b67077b8b3005886a83d0ae, but any attempt at this seemed > to segfault the reference software :) > Creating error-prone conformance streams is challenging; some companies sell them at a high price > > -- > All the best, > Frank > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] lavc/vvc: Fix pps_single_slice_picture 2025-02-23 12:04 ` [FFmpeg-devel] [PATCH 2/2] lavc/vvc: Fix pps_single_slice_picture Frank Plowman 2025-02-24 2:23 ` James Almer @ 2025-03-02 12:49 ` Nuo Mi 1 sibling, 0 replies; 7+ messages in thread From: Nuo Mi @ 2025-03-02 12:49 UTC (permalink / raw) To: Frank Plowman; +Cc: ffmpeg-devel On Sun, Feb 23, 2025 at 8:05 PM Frank Plowman <post@frankplowman.com> wrote: > Signed-off-by: Frank Plowman <post@frankplowman.com> > Applied this one. Thank you, Frank > --- > libavcodec/vvc/ps.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/libavcodec/vvc/ps.c b/libavcodec/vvc/ps.c > index fae6655cc0..603a6d42d1 100644 > --- a/libavcodec/vvc/ps.c > +++ b/libavcodec/vvc/ps.c > @@ -368,9 +368,10 @@ static int pps_add_ctus(VVCPPS *pps, int *off, const > int rx, const int ry, > > static void pps_single_slice_picture(VVCPPS *pps, int *off) > { > + pps->num_ctus_in_slice[0] = 0; > for (int j = 0; j < pps->r->num_tile_rows; j++) { > for (int i = 0; i < pps->r->num_tile_columns; i++) { > - pps->num_ctus_in_slice[0] = pps_add_ctus(pps, off, > + pps->num_ctus_in_slice[0] += pps_add_ctus(pps, off, > pps->col_bd[i], pps->row_bd[j], > pps->r->col_width_val[i], pps->r->row_height_val[j]); > } > -- > 2.47.0 > > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] lavc/vvc: Fix NumEntryPoints derivation 2025-02-23 12:04 [FFmpeg-devel] [PATCH 1/2] lavc/vvc: Fix NumEntryPoints derivation Frank Plowman 2025-02-23 12:04 ` [FFmpeg-devel] [PATCH 2/2] lavc/vvc: Fix pps_single_slice_picture Frank Plowman @ 2025-03-02 12:41 ` Nuo Mi 1 sibling, 0 replies; 7+ messages in thread From: Nuo Mi @ 2025-03-02 12:41 UTC (permalink / raw) To: Frank Plowman; +Cc: ffmpeg-devel On Sun, Feb 23, 2025 at 8:05 PM Frank Plowman <post@frankplowman.com> wrote: > If pps_single_slice_per_subpic_flag is 1, > slice_{width,height}_in_ctus are undefined and we must instead get the > dimensions of the slice by referring to the corresponding subpicture. > > Signed-off-by: Frank Plowman <post@frankplowman.com> > --- > libavcodec/cbs_h266_syntax_template.c | 34 ++++++++++++++++++++++----- > 1 file changed, 28 insertions(+), 6 deletions(-) > > diff --git a/libavcodec/cbs_h266_syntax_template.c > b/libavcodec/cbs_h266_syntax_template.c > index 58211026bb..b84f3e29db 100644 > --- a/libavcodec/cbs_h266_syntax_template.c > +++ b/libavcodec/cbs_h266_syntax_template.c > @@ -3440,13 +3440,35 @@ static int FUNC(slice_header) > (CodedBitstreamContext *ctx, RWContext *rw, > for (i = 0; i < current->curr_subpic_idx; i++) { > slice_idx += pps->num_slices_in_subpic[i]; > } > - width_in_tiles = > - pps->pps_slice_width_in_tiles_minus1[slice_idx] + 1; > > - if (entropy_sync) > - height = pps->slice_height_in_ctus[slice_idx]; > - else > - height = pps->pps_slice_height_in_tiles_minus1[slice_idx] > + 1; > + if (pps->pps_single_slice_per_subpic_flag) { > + const int width_in_ctus = > sps->sps_subpic_width_minus1[slice_idx] + 1; > + const int subpic_l = > sps->sps_subpic_ctu_top_left_x[slice_idx]; > + const int subpic_r = subpic_l + width_in_ctus; > + > + int ctb_x = 0, tile_x = 0; > + for (; ctb_x < subpic_l && tile_x < > pps->num_tile_columns; tile_x++) > + ctb_x += pps->col_width_val[tile_x]; > + > + width_in_tiles = 0; > + for (; ctb_x < subpic_r && tile_x < > pps->num_tile_columns; tile_x++) { > + ctb_x += pps->col_width_val[tile_x]; > + width_in_tiles++; > + } > + > + if (entropy_sync) > + height = sps->sps_subpic_height_minus1[slice_idx] + 1; > + else > + height = > pps->pps_slice_height_in_tiles_minus1[slice_idx] + 1; > pps_slice_height_in_tiles_minus1 is also undefined if pps_single_slice_per_subpic_flag is true. > + } else { > + width_in_tiles = > + pps->pps_slice_width_in_tiles_minus1[slice_idx] + 1; > + > + if (entropy_sync) > + height = pps->slice_height_in_ctus[slice_idx]; > + else > + height = > pps->pps_slice_height_in_tiles_minus1[slice_idx] + 1; > + } > > current->num_entry_points = width_in_tiles * height; > } else { > -- > 2.47.0 > > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-03-02 12:50 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2025-02-23 12:04 [FFmpeg-devel] [PATCH 1/2] lavc/vvc: Fix NumEntryPoints derivation Frank Plowman 2025-02-23 12:04 ` [FFmpeg-devel] [PATCH 2/2] lavc/vvc: Fix pps_single_slice_picture Frank Plowman 2025-02-24 2:23 ` James Almer 2025-02-24 19:16 ` Frank Plowman 2025-03-02 12:03 ` Nuo Mi 2025-03-02 12:49 ` Nuo Mi 2025-03-02 12:41 ` [FFmpeg-devel] [PATCH 1/2] lavc/vvc: Fix NumEntryPoints derivation Nuo Mi
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git