From bdab614be8df5681b7fbb89abfd08312f2686279 Mon Sep 17 00:00:00 2001 From: "S.N. Hemanth Meenakshisundaram" Date: Thu, 22 Jul 2010 11:12:47 +0000 Subject: Generalize pixel format enum fields to int formats. This is needed to make the libavfilter framework work with audio filters. In particular add a type field to AVFilterLink, change the field types: enum PixelFormat format -> int format in AVFilterBuffer enum PixelFormat *formats -> int *formats in AVFilterFormats enum PixelFormat *format -> int format in AVFilterLink and change the function signatures: AVFilterFormats *avfilter_make_format_list(const enum PixelFormat *pix_fmts); -> AVFilterFormats *avfilter_make_format_list(const int *fmts); int avfilter_add_colorspace(AVFilterFormats **avff, enum PixelFormat pix_fmt); -> int avfilter_add_format(AVFilterFormats **avff, int fmt); AVFilterFormats *avfilter_all_colorspaces(void); -> AVFilterFormats *avfilter_all_formats(enum AVMediaType type); This change breaks libavfilter API/ABI. Patch by S.N. Hemanth Meenakshisundaram |smeenaks|ucsd|edu|. Originally committed as revision 24424 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavfilter/formats.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) (limited to 'libavfilter/formats.c') diff --git a/libavfilter/formats.c b/libavfilter/formats.c index 2a9bdb0bd0..f60a4e6966 100644 --- a/libavfilter/formats.c +++ b/libavfilter/formats.c @@ -70,47 +70,49 @@ AVFilterFormats *avfilter_merge_formats(AVFilterFormats *a, AVFilterFormats *b) return ret; } -AVFilterFormats *avfilter_make_format_list(const enum PixelFormat *pix_fmts) +AVFilterFormats *avfilter_make_format_list(const int *fmts) { AVFilterFormats *formats; int count; - for (count = 0; pix_fmts[count] != PIX_FMT_NONE; count++) + for (count = 0; fmts[count] != -1; count++) ; formats = av_mallocz(sizeof(AVFilterFormats)); formats->formats = av_malloc(sizeof(*formats->formats) * count); formats->format_count = count; - memcpy(formats->formats, pix_fmts, sizeof(*formats->formats) * count); + memcpy(formats->formats, fmts, sizeof(*formats->formats) * count); return formats; } -int avfilter_add_colorspace(AVFilterFormats **avff, enum PixelFormat pix_fmt) +int avfilter_add_format(AVFilterFormats **avff, int fmt) { - enum PixelFormat *pix_fmts; + int *fmts; if (!(*avff) && !(*avff = av_mallocz(sizeof(AVFilterFormats)))) return AVERROR(ENOMEM); - pix_fmts = av_realloc((*avff)->formats, - sizeof((*avff)->formats) * ((*avff)->format_count+1)); - if (!pix_fmts) + fmts = av_realloc((*avff)->formats, + sizeof((*avff)->formats) * ((*avff)->format_count+1)); + if (!fmts) return AVERROR(ENOMEM); - (*avff)->formats = pix_fmts; - (*avff)->formats[(*avff)->format_count++] = pix_fmt; + (*avff)->formats = fmts; + (*avff)->formats[(*avff)->format_count++] = fmt; return 0; } -AVFilterFormats *avfilter_all_colorspaces(void) +AVFilterFormats *avfilter_all_formats(enum AVMediaType type) { AVFilterFormats *ret = NULL; - enum PixelFormat pix_fmt; + int fmt; + int num_formats = type == AVMEDIA_TYPE_VIDEO ? PIX_FMT_NB : 0; - for (pix_fmt = 0; pix_fmt < PIX_FMT_NB; pix_fmt++) - if (!(av_pix_fmt_descriptors[pix_fmt].flags & PIX_FMT_HWACCEL)) - avfilter_add_colorspace(&ret, pix_fmt); + for (fmt = 0; fmt < num_formats; fmt++) + if ((type != AVMEDIA_TYPE_VIDEO) || + (type == AVMEDIA_TYPE_VIDEO && !(av_pix_fmt_descriptors[fmt].flags & PIX_FMT_HWACCEL))) + avfilter_add_format(&ret, fmt); return ret; } -- cgit v1.2.3