From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> To: ffmpeg-devel@ffmpeg.org Subject: Re: [FFmpeg-devel] [PATCH 1/3] avcodec/ass: Faster ff_ass_add_rect() Date: Mon, 20 Dec 2021 01:39:47 +0100 Message-ID: <AM7PR03MB666070971BEC32BA3F5D71158F7B9@AM7PR03MB6660.eurprd03.prod.outlook.com> (raw) In-Reply-To: <20211219235700.16595-1-michael@niedermayer.cc> Michael Niedermayer: > Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> > --- > libavcodec/ass.c | 33 +++++++++++++++++++++++++++------ > libavcodec/ass.h | 7 +++++++ > 2 files changed, 34 insertions(+), 6 deletions(-) > > diff --git a/libavcodec/ass.c b/libavcodec/ass.c > index 725e4d42ba1..06714678722 100644 > --- a/libavcodec/ass.c > +++ b/libavcodec/ass.c > @@ -114,17 +114,31 @@ char *ff_ass_get_dialog(int readorder, int layer, const char *style, > speaker ? speaker : "", text); > } > > -int ff_ass_add_rect(AVSubtitle *sub, const char *dialog, > +int ff_ass_add_rect2(AVSubtitle *sub, const char *dialog, > int readorder, int layer, const char *style, > - const char *speaker) > + const char *speaker, unsigned *nb_rect_allocated) > { > - AVSubtitleRect **rects, *rect; > + AVSubtitleRect **rects = sub->rects, *rect; > char *ass_str; > + uint64_t new_nb = 0; > > - rects = av_realloc_array(sub->rects, sub->num_rects+1, sizeof(*sub->rects)); > - if (!rects) > + if (sub->num_rects >= UINT_MAX) > return AVERROR(ENOMEM); > - sub->rects = rects; > + > + if (nb_rect_allocated && *nb_rect_allocated <= sub->num_rects) { > + new_nb = FFMIN(sub->num_rects + sub->num_rects/16LL + 1, UINT_MAX); This presumes that unsigned is not 64bits itself; I have no problem with this, so LGTM from me. Others may disagree. > + } else if (!nb_rect_allocated) > + new_nb = sub->num_rects + 1LL; +1 is enough (it has been checked that sub->num_rects is < UINT_MAX). > + > + if (new_nb) { > + rects = av_realloc_array(rects, new_nb, sizeof(*sub->rects)); > + if (!rects) > + return AVERROR(ENOMEM); > + if (nb_rect_allocated) > + *nb_rect_allocated = new_nb; > + sub->rects = rects; > + } > + > rect = av_mallocz(sizeof(*rect)); > if (!rect) > return AVERROR(ENOMEM); > @@ -137,6 +151,13 @@ int ff_ass_add_rect(AVSubtitle *sub, const char *dialog, > return 0; > } > > +int ff_ass_add_rect(AVSubtitle *sub, const char *dialog, > + int readorder, int layer, const char *style, > + const char *speaker) > +{ > + return ff_ass_add_rect2(sub, dialog, readorder, layer, style, speaker, NULL); > +} > + > void ff_ass_decoder_flush(AVCodecContext *avctx) > { > FFASSDecoderContext *s = avctx->priv_data; > diff --git a/libavcodec/ass.h b/libavcodec/ass.h > index 2c260e4e785..4dffe923d9f 100644 > --- a/libavcodec/ass.h > +++ b/libavcodec/ass.h > @@ -118,6 +118,13 @@ int ff_ass_add_rect(AVSubtitle *sub, const char *dialog, > int readorder, int layer, const char *style, > const char *speaker); > > +/** > + * Add an ASS dialog to a subtitle. > + */ > +int ff_ass_add_rect2(AVSubtitle *sub, const char *dialog, > + int readorder, int layer, const char *style, > + const char *speaker, unsigned *nb_rect_allocated); > + > /** > * Helper to flush a text subtitles decoder making use of the > * FFASSDecoderContext. > _______________________________________________ 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".
next prev parent reply other threads:[~2021-12-20 0:40 UTC|newest] Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-12-19 23:56 Michael Niedermayer 2021-12-19 23:56 ` [FFmpeg-devel] [PATCH 2/3] avcodec/ccaption_dec: Use ff_ass_add_rect2() Michael Niedermayer 2022-03-18 17:33 ` Michael Niedermayer 2021-12-19 23:57 ` [FFmpeg-devel] [PATCH 3/3] avcodec/vqavideo: reset accounting on error Michael Niedermayer 2021-12-23 13:54 ` Michael Niedermayer 2021-12-20 0:00 ` [FFmpeg-devel] [PATCH 1/3] avcodec/ass: Faster ff_ass_add_rect() James Almer 2021-12-20 16:04 ` Michael Niedermayer 2021-12-20 0:39 ` Andreas Rheinhardt [this message] 2021-12-20 16:48 ` Michael Niedermayer
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=AM7PR03MB666070971BEC32BA3F5D71158F7B9@AM7PR03MB6660.eurprd03.prod.outlook.com \ --to=andreas.rheinhardt@outlook.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
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