diff options
author | Vitor Sessak <vitor1001@gmail.com> | 2008-02-15 22:00:03 +0000 |
---|---|---|
committer | Vitor Sessak <vitor1001@gmail.com> | 2008-02-15 22:00:03 +0000 |
commit | e363730c015e2c58e6fd9d1016441d1c09efd5bf (patch) | |
tree | c740d41e22cac18d73167362128feaf985a8be06 /libavfilter/defaults.c | |
parent | d0e4eba57cb773aefeda65c2a795a296e3ea9784 (diff) | |
download | ffmpeg-e363730c015e2c58e6fd9d1016441d1c09efd5bf.tar.gz |
Rewrite colorspace negotiation.
Commited in SoC by Bobby Bingham on 2007-12-20 19:36:26
Originally committed as revision 12072 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavfilter/defaults.c')
-rw-r--r-- | libavfilter/defaults.c | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/libavfilter/defaults.c b/libavfilter/defaults.c index 4736c96d5c..ae85b5bf2b 100644 --- a/libavfilter/defaults.c +++ b/libavfilter/defaults.c @@ -115,15 +115,40 @@ int avfilter_default_config_input_link(AVFilterLink *link) } /** - * default query_formats() implementation for output video links to simplify - * the implementation of one input one output video filters */ -int *avfilter_default_query_output_formats(AVFilterLink *link) + * A helper for query_formats() which sets all links to the same list of + * formats. If there are no links hooked to this filter, the list of formats is + * freed. + * + * FIXME: this will need changed for filters with a mix of pad types + * (video + audio, etc) + */ +void avfilter_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats) { - if(link->src->input_count && link->src->inputs[0]) - return avfilter_make_format_list(1, link->src->inputs[0]->format); - else - /* XXX: any non-simple filter which would cause this branch to be taken - * really should implement its own query_formats() for this link */ - return avfilter_make_format_list(0); + int count = 0, i; + + for(i = 0; i < ctx->input_count; i ++) { + if(ctx->inputs[i]) { + avfilter_formats_ref(formats, &ctx->inputs[i]->out_formats); + count ++; + } + } + for(i = 0; i < ctx->output_count; i ++) { + if(ctx->outputs[i]) { + avfilter_formats_ref(formats, &ctx->outputs[i]->in_formats); + count ++; + } + } + + if(!count) { + av_free(formats->formats); + av_free(formats->refs); + av_free(formats); + } +} + +int avfilter_default_query_formats(AVFilterContext *ctx) +{ + avfilter_set_common_formats(ctx, avfilter_all_colorspaces()); + return 0; } |