From 88c3b87bd81829d1b7171cb26e5ef5a564dbd96a Mon Sep 17 00:00:00 2001 From: Mina Nagy Zaki Date: Thu, 4 Aug 2011 15:47:00 +0300 Subject: lavfi: deprecate default config_props() callback and refactor avfilter_config_links() Link properties have to be checked after config_props() is called to make sure everything is sane, so the default config_props() for output links was redundant. Remove now empty defaults.c Signed-off-by: Anton Khirnov --- libavfilter/Makefile | 1 - libavfilter/avfilter.c | 39 +++++++++++++++++++++++++++++++++------ libavfilter/avfilter.h | 3 +++ libavfilter/defaults.c | 48 ------------------------------------------------ libavfilter/version.h | 3 +++ 5 files changed, 39 insertions(+), 55 deletions(-) delete mode 100644 libavfilter/defaults.c (limited to 'libavfilter') diff --git a/libavfilter/Makefile b/libavfilter/Makefile index 8649222ed2..212e992c3e 100644 --- a/libavfilter/Makefile +++ b/libavfilter/Makefile @@ -18,7 +18,6 @@ OBJS = allfilters.o \ buffer.o \ buffersink.o \ buffersrc.o \ - defaults.o \ drawutils.o \ formats.o \ graphparser.o \ diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index 231c875131..2f5c37d3af 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -155,18 +155,38 @@ int avfilter_config_links(AVFilterContext *filter) if ((ret = avfilter_config_links(link->src)) < 0) return ret; - if (!(config_link = link->srcpad->config_props)) - config_link = avfilter_default_config_output_link; - if ((ret = config_link(link)) < 0) + if (!(config_link = link->srcpad->config_props)) { + if (link->src->input_count != 1) { + av_log(link->src, AV_LOG_ERROR, "Source filters and filters " + "with more than one input " + "must set config_props() " + "callbacks on all outputs\n"); + return AVERROR(EINVAL); + } + } else if ((ret = config_link(link)) < 0) return ret; if (link->time_base.num == 0 && link->time_base.den == 0) link->time_base = link->src && link->src->input_count ? link->src->inputs[0]->time_base : AV_TIME_BASE_Q; - if (link->sample_aspect_ratio.num == 0 && link->sample_aspect_ratio.den == 0) - link->sample_aspect_ratio = link->src->input_count ? - link->src->inputs[0]->sample_aspect_ratio : (AVRational){1,1}; + if (link->type == AVMEDIA_TYPE_VIDEO) { + if (!link->sample_aspect_ratio.num && !link->sample_aspect_ratio.den) + link->sample_aspect_ratio = link->src->input_count ? + link->src->inputs[0]->sample_aspect_ratio : (AVRational){1,1}; + + if (link->src->input_count) { + if (!link->w) + link->w = link->src->inputs[0]->w; + if (!link->h) + link->h = link->src->inputs[0]->h; + } else if (!link->w || !link->h) { + av_log(link->src, AV_LOG_ERROR, + "Video source filters must set their output link's " + "width and height\n"); + return AVERROR(EINVAL); + } + } if ((config_link = link->dstpad->config_props)) if ((ret = config_link(link)) < 0) @@ -400,3 +420,10 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque ret = filter->filter->init(filter, args, opaque); return ret; } + +#if FF_API_DEFAULT_CONFIG_OUTPUT_LINK +int avfilter_default_config_output_link(AVFilterLink *link) +{ + return 0; +} +#endif diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index 718f77df3d..711feca9e1 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -460,8 +460,11 @@ void avfilter_default_draw_slice(AVFilterLink *link, int y, int h, int slice_dir /** default handler for end_frame() for video inputs */ void avfilter_default_end_frame(AVFilterLink *link); +#if FF_API_DEFAULT_CONFIG_OUTPUT_LINK /** default handler for config_props() for audio/video outputs */ +attribute_deprecated int avfilter_default_config_output_link(AVFilterLink *link); +#endif /** default handler for get_video_buffer() for video inputs */ AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, diff --git a/libavfilter/defaults.c b/libavfilter/defaults.c deleted file mode 100644 index ec61480c34..0000000000 --- a/libavfilter/defaults.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Filter layer - default implementations - * Copyright (c) 2007 Bobby Bingham - * - * This file is part of Libav. - * - * Libav is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * Libav is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with Libav; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "libavutil/audioconvert.h" -#include "libavutil/imgutils.h" -#include "libavutil/samplefmt.h" - -#include "avfilter.h" -#include "internal.h" -#include "formats.h" - -/** - * default config_link() implementation for output video links to simplify - * the implementation of one input one output video filters */ -int avfilter_default_config_output_link(AVFilterLink *link) -{ - if (link->src->input_count && link->src->inputs[0]) { - if (link->type == AVMEDIA_TYPE_VIDEO) { - link->w = link->src->inputs[0]->w; - link->h = link->src->inputs[0]->h; - link->time_base = link->src->inputs[0]->time_base; - } - } else { - /* XXX: any non-simple filter which would cause this branch to be taken - * really should implement its own config_props() for this link. */ - return -1; - } - - return 0; -} diff --git a/libavfilter/version.h b/libavfilter/version.h index f6497db364..5dd81c1dcd 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -53,5 +53,8 @@ #ifndef FF_API_VSRC_BUFFER_ADD_FRAME #define FF_API_VSRC_BUFFER_ADD_FRAME (LIBAVFILTER_VERSION_MAJOR < 3) #endif +#ifndef FF_API_DEFAULT_CONFIG_OUTPUT_LINK +#define FF_API_DEFAULT_CONFIG_OUTPUT_LINK (LIBAVFILTER_VERSION_MAJOR < 3) +#endif #endif // AVFILTER_VERSION_H -- cgit v1.2.3