1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

avfiltergraph: make the AVFilterInOut alloc/free API public

This is required for letting applications to create and destroy
AVFilterInOut structs in a convenient way.

Signed-off-by: Anton Khirnov <anton@khirnov.net>
This commit is contained in:
Stefano Sabatini 2011-06-11 15:30:46 +02:00 committed by Anton Khirnov
parent 12e7e1d03e
commit 91d3cbe0fd
6 changed files with 42 additions and 20 deletions

View File

@ -592,8 +592,8 @@ static int configure_video_filters(InputStream *ist, OutputStream *ost)
ost->graph->scale_sws_opts = av_strdup(args); ost->graph->scale_sws_opts = av_strdup(args);
if (ost->avfilter) { if (ost->avfilter) {
AVFilterInOut *outputs = av_malloc(sizeof(AVFilterInOut)); AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = av_malloc(sizeof(AVFilterInOut)); AVFilterInOut *inputs = avfilter_inout_alloc();
outputs->name = av_strdup("in"); outputs->name = av_strdup("in");
outputs->filter_ctx = last_filter; outputs->filter_ctx = last_filter;

View File

@ -1716,8 +1716,8 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
return ret; return ret;
if (vfilters) { if (vfilters) {
AVFilterInOut *outputs = av_malloc(sizeof(AVFilterInOut)); AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = av_malloc(sizeof(AVFilterInOut)); AVFilterInOut *inputs = avfilter_inout_alloc();
outputs->name = av_strdup("in"); outputs->name = av_strdup("in");
outputs->filter_ctx = filt_src; outputs->filter_ctx = filt_src;

View File

@ -12,6 +12,10 @@ libavutil: 2011-04-18
API changes, most recent first: API changes, most recent first:
2012-xx-xx - xxxxxxx - lavfi 2.16.0 - avfiltergraph.h
Add avfilter_graph_parse2(), avfilter_inout_alloc() and
avfilter_inout_free() functions.
2012-xx-xx - xxxxxxx - lavu 51.27.0 - samplefmt.h 2012-xx-xx - xxxxxxx - lavu 51.27.0 - samplefmt.h
Add av_get_packed_sample_fmt() and av_get_planar_sample_fmt() Add av_get_packed_sample_fmt() and av_get_planar_sample_fmt()

View File

@ -111,6 +111,19 @@ typedef struct AVFilterInOut {
struct AVFilterInOut *next; struct AVFilterInOut *next;
} AVFilterInOut; } AVFilterInOut;
/**
* Allocate a single AVFilterInOut entry.
* Must be freed with avfilter_inout_free().
* @return allocated AVFilterInOut on success, NULL on failure.
*/
AVFilterInOut *avfilter_inout_alloc(void);
/**
* Free the supplied list of AVFilterInOut and set *inout to NULL.
* If *inout is NULL, do nothing.
*/
void avfilter_inout_free(AVFilterInOut **inout);
/** /**
* Add a graph described by a string to a graph. * Add a graph described by a string to a graph.
* *

View File

@ -170,13 +170,18 @@ static int parse_filter(AVFilterContext **filt_ctx, const char **buf, AVFilterGr
return ret; return ret;
} }
static void free_inout(AVFilterInOut *head) AVFilterInOut *avfilter_inout_alloc(void)
{ {
while (head) { return av_mallocz(sizeof(AVFilterInOut));
AVFilterInOut *next = head->next; }
av_free(head->name);
av_free(head); void avfilter_inout_free(AVFilterInOut **inout)
head = next; {
while (*inout) {
AVFilterInOut *next = (*inout)->next;
av_freep(&(*inout)->name);
av_freep(inout);
*inout = next;
} }
} }
@ -431,9 +436,9 @@ int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters,
for (; graph->filter_count > 0; graph->filter_count--) for (; graph->filter_count > 0; graph->filter_count--)
avfilter_free(graph->filters[graph->filter_count - 1]); avfilter_free(graph->filters[graph->filter_count - 1]);
av_freep(&graph->filters); av_freep(&graph->filters);
free_inout(open_inputs); avfilter_inout_free(&open_inputs);
free_inout(open_outputs); avfilter_inout_free(&open_outputs);
free_inout(curr_inputs); avfilter_inout_free(&curr_inputs);
*inputs = NULL; *inputs = NULL;
*outputs = NULL; *outputs = NULL;
@ -467,7 +472,7 @@ int avfilter_graph_parse(AVFilterGraph *graph, const char *filters,
continue; continue;
ret = avfilter_link(match->filter_ctx, match->pad_idx, ret = avfilter_link(match->filter_ctx, match->pad_idx,
cur->filter_ctx, cur->pad_idx); cur->filter_ctx, cur->pad_idx);
free_inout(match); avfilter_inout_free(&match);
if (ret < 0) if (ret < 0)
goto fail; goto fail;
} }
@ -487,7 +492,7 @@ int avfilter_graph_parse(AVFilterGraph *graph, const char *filters,
continue; continue;
ret = avfilter_link(cur->filter_ctx, cur->pad_idx, ret = avfilter_link(cur->filter_ctx, cur->pad_idx,
match->filter_ctx, match->pad_idx); match->filter_ctx, match->pad_idx);
free_inout(match); avfilter_inout_free(&match);
if (ret < 0) if (ret < 0)
goto fail; goto fail;
} }
@ -498,9 +503,9 @@ int avfilter_graph_parse(AVFilterGraph *graph, const char *filters,
avfilter_free(graph->filters[graph->filter_count - 1]); avfilter_free(graph->filters[graph->filter_count - 1]);
av_freep(&graph->filters); av_freep(&graph->filters);
} }
free_inout(inputs); avfilter_inout_free(&inputs);
free_inout(outputs); avfilter_inout_free(&outputs);
free_inout(open_inputs); avfilter_inout_free(&open_inputs);
free_inout(open_outputs); avfilter_inout_free(&open_outputs);
return ret; return ret;
} }

View File

@ -29,7 +29,7 @@
#include "libavutil/avutil.h" #include "libavutil/avutil.h"
#define LIBAVFILTER_VERSION_MAJOR 2 #define LIBAVFILTER_VERSION_MAJOR 2
#define LIBAVFILTER_VERSION_MINOR 15 #define LIBAVFILTER_VERSION_MINOR 16
#define LIBAVFILTER_VERSION_MICRO 0 #define LIBAVFILTER_VERSION_MICRO 0
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \