> On Dec 10, 2019, at 4:20 AM, Tomas Härdin <tjop...@acc.umu.se> wrote: > > lör 2019-12-07 klockan 01:06 +0800 skrev Zhao Zhili: >> This is a micro-optimization. Saving almost 200 reallocations makes >> it >> worth a try. >> --- >> fix commit message typo: relocations -> reallocations >> >> libavfilter/formats.c | 35 +++++++++++++++++++++-------------- >> 1 file changed, 21 insertions(+), 14 deletions(-) >> >> diff --git a/libavfilter/formats.c b/libavfilter/formats.c >> index 33c64668a0..1af7a1cedd 100644 >> --- a/libavfilter/formats.c >> +++ b/libavfilter/formats.c >> @@ -348,23 +348,30 @@ int >> ff_add_channel_layout(AVFilterChannelLayouts **l, uint64_t >> channel_layout) >> >> AVFilterFormats *ff_all_formats(enum AVMediaType type) >> { >> - AVFilterFormats *ret = NULL; >> + AVFilterFormats *ret; >> + int i, count; >> >> - 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; >> - } >> - } 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++; >> - } >> + if (type == AVMEDIA_TYPE_VIDEO) >> + count = AV_PIX_FMT_NB; >> + else if (type == AVMEDIA_TYPE_AUDIO) >> + count = AV_SAMPLE_FMT_NB; >> + else >> + return NULL; >> + >> + ret = av_mallocz(sizeof(*ret)); >> + if (!ret) >> + return NULL; >> + >> + ret->nb_formats = count; >> + ret->formats = av_malloc_array(count, sizeof(*ret->formats)); >> + if (!ret->formats) { >> + av_free(ret); >> + return NULL; >> } >> >> + for (i = 0; i < count; i++) >> + ret->formats[i] = i; > > As far as I can tell this is OK, and it passes FATE. But it just looks > very very wrong. Why does this function even exist if all it > effectively does is return the integers from 0..count-1?
The function is there since the first libavfilter commit. I guess it’s for forward compatibility. I don’t know whether a ‘all_formats’ flag works or not. > > /Tomas > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel> > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org <mailto:ffmpeg-devel-requ...@ffmpeg.org> with > subject "unsubscribe". _______________________________________________ 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".