mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-17 20:17:55 +02:00
graphparser: allow specifying sws flags in the graph description.
This commit is contained in:
parent
4e781c25b7
commit
12e7e1d03e
@ -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
|
pads must be connected. A filtergraph is considered valid if all the
|
||||||
filter input and output pads of all the filterchains are connected.
|
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:
|
Follows a BNF description for the filtergraph syntax:
|
||||||
@example
|
@example
|
||||||
@var{NAME} ::= sequence of alphanumeric characters and '_'
|
@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_ARGUMENTS} ::= sequence of chars (eventually quoted)
|
||||||
@var{FILTER} ::= [@var{LINKNAMES}] @var{NAME} ["=" @var{ARGUMENTS}] [@var{LINKNAMES}]
|
@var{FILTER} ::= [@var{LINKNAMES}] @var{NAME} ["=" @var{ARGUMENTS}] [@var{LINKNAMES}]
|
||||||
@var{FILTERCHAIN} ::= @var{FILTER} [,@var{FILTERCHAIN}]
|
@var{FILTERCHAIN} ::= @var{FILTER} [,@var{FILTERCHAIN}]
|
||||||
@var{FILTERGRAPH} ::= @var{FILTERCHAIN} [;@var{FILTERGRAPH}]
|
@var{FILTERGRAPH} ::= [sws_flags=@var{flags};] @var{FILTERCHAIN} [;@var{FILTERGRAPH}]
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@c man end FILTERGRAPH DESCRIPTION
|
@c man end FILTERGRAPH DESCRIPTION
|
||||||
|
@ -349,6 +349,30 @@ static int parse_outputs(const char **buf, AVFilterInOut **curr_inputs,
|
|||||||
#else
|
#else
|
||||||
#define log_ctx NULL
|
#define log_ctx NULL
|
||||||
#endif
|
#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,
|
int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters,
|
||||||
AVFilterInOut **inputs,
|
AVFilterInOut **inputs,
|
||||||
AVFilterInOut **outputs)
|
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;
|
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 {
|
do {
|
||||||
AVFilterContext *filter;
|
AVFilterContext *filter;
|
||||||
filters += strspn(filters, WHITESPACES);
|
filters += strspn(filters, WHITESPACES);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user