On Fri, 03. Jan 22:25, quinkbl...@foxmail.com wrote: > From: Zhao Zhili <zhiliz...@tencent.com> > > This is a micro-optimization. Saving almost 200 reallocations makes it > worth a try. > --- > libavfilter/formats.c | 43 +++++++++++++++++++++++++++++++++++-------- > 1 file changed, 35 insertions(+), 8 deletions(-) > > diff --git a/libavfilter/formats.c b/libavfilter/formats.c > index 33c64668a0..c04253d898 100644 > --- a/libavfilter/formats.c > +++ b/libavfilter/formats.c > @@ -348,21 +348,48 @@ int ff_add_channel_layout(AVFilterChannelLayouts **l, > uint64_t channel_layout) > > AVFilterFormats *ff_all_formats(enum AVMediaType type) > { > - AVFilterFormats *ret = NULL; > + int count, i; > + AVFilterFormats *ret = av_mallocz(sizeof(*ret)); > + > + if (!ret) > + return 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; > + > + count = 0; > + while ((desc = av_pix_fmt_desc_next(desc))) > + count++; > + > + ret->formats = av_malloc_array(count, sizeof(*ret->formats)); > + if (!ret->formats) { > + av_free(ret); > + return NULL; > + } > + ret->nb_formats = count; > + > + for (i = 0, desc = NULL; i < count; i++) { > + desc = av_pix_fmt_desc_next(desc); > + ret->formats[i] = av_pix_fmt_desc_get_id(desc); > } > } else if (type == AVMEDIA_TYPE_AUDIO) { > enum AVSampleFormat fmt = 0; > - while (av_get_sample_fmt_name(fmt)) { > - if (ff_add_format(&ret, fmt) < 0) > - return NULL; > - fmt++; > + > + count = 0; > + while (av_get_sample_fmt_name(fmt)) > + count++; > + > + ret->formats = av_malloc_array(count, sizeof(*ret->formats)); > + if (!ret->formats) { > + av_free(ret); > + return NULL; > } > + ret->nb_formats = count; > + > + for (fmt = 0; fmt < count; fmt++) > + ret->formats[fmt] = fmt; > + } else { > + av_freep(&ret); > } > > return ret; > -- > 2.22.0 >
There is somekind of infinite loop here. Gets stuck in fate during: TEST lavf-mxf -- Andriy _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".