diff options
author | S.N. Hemanth Meenakshisundaram <smeenaks@ucsd.edu> | 2010-07-22 11:12:47 +0000 |
---|---|---|
committer | Stefano Sabatini <stefano.sabatini-lala@poste.it> | 2010-07-22 11:12:47 +0000 |
commit | bdab614be8df5681b7fbb89abfd08312f2686279 (patch) | |
tree | 0bb0e0fcbf6944d69ab2567197fbd52aa2bb281f /libavfilter/formats.c | |
parent | 98137a1a5b1a4438ab4d84e63a957dc83c7dacaf (diff) |
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
Diffstat (limited to 'libavfilter/formats.c')
-rw-r--r-- | libavfilter/formats.c | 32 |
1 files changed, 17 insertions, 15 deletions
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; } |