mirror of https://git.ffmpeg.org/ffmpeg.git
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>
This commit is contained in:
parent
99feb59cf7
commit
f348a967a3
|
@ -435,11 +435,7 @@ AVFilterFormats *ff_all_formats(enum AVMediaType type)
|
||||||
AVFilterFormats *ret = NULL;
|
AVFilterFormats *ret = NULL;
|
||||||
|
|
||||||
if (type == AVMEDIA_TYPE_VIDEO) {
|
if (type == AVMEDIA_TYPE_VIDEO) {
|
||||||
const AVPixFmtDescriptor *desc = NULL;
|
return ff_formats_pixdesc_filter(0, 0);
|
||||||
while ((desc = av_pix_fmt_desc_next(desc))) {
|
|
||||||
if (ff_add_format(&ret, av_pix_fmt_desc_get_id(desc)) < 0)
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
} else if (type == AVMEDIA_TYPE_AUDIO) {
|
} else if (type == AVMEDIA_TYPE_AUDIO) {
|
||||||
enum AVSampleFormat fmt = 0;
|
enum AVSampleFormat fmt = 0;
|
||||||
while (av_get_sample_fmt_name(fmt)) {
|
while (av_get_sample_fmt_name(fmt)) {
|
||||||
|
|
Loading…
Reference in New Issue