History

lavfi: move AVFilterLink.frame_wanted_out to FilterLinkInternal

Anton Khirnov committed 2 years ago

Commit fb3efef1 parent 42cbf666 files · +25 −21Browse files

Showing the changes to libavfilter (6 of 6 files). Show all

Unified · Split

6 files
  1. libavfilter/avfilter.c +14 −8
  2. libavfilter/avfilter.h +0 −7
  3. libavfilter/avfilter_internal.h +7 −0
  4. libavfilter/avfiltergraph.c +1 −1
  5. libavfilter/buffersink.c +2 −1
  6. libavfilter/filters.h +1 −4
libavfilter/avfilter.c+14−8
@@ -264,7 +264,7 @@ void ff_avfilter_link_set_in_status(AVFilterLink *link, int status, int64_t pts) · 263 unmodified lines
264 av_assert0(!li->status_in);264 av_assert0(!li->status_in);
265 li->status_in = status;265 li->status_in = status;
266 li->status_in_pts = pts;266 li->status_in_pts = pts;
267 link->frame_wanted_out = 0;267 li->frame_wanted_out = 0;
268 li->frame_blocked_in = 0;268 li->frame_blocked_in = 0;
269 filter_unblock(link->dst);269 filter_unblock(link->dst);
270 ff_filter_set_ready(link->dst, 200);270 ff_filter_set_ready(link->dst, 200);
@@ -278,7 +278,7 @@ static void link_set_out_status(AVFilterLink *link, int status, int64_t pts) · 7 unmodified lines
278{278{
279 FilterLinkInternal * const li = ff_link_internal(link);279 FilterLinkInternal * const li = ff_link_internal(link);
280 280
281 av_assert0(!link->frame_wanted_out);281 av_assert0(!li->frame_wanted_out);
282 av_assert0(!li->status_out);282 av_assert0(!li->status_out);
283 li->status_out = status;283 li->status_out = status;
284 if (pts != AV_NOPTS_VALUE)284 if (pts != AV_NOPTS_VALUE)
@@ -481,7 +481,7 @@ int ff_request_frame(AVFilterLink *link) · 196 unmodified lines
481 return li->status_out;481 return li->status_out;
482 if (li->status_in) {482 if (li->status_in) {
483 if (ff_framequeue_queued_frames(&li->fifo)) {483 if (ff_framequeue_queued_frames(&li->fifo)) {
484 av_assert1(!link->frame_wanted_out);484 av_assert1(!li->frame_wanted_out);
485 av_assert1(link->dst->ready >= 300);485 av_assert1(link->dst->ready >= 300);
486 return 0;486 return 0;
487 } else {487 } else {
@@ -492,7 +492,7 @@ int ff_request_frame(AVFilterLink *link) · 4 unmodified lines
492 return li->status_out;492 return li->status_out;
493 }493 }
494 }494 }
495 link->frame_wanted_out = 1;495 li->frame_wanted_out = 1;
496 ff_filter_set_ready(link->src, 100);496 ff_filter_set_ready(link->src, 100);
497 return 0;497 return 0;
498}498}
@@ -1058,7 +1058,7 @@ int ff_filter_frame(AVFilterLink *link, AVFrame *frame) · 559 unmodified lines
1058 link->time_base);1058 link->time_base);
1059 }1059 }
1060 1060
1061 li->frame_blocked_in = link->frame_wanted_out = 0;1061 li->frame_blocked_in = li->frame_wanted_out = 0;
1062 li->l.frame_count_in++;1062 li->l.frame_count_in++;
1063 li->l.sample_count_in += frame->nb_samples;1063 li->l.sample_count_in += frame->nb_samples;
1064 filter_unblock(link->dst);1064 filter_unblock(link->dst);
@@ -1241,7 +1241,7 @@ static int ff_filter_activate_default(AVFilterContext *filter) · 176 unmodified lines
1241 }1241 }
1242 for (i = 0; i < filter->nb_outputs; i++) {1242 for (i = 0; i < filter->nb_outputs; i++) {
1243 FilterLinkInternal * const li = ff_link_internal(filter->outputs[i]);1243 FilterLinkInternal * const li = ff_link_internal(filter->outputs[i]);
1244 if (filter->outputs[i]->frame_wanted_out &&1244 if (li->frame_wanted_out &&
1245 !li->frame_blocked_in) {1245 !li->frame_blocked_in) {
1246 return ff_request_frame_to_filter(filter->outputs[i]);1246 return ff_request_frame_to_filter(filter->outputs[i]);
1247 }1247 }
@@ -1581,7 +1581,7 @@ void ff_inlink_request_frame(AVFilterLink *link) · 333 unmodified lines
1581 av_unused FilterLinkInternal *li = ff_link_internal(link);1581 av_unused FilterLinkInternal *li = ff_link_internal(link);
1582 av_assert1(!li->status_in);1582 av_assert1(!li->status_in);
1583 av_assert1(!li->status_out);1583 av_assert1(!li->status_out);
1584 link->frame_wanted_out = 1;1584 li->frame_wanted_out = 1;
1585 ff_filter_set_ready(link->src, 100);1585 ff_filter_set_ready(link->src, 100);
1586}1586}
1587 1587
@@ -1590,7 +1590,7 @@ void ff_inlink_set_status(AVFilterLink *link, int status) · 2 unmodified lines
1590 FilterLinkInternal * const li = ff_link_internal(link);1590 FilterLinkInternal * const li = ff_link_internal(link);
1591 if (li->status_out)1591 if (li->status_out)
1592 return;1592 return;
1593 link->frame_wanted_out = 0;1593 li->frame_wanted_out = 0;
1594 li->frame_blocked_in = 0;1594 li->frame_blocked_in = 0;
1595 link_set_out_status(link, status, AV_NOPTS_VALUE);1595 link_set_out_status(link, status, AV_NOPTS_VALUE);
1596 while (ff_framequeue_queued_frames(&li->fifo)) {1596 while (ff_framequeue_queued_frames(&li->fifo)) {
@@ -1642,3 +1642,9 @@ int ff_filter_init_hw_frames(AVFilterContext *avctx, AVFilterLink *link, · 45 unmodified lines
1642 1642
1643 return 0;1643 return 0;
1644}1644}
1645
1646int ff_outlink_frame_wanted(AVFilterLink *link)
1647{
1648 FilterLinkInternal * const li = ff_link_internal(link);
1649 return li->frame_wanted_out;
1650}
libavfilter/avfilter.h+0−7
@@ -599,13 +599,6 @@ struct AVFilterLink { · 598 unmodified lines
599 * Graph the filter belongs to.599 * Graph the filter belongs to.
600 */600 */
601 struct AVFilterGraph *graph;601 struct AVFilterGraph *graph;
602
603 /**
604 * True if a frame is currently wanted on the output of this filter.
605 * Set when ff_request_frame() is called by the output,
606 * cleared when a frame is filtered.
607 */
608 int frame_wanted_out;
609};602};
610 603
611/**604/**
libavfilter/avfilter_internal.h+7−0
@@ -67,6 +67,13 @@ typedef struct FilterLinkInternal { · 66 unmodified lines
67 */67 */
68 int status_out;68 int status_out;
69 69
70 /**
71 * True if a frame is currently wanted on the output of this filter.
72 * Set when ff_request_frame() is called by the output,
73 * cleared when a frame is filtered.
74 */
75 int frame_wanted_out;
76
70 /**77 /**
71 * Index in the age array.78 * Index in the age array.
72 */79 */
libavfilter/avfiltergraph.c+1−1
@@ -1406,7 +1406,7 @@ int avfilter_graph_request_oldest(AVFilterGraph *graph) · 1405 unmodified lines
1406 while (frame_count == oldesti->l.frame_count_out) {1406 while (frame_count == oldesti->l.frame_count_out) {
1407 r = ff_filter_graph_run_once(graph);1407 r = ff_filter_graph_run_once(graph);
1408 if (r == AVERROR(EAGAIN) &&1408 if (r == AVERROR(EAGAIN) &&
1409 !oldest->frame_wanted_out && !oldesti->frame_blocked_in &&1409 !oldesti->frame_wanted_out && !oldesti->frame_blocked_in &&
1410 !oldesti->status_in)1410 !oldesti->status_in)
1411 (void)ff_request_frame(oldest);1411 (void)ff_request_frame(oldest);
1412 else if (r < 0)1412 else if (r < 0)
libavfilter/buffersink.c+2−1
@@ -88,6 +88,7 @@ static int get_frame_internal(AVFilterContext *ctx, AVFrame *frame, int flags, i · 87 unmodified lines
88{88{
89 BufferSinkContext *buf = ctx->priv;89 BufferSinkContext *buf = ctx->priv;
90 AVFilterLink *inlink = ctx->inputs[0];90 AVFilterLink *inlink = ctx->inputs[0];
91 FilterLinkInternal *li = ff_link_internal(inlink);
91 int status, ret;92 int status, ret;
92 AVFrame *cur_frame;93 AVFrame *cur_frame;
93 int64_t pts;94 int64_t pts;
@@ -107,7 +108,7 @@ static int get_frame_internal(AVFilterContext *ctx, AVFrame *frame, int flags, i · 13 unmodified lines
107 return status;108 return status;
108 } else if ((flags & AV_BUFFERSINK_FLAG_NO_REQUEST)) {109 } else if ((flags & AV_BUFFERSINK_FLAG_NO_REQUEST)) {
109 return AVERROR(EAGAIN);110 return AVERROR(EAGAIN);
110 } else if (inlink->frame_wanted_out) {111 } else if (li->frame_wanted_out) {
111 ret = ff_filter_graph_run_once(ctx->graph);112 ret = ff_filter_graph_run_once(ctx->graph);
112 if (ret < 0)113 if (ret < 0)
113 return ret;114 return ret;
libavfilter/filters.h+1−4
@@ -245,10 +245,7 @@ void ff_inlink_set_status(AVFilterLink *link, int status); · 244 unmodified lines
245/**245/**
246 * Test if a frame is wanted on an output link.246 * Test if a frame is wanted on an output link.
247 */247 */
248static inline int ff_outlink_frame_wanted(AVFilterLink *link)248int ff_outlink_frame_wanted(AVFilterLink *link);
249{
250 return link->frame_wanted_out;
251}
252 249
253/**250/**
254 * Get the status on an output link.251 * Get the status on an output link.

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