The flags are redundant now, but maybe this makes the code less readable Signed-off-by: Michael Niedermayer <mich...@niedermayer.cc> --- libavfilter/avfilter.c | 8 +++----- libavfilter/avfilter.h | 15 ++++++++------- libavfilter/avfiltergraph.c | 6 +----- libavfilter/buffersink.c | 2 +- 4 files changed, 13 insertions(+), 18 deletions(-)
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index e270628..6ee97bf 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -183,7 +183,7 @@ int avfilter_link_get_channels(AVFilterLink *link) #define MAKE_SET_CLEAR_FRAME_WANTED_FUNC(DIR) \ static void set_frame_wanted_ ## DIR(AVFilterLink *link)\ {\ - if (!link->frame_wanted_ ## DIR) {\ + if (!link->next_link_wanting_frame_ ## DIR) {\ AVFilterGraph *graph = link->graph;\ AVFilterLink *next, *prev;\ next = graph->next_link_wanting_frame_ ## DIR;\ @@ -196,13 +196,12 @@ static void set_frame_wanted_ ## DIR(AVFilterLink *link)\ prev->prev_link_wanting_frame_ ## DIR = \ next->prev_link_wanting_frame_ ## DIR = link;\ graph->next_link_wanting_frame_ ## DIR = link;\ - link->frame_wanted_ ## DIR = 1;\ }\ }\ \ static void clear_frame_wanted_ ## DIR(AVFilterLink *link)\ {\ - if (link->frame_wanted_ ## DIR) {\ + if (link->next_link_wanting_frame_ ## DIR) {\ AVFilterGraph *graph = link->graph;\ AVFilterLink *prev = link->prev_link_wanting_frame_ ## DIR;\ AVFilterLink *next = link->next_link_wanting_frame_ ## DIR;\ @@ -211,7 +210,6 @@ static void clear_frame_wanted_ ## DIR(AVFilterLink *link)\ link->next_link_wanting_frame_ ## DIR = NULL;\ graph->next_link_wanting_frame_ ## DIR = prev->next_link_wanting_frame_ ## DIR;\ link->prev_link_wanting_frame_ ## DIR = NULL;\ - link->frame_wanted_ ## DIR = 0;\ }\ } @@ -1207,7 +1205,7 @@ static int ff_filter_frame_needs_framing(AVFilterLink *link, AVFrame *frame) ret = ff_filter_frame_framed(link, pbuf); pbuf = NULL; } else { - if (link->frame_wanted_out) + if (link->next_link_wanting_frame_out) set_frame_wanted_in(link); } } diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index 7d05f4c..5c08e71 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -538,21 +538,22 @@ struct AVFilterLink { void *video_frame_pool; /** - * True if a frame is currently wanted on the input of this filter. + * Non NULL if a frame is currently wanted on the input of this filter. * Set when ff_request_frame() is called by the output, * cleared when the request is handled or forwarded. + * This is a double linked circular linked list of all links in the AVFilterGraph + * which want a frame in. */ - int frame_wanted_in; + AVFilterLink *next_link_wanting_frame_in; + AVFilterLink *prev_link_wanting_frame_in; /** - * True if a frame is currently wanted on the output of this filter. + * Non NULL if a frame is currently wanted on the output of this filter. * Set when ff_request_frame() is called by the output, * cleared when a frame is filtered. + * This is a double linked circular linked list of all links in the AVFilterGraph + * which want a frame out. */ - int frame_wanted_out; - - AVFilterLink *next_link_wanting_frame_in; - AVFilterLink *prev_link_wanting_frame_in; AVFilterLink *next_link_wanting_frame_out; AVFilterLink *prev_link_wanting_frame_out; }; diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c index af6a554..694f776 100644 --- a/libavfilter/avfiltergraph.c +++ b/libavfilter/avfiltergraph.c @@ -1395,7 +1395,7 @@ int avfilter_graph_request_oldest(AVFilterGraph *graph) if (!graph->sink_links_count) return AVERROR_EOF; av_assert1(oldest->age_index >= 0); - while (oldest->frame_wanted_out) { + while (oldest->next_link_wanting_frame_out) { r = ff_filter_graph_run_once(graph); if (r < 0) return r; @@ -1406,14 +1406,10 @@ int avfilter_graph_request_oldest(AVFilterGraph *graph) static AVFilterLink *graph_run_once_find_filter(AVFilterGraph *graph) { AVFilterLink *link = graph->next_link_wanting_frame_in; - if (link) - av_assert0(link->frame_wanted_in); if (!link) link = graph->next_link_wanting_frame_out; if (link) av_assert0(link->graph == graph); - if (link) - av_assert0(link->frame_wanted_in || link->frame_wanted_out); return link; } diff --git a/libavfilter/buffersink.c b/libavfilter/buffersink.c index 2feb56d..eb5955c 100644 --- a/libavfilter/buffersink.c +++ b/libavfilter/buffersink.c @@ -140,7 +140,7 @@ int attribute_align_arg av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFr return AVERROR(EAGAIN); if ((ret = ff_request_frame(inlink)) < 0) return ret; - while (inlink->frame_wanted_out) { + while (inlink->next_link_wanting_frame_out) { ret = ff_filter_graph_run_once(ctx->graph); if (ret < 0) return ret; -- 1.7.9.5 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel