diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-09-26 00:28:19 +0200 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-09-26 12:42:36 +0200 |
commit | f348a967a35c0946de0d9f6bedb1f4025b09b334 (patch) | |
tree | f97fcafd2749b03f6d7472b258e2542b52ac4666 | |
parent | 99feb59cf7ea9d6753502d76110ced96f128dac6 (diff) | |
download | ffmpeg-f348a967a35c0946de0d9f6bedb1f4025b09b334.tar.gz |
avfilter/formats: Avoid reallocations for video in ff_all_formats()
Up until now, the list of pixfmts is reallocated every time an entry
is added to it; there are currently 196 pixel formats, so this matters:
It causes 5541704 calls to av_realloc_array() in a typical FATE run,
which is the majority for said function (8095768 calls) and even
a large chunk of the calls to av_realloc() itself (12589508 calls).
Fix this by using ff_formats_pixdesc_filter() instead.
Reviewed-by: Nicolas George <george@nsup.org>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
-rw-r--r-- | libavfilter/formats.c | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/libavfilter/formats.c b/libavfilter/formats.c index 59ea966424..1d2a51c0af 100644 --- a/libavfilter/formats.c +++ b/libavfilter/formats.c @@ -435,11 +435,7 @@ AVFilterFormats *ff_all_formats(enum AVMediaType type) AVFilterFormats *ret = NULL; if (type == AVMEDIA_TYPE_VIDEO) { - const AVPixFmtDescriptor *desc = NULL; - while ((desc = av_pix_fmt_desc_next(desc))) { - if (ff_add_format(&ret, av_pix_fmt_desc_get_id(desc)) < 0) - return NULL; - } + return ff_formats_pixdesc_filter(0, 0); } else if (type == AVMEDIA_TYPE_AUDIO) { enum AVSampleFormat fmt = 0; while (av_get_sample_fmt_name(fmt)) { |