- ret = av_mallocz(sizeof(AVFilterFormats));
- ret->formats = av_malloc(sizeof(*ret->formats) * PIX_FMT_NB);
- ret->format_count = PIX_FMT_NB;
+ if (!(*avff) && !(*avff = av_mallocz(sizeof(AVFilterFormats))))
+ return AVERROR(ENOMEM);
+
+ fmts = av_realloc((*avff)->formats,
+ sizeof((*avff)->formats) * ((*avff)->format_count+1));
+ if (!fmts)
+ return AVERROR(ENOMEM);
+
+ (*avff)->formats = fmts;
+ (*avff)->formats[(*avff)->format_count++] = fmt;
+ return 0;
+}
+
+AVFilterFormats *avfilter_all_formats(enum AVMediaType type)
+{
+ AVFilterFormats *ret = NULL;
+ int fmt;
+ int num_formats = type == AVMEDIA_TYPE_VIDEO ? PIX_FMT_NB :
+ type == AVMEDIA_TYPE_AUDIO ? AV_SAMPLE_FMT_NB : 0;