History

avfiltergraph: change the syntax of avfilter_graph_parse()

Make it returns the list of open inputs and outputs, so it can be reused by applications. Breaks API/ABI.

Stefano Sabatini committed 15 years ago

Commit 6119b231 parent 86909dd6 files · +22 −17Browse files

Unified · Split

6 files
  1. doc/APIchanges +3 −0
  2. ffmpeg.c +1 −1
  3. ffplay.c +1 −1
  4. libavfilter/avfilter.h +2 −2
  5. libavfilter/avfiltergraph.h +5 −3
  6. libavfilter/graphparser.c +10 −10
doc/APIchanges+3−0
@@ -13,6 +13,9 @@ libavutil: 2011-04-18 · 12 unmodified lines
13 13
14API changes, most recent first:14API changes, most recent first:
15 15
162011-06-12 - xxxxxxx - lavfi 2.16.0 - avfilter_graph_parse()
17 Change avfilter_graph_parse() signature.
18
162011-06-xx - xxxxxxx - lavu 51.6.0 - opt.h192011-06-xx - xxxxxxx - lavu 51.6.0 - opt.h
17 Add av_opt_flag_is_set().20 Add av_opt_flag_is_set().
18 21
ffmpeg.c+1−1
@@ -418,7 +418,7 @@ static int configure_video_filters(AVInputStream *ist, AVOutputStream *ost) · 417 unmodified lines
418 inputs->pad_idx = 0;418 inputs->pad_idx = 0;
419 inputs->next = NULL;419 inputs->next = NULL;
420 420
421 if ((ret = avfilter_graph_parse(ost->graph, ost->avfilter, inputs, outputs, NULL)) < 0)421 if ((ret = avfilter_graph_parse(ost->graph, ost->avfilter, &inputs, &outputs, NULL)) < 0)
422 return ret;422 return ret;
423 av_freep(&ost->avfilter);423 av_freep(&ost->avfilter);
424 } else {424 } else {
ffplay.c+1−1
@@ -1708,7 +1708,7 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c · 1707 unmodified lines
1708 inputs->pad_idx = 0;1708 inputs->pad_idx = 0;
1709 inputs->next = NULL;1709 inputs->next = NULL;
1710 1710
1711 if ((ret = avfilter_graph_parse(graph, vfilters, inputs, outputs, NULL)) < 0)1711 if ((ret = avfilter_graph_parse(graph, vfilters, &inputs, &outputs, NULL)) < 0)
1712 goto the_end;1712 goto the_end;
1713 av_freep(&vfilters);1713 av_freep(&vfilters);
1714 } else {1714 } else {
libavfilter/avfilter.h+2−2
@@ -26,8 +26,8 @@ · 25 unmodified lines
26#include "libavutil/samplefmt.h"26#include "libavutil/samplefmt.h"
27 27
28#define LIBAVFILTER_VERSION_MAJOR 228#define LIBAVFILTER_VERSION_MAJOR 2
29#define LIBAVFILTER_VERSION_MINOR 1529#define LIBAVFILTER_VERSION_MINOR 16
30#define LIBAVFILTER_VERSION_MICRO 130#define LIBAVFILTER_VERSION_MICRO 0
31 31
32#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \32#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
33 LIBAVFILTER_VERSION_MINOR, \33 LIBAVFILTER_VERSION_MINOR, \
libavfilter/avfiltergraph.h+5−3
@@ -112,12 +112,14 @@ typedef struct AVFilterInOut { · 111 unmodified lines
112 *112 *
113 * @param graph the filter graph where to link the parsed graph context113 * @param graph the filter graph where to link the parsed graph context
114 * @param filters string to be parsed114 * @param filters string to be parsed
115 * @param inputs linked list to the inputs of the graph115 * @param inputs linked list to the inputs of the graph, may be NULL.
116 * @param outputs linked list to the outputs of the graph116 * It is updated to contain the list of open inputs after the parsing.
117 * @param outputs linked list to the outputs of the graph, may be NULL.
118 * It is updated to contain the list of open outputs after the parsing.
117 * @return zero on success, a negative AVERROR code on error119 * @return zero on success, a negative AVERROR code on error
118 */120 */
119int avfilter_graph_parse(AVFilterGraph *graph, const char *filters,121int avfilter_graph_parse(AVFilterGraph *graph, const char *filters,
120 AVFilterInOut *inputs, AVFilterInOut *outputs,122 AVFilterInOut **inputs, AVFilterInOut **outputs,
121 void *log_ctx);123 void *log_ctx);
122 124
123#endif /* AVFILTER_AVFILTERGRAPH_H */125#endif /* AVFILTER_AVFILTERGRAPH_H */
libavfilter/graphparser.c+10−10
@@ -328,8 +328,8 @@ static int parse_outputs(const char **buf, AVFilterInOut **curr_inputs, · 327 unmodified lines
328}328}
329 329
330int avfilter_graph_parse(AVFilterGraph *graph, const char *filters,330int avfilter_graph_parse(AVFilterGraph *graph, const char *filters,
331 AVFilterInOut *open_inputs,331 AVFilterInOut **open_inputs, AVFilterInOut **open_outputs,
332 AVFilterInOut *open_outputs, void *log_ctx)332 void *log_ctx)
333{333{
334 int index = 0, ret;334 int index = 0, ret;
335 char chr = 0;335 char chr = 0;
@@ -341,7 +341,7 @@ int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, · 5 unmodified lines
341 const char *filterchain = filters;341 const char *filterchain = filters;
342 filters += strspn(filters, WHITESPACES);342 filters += strspn(filters, WHITESPACES);
343 343
344 if ((ret = parse_inputs(&filters, &curr_inputs, &open_outputs, log_ctx)) < 0)344 if ((ret = parse_inputs(&filters, &curr_inputs, open_outputs, log_ctx)) < 0)
345 goto fail;345 goto fail;
346 346
347 if ((ret = parse_filter(&filter, &filters, graph, index, log_ctx)) < 0)347 if ((ret = parse_filter(&filter, &filters, graph, index, log_ctx)) < 0)
@@ -350,14 +350,14 @@ int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, · 2 unmodified lines
350 if (filter->input_count == 1 && !curr_inputs && !index) {350 if (filter->input_count == 1 && !curr_inputs && !index) {
351 /* First input can be omitted if it is "[in]" */351 /* First input can be omitted if it is "[in]" */
352 const char *tmp = "[in]";352 const char *tmp = "[in]";
353 if ((ret = parse_inputs(&tmp, &curr_inputs, &open_outputs, log_ctx)) < 0)353 if ((ret = parse_inputs(&tmp, &curr_inputs, open_outputs, log_ctx)) < 0)
354 goto fail;354 goto fail;
355 }355 }
356 356
357 if ((ret = link_filter_inouts(filter, &curr_inputs, &open_inputs, log_ctx)) < 0)357 if ((ret = link_filter_inouts(filter, &curr_inputs, open_inputs, log_ctx)) < 0)
358 goto fail;358 goto fail;
359 359
360 if ((ret = parse_outputs(&filters, &curr_inputs, &open_inputs, &open_outputs,360 if ((ret = parse_outputs(&filters, &curr_inputs, open_inputs, open_outputs,
361 log_ctx)) < 0)361 log_ctx)) < 0)
362 goto fail;362 goto fail;
363 363
@@ -382,10 +382,10 @@ int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, · 18 unmodified lines
382 goto fail;382 goto fail;
383 }383 }
384 384
385 if (open_inputs && !strcmp(open_inputs->name, "out") && curr_inputs) {385 if (*open_inputs && !strcmp((*open_inputs)->name, "out") && curr_inputs) {
386 /* Last output can be omitted if it is "[out]" */386 /* Last output can be omitted if it is "[out]" */
387 const char *tmp = "[out]";387 const char *tmp = "[out]";
388 if ((ret = parse_outputs(&tmp, &curr_inputs, &open_inputs, &open_outputs,388 if ((ret = parse_outputs(&tmp, &curr_inputs, open_inputs, open_outputs,
389 log_ctx)) < 0)389 log_ctx)) < 0)
390 goto fail;390 goto fail;
391 }391 }
@@ -396,8 +396,8 @@ int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, · 4 unmodified lines
396 for (; graph->filter_count > 0; graph->filter_count--)396 for (; graph->filter_count > 0; graph->filter_count--)
397 avfilter_free(graph->filters[graph->filter_count - 1]);397 avfilter_free(graph->filters[graph->filter_count - 1]);
398 av_freep(&graph->filters);398 av_freep(&graph->filters);
399 free_inout(open_inputs);399 free_inout(*open_inputs);
400 free_inout(open_outputs);400 free_inout(*open_outputs);
401 free_inout(curr_inputs);401 free_inout(curr_inputs);
402 return ret;402 return ret;
403}403}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t