diff options
author | Luca Barbato <lu_zero@gentoo.org> | 2015-09-10 17:05:56 +0200 |
---|---|---|
committer | Vittorio Giovara <vittorio.giovara@gmail.com> | 2015-09-13 17:34:45 +0200 |
commit | 285fe5b098c8fbefaed4aacdb839b760a5b7f20d (patch) | |
tree | 4f9c6673cdf29b41b71db960f0221dceb2075b8b | |
parent | c7247eb7fe2b95803983e8f7c4f0e904f050ca7b (diff) | |
download | ffmpeg-285fe5b098c8fbefaed4aacdb839b760a5b7f20d.tar.gz |
avfilter: Support both syntaxes for the scale filter
-rw-r--r-- | libavfilter/graphparser.c | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/libavfilter/graphparser.c b/libavfilter/graphparser.c index d79215bf4a..da499b52c9 100644 --- a/libavfilter/graphparser.c +++ b/libavfilter/graphparser.c @@ -81,6 +81,41 @@ static char *parse_link_name(const char **buf, void *log_ctx) return name; } +#define TMP_ARGS_SIZE 256 + +static void append_sws_flags(const char **args, const char *sws_opts, char *tmp) +{ + int nb_opts = 0; + const char *separator = ":"; + const char *opt = *args; + + if (strstr(*args, "flags")) + return; + + if (strstr(*args, "=")) + separator = ":flags="; + + while ((opt = strstr(opt, ":")) && *opt) { + av_log(NULL, AV_LOG_INFO, "opts '%s' \n", opt); + if (nb_opts > 2) { + return; + } + nb_opts++; + opt++; + } + + opt = strstr(sws_opts, "flags="); + if (opt && strlen(opt) > 6) + opt += 6; + else + opt = sws_opts; + + snprintf(tmp, TMP_ARGS_SIZE, "%s%s%s", + *args, separator, opt); + + *args = tmp; +} + /** * Create an instance of a filter, initialize and insert it in the * filtergraph in *ctx. @@ -98,7 +133,7 @@ static int create_filter(AVFilterContext **filt_ctx, AVFilterGraph *ctx, int ind { AVFilter *filt; char inst_name[30]; - char tmp_args[256]; + char tmp_args[TMP_ARGS_SIZE]; int ret; snprintf(inst_name, sizeof(inst_name), "Parsed filter %d %s", index, filt_name); @@ -118,11 +153,9 @@ static int create_filter(AVFilterContext **filt_ctx, AVFilterGraph *ctx, int ind return AVERROR(ENOMEM); } - if (!strcmp(filt_name, "scale") && args && !strstr(args, "flags") && + if (!strcmp(filt_name, "scale") && args && ctx->scale_sws_opts) { - snprintf(tmp_args, sizeof(tmp_args), "%s:%s", - args, ctx->scale_sws_opts); - args = tmp_args; + append_sws_flags(&args, ctx->scale_sws_opts, tmp_args); } ret = avfilter_init_str(*filt_ctx, args); |