This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 9a4111b1e0604fb0bbb78387b69f02030424fc3a Author: Ruk Doe <[email protected]> AuthorDate: Mon Aug 10 13:42:57 2026 +0900 Commit: michaelni <[email protected]> CommitDate: Fri Oct 9 16:43:21 2026 +0000 avcodec/libaribcaption: emit empty subtitle on clear in bitmap mode An ARIB caption statement whose data units contain only CS (clear screen) decodes to a caption with the ARIBCC_CAPTIONFLAGS_CLEARSCREEN flag set and region_count == 0. In SUBTITLE_TEXT mode this is translated into a rect holding "" so that the previous caption is erased. In SUBTITLE_BITMAP mode nothing is rendered, the function returns 0 and *got_sub_ptr is left at 0, so the caller never learns that the caption ended. Broadcasters send such a statement at the end of every caption segment (for example when going to a commercial break). Combined with wait_duration == ARIBCC_DURATION_INDEFINITE, which maps to end_display_time = UINT32_MAX, the last caption of a segment stays on screen until the next one arrives - in a real recording that was 22 minutes later. Report an empty subtitle (num_rects = 0) when the clear-screen flag is set, which sub2video and the usual subtitle consumers already treat as "erase". The flag is tested instead of region_count == 0 because a statement containing only TIME also decodes to zero regions but must not erase the currently displayed caption. --- libavcodec/libaribcaption.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/libavcodec/libaribcaption.c b/libavcodec/libaribcaption.c index 66d18b9d38..e8f7cada73 100644 --- a/libavcodec/libaribcaption.c +++ b/libavcodec/libaribcaption.c @@ -310,7 +310,7 @@ static void clut_init(ARIBCaptionContext *ctx, aribcc_caption_region_t *region) * Transfer decoded subtitle to AVSubtitle with corresponding subtitle type. * * @param ctx pointer to the ARIBCaptionContext - * @return > 0 number of rectangles to be displayed + * @return > 0 subtitle event produced (possibly with zero rectangles for clear) * = 0 no subtitle * < 0 error code */ @@ -360,6 +360,17 @@ static int aribcaption_trans_bitmap_subtitle(ARIBCaptionContext *ctx) case ARIBCC_RENDER_STATUS_NO_IMAGE: ff_dlog(ctx, "no image\n"); + /* A caption carrying an explicit clear screen (CS) produces no + image. Report an empty subtitle so that the previously displayed + bitmap is erased; the TEXT path already does this by emitting "". + Do not treat every regionless caption as a clear: a statement + containing only TIME also decodes to zero regions but must not + erase the display. */ + if (ctx->caption.flags & ARIBCC_CAPTIONFLAGS_CLEARSCREEN) { + sub->format = 0; /* graphic */ + sub->num_rects = 0; + return 1; + } return 0; case ARIBCC_RENDER_STATUS_ERROR: @@ -377,6 +388,11 @@ static int aribcaption_trans_bitmap_subtitle(ARIBCaptionContext *ctx) if (!ctx->render_result.image_count || ctx->render_result.images == NULL) { aribcc_render_result_cleanup(&ctx->render_result); ff_dlog(ctx, "no image (%d)\n", ctx->render_result.image_count); + if (ctx->caption.flags & ARIBCC_CAPTIONFLAGS_CLEARSCREEN) { + sub->format = 0; /* graphic */ + sub->num_rects = 0; + return 1; + } return 0; } -- To stop receiving notification emails like this one, please contact [email protected]. _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
