---
doc/filters.texi | 8 +++++++-
libavfilter/graphparser.c | 29 +++++++++++++++++++++++++++++
2 files changed, 36 insertions(+), 1 deletions(-)
diff --git a/doc/filters.texi b/doc/filters.texi
index 2a089be..446e124 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -76,6 +76,12 @@ In a complete filterchain all the unlabelled filter input
and output
pads must be connected. A filtergraph is considered valid if all the
filter input and output pads of all the filterchains are connected.
+Libavfilter will automatically insert scale filters where format
+conversion is required. It is possible to specify swscale flags
+for those automatically inserted scalers by prepending
+@code{sws_flags=@var{flags};}
+to the filtergraph description.
+
Follows a BNF description for the filtergraph syntax:
@example
@var{NAME} ::= sequence of alphanumeric characters and '_'
@@ -84,7 +90,7 @@ Follows a BNF description for the filtergraph syntax:
@var{FILTER_ARGUMENTS} ::= sequence of chars (eventually quoted)
@var{FILTER} ::= [@var{LINKNAMES}] @var{NAME} ["=" @var{ARGUMENTS}]
[@var{LINKNAMES}]
@var{FILTERCHAIN} ::= @var{FILTER} [,@var{FILTERCHAIN}]
-@var{FILTERGRAPH} ::= @var{FILTERCHAIN} [;@var{FILTERGRAPH}]
+@var{FILTERGRAPH} ::= [sws_flags=@var{flags};] @var{FILTERCHAIN}
[;@var{FILTERGRAPH}]
@end example
@c man end FILTERGRAPH DESCRIPTION
diff --git a/libavfilter/graphparser.c b/libavfilter/graphparser.c
index 238df06..7b13221 100644
--- a/libavfilter/graphparser.c
+++ b/libavfilter/graphparser.c
@@ -349,6 +349,30 @@ static int parse_outputs(const char **buf, AVFilterInOut
**curr_inputs,
#else
#define log_ctx NULL
#endif
+
+static int parse_sws_flags(const char **buf, AVFilterGraph *graph)
+{
+ char *p = strchr(*buf, ';');
+
+ if (strncmp(*buf, "sws_flags=", 10))
+ return 0;
+
+ if (!p) {
+ av_log(log_ctx, AV_LOG_ERROR, "sws_flags not terminated with ';'.\n");
+ return AVERROR(EINVAL);
+ }
+
+ *buf += 10;
+
+ av_freep(&graph->scale_sws_opts);
+ if (!(graph->scale_sws_opts = av_mallocz(p - *buf + 1)))
+ return AVERROR(ENOMEM);
+ av_strlcpy(graph->scale_sws_opts, *buf, p - *buf + 1);
+
+ *buf = p + 1;
+ return 0;
+}
+
int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters,
AVFilterInOut **inputs,
AVFilterInOut **outputs)
@@ -358,6 +382,11 @@ int avfilter_graph_parse2(AVFilterGraph *graph, const char
*filters,
AVFilterInOut *curr_inputs = NULL, *open_inputs = NULL, *open_outputs =
NULL;
+ filters += strspn(filters, WHITESPACES);
+
+ if ((ret = parse_sws_flags(&filters, graph)) < 0)
+ goto fail;
+
do {
AVFilterContext *filter;
filters += strspn(filters, WHITESPACES);
--
1.7.9.1
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel