[FFmpeg-devel] [PATCH 3/3] cbs: Stop reallocating fragment unit arrays
Mark Thompson
sw at jkqxz.net
Mon Feb 11 01:06:07 EET 2019
On 05/02/2019 20:08, Andreas Rheinhardt wrote:
> This commit changes various places that make use of cbs to keep the
> fragments' unit arrays instead of constantly reallocating them.
>
> The more units a packet is split into, the bigger the benefit.
> So MPEG-2 benefits the most; for a video coming from an NTSC-DVD
> (usually 32 units per frame) the average cost of cbs_insert_unit (for a
> single unit) went down from 6717 decicycles to 450 decicycles (based
> upon 10 runs with 4194304 runs each); if each packet consists of only
> one unit, it went down from 2425 to 448; for a H.264 video where most
> packets contain nine units, it went from 4431 to 450.
>
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at googlemail.com>
> ---
> libavcodec/av1_metadata_bsf.c | 6 ++++--
> libavcodec/av1_parser.c | 5 +++--
> libavcodec/filter_units_bsf.c | 13 +++++++------
> libavcodec/h264_metadata_bsf.c | 6 ++++--
> libavcodec/h264_redundant_pps_bsf.c | 6 ++++--
> libavcodec/h265_metadata_bsf.c | 6 ++++--
> libavcodec/mpeg2_metadata_bsf.c | 6 ++++--
> libavcodec/trace_headers_bsf.c | 14 ++++++++------
> libavcodec/vp9_metadata_bsf.c | 4 +++-
> 9 files changed, 41 insertions(+), 25 deletions(-)
>
> diff --git a/libavcodec/av1_metadata_bsf.c b/libavcodec/av1_metadata_bsf.c
> index b08a1379e7..5e4dc10b89 100644
> --- a/libavcodec/av1_metadata_bsf.c
> +++ b/libavcodec/av1_metadata_bsf.c
> @@ -170,7 +170,7 @@ static int av1_metadata_filter(AVBSFContext *bsf, AVPacket *out)
>
> err = 0;
> fail:
> - ff_cbs_fragment_uninit(ctx->cbc, frag, 1);
> + ff_cbs_fragment_uninit(ctx->cbc, frag, 0);
>
> if (err < 0)
> av_packet_unref(out);
> @@ -215,13 +215,15 @@ static int av1_metadata_init(AVBSFContext *bsf)
>
> err = 0;
> fail:
> - ff_cbs_fragment_uninit(ctx->cbc, frag, 1);
> + ff_cbs_fragment_uninit(ctx->cbc, frag, 0);
> return err;
> }
>
> static void av1_metadata_close(AVBSFContext *bsf)
> {
> AV1MetadataContext *ctx = bsf->priv_data;
> +
> + ff_cbs_fragment_uninit(ctx->cbc, &ctx->access_unit, 1);
> ff_cbs_close(&ctx->cbc);
> }
I feel like this patch for each BSF demonstrates nicely that they should be separate functions - one version is called repeatedly in the filter operations, the other only in close.
With suitable names, this all looks good.
Thanks,
- Mark
More information about the ffmpeg-devel
mailing list