Browse Source

graphparser: allow specifying sws flags in the graph description.

tags/n0.11
Anton Khirnov 13 years ago
parent
commit
12e7e1d03e
2 changed files with 36 additions and 1 deletions
  1. +7
    -1
      doc/filters.texi
  2. +29
    -0
      libavfilter/graphparser.c

+ 7
- 1
doc/filters.texi View File

@@ -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


+ 29
- 0
libavfilter/graphparser.c View File

@@ -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 += 4; // keep the 'flags=' part

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);


Loading…
Cancel
Save