| @@ -264,7 +264,7 @@ void ff_avfilter_link_set_in_status(AVFilterLink *link, int status, int64_t pts) · 263 unmodified lines |
| 264 | 264 | av_assert0(!li->status_in); |
| 265 | 265 | li->status_in = status; |
| 266 | 266 | li->status_in_pts = pts; |
| 267 | | − link->frame_wanted_out = 0; |
| 267 | + li->frame_wanted_out = 0; |
| 268 | 268 | li->frame_blocked_in = 0; |
| 269 | 269 | filter_unblock(link->dst); |
| 270 | 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 | 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 | 282 | av_assert0(!li->status_out); |
| 283 | 283 | li->status_out = status; |
| 284 | 284 | if (pts != AV_NOPTS_VALUE) |
| @@ -481,7 +481,7 @@ int ff_request_frame(AVFilterLink *link) · 196 unmodified lines |
| 481 | 481 | return li->status_out; |
| 482 | 482 | if (li->status_in) { |
| 483 | 483 | if (ff_framequeue_queued_frames(&li->fifo)) { |
| 484 | | − av_assert1(!link->frame_wanted_out); |
| 484 | + av_assert1(!li->frame_wanted_out); |
| 485 | 485 | av_assert1(link->dst->ready >= 300); |
| 486 | 486 | return 0; |
| 487 | 487 | } else { |
| @@ -492,7 +492,7 @@ int ff_request_frame(AVFilterLink *link) · 4 unmodified lines |
| 492 | 492 | return li->status_out; |
| 493 | 493 | } |
| 494 | 494 | } |
| 495 | | − link->frame_wanted_out = 1; |
| 495 | + li->frame_wanted_out = 1; |
| 496 | 496 | ff_filter_set_ready(link->src, 100); |
| 497 | 497 | return 0; |
| 498 | 498 | } |
| @@ -1058,7 +1058,7 @@ int ff_filter_frame(AVFilterLink *link, AVFrame *frame) · 559 unmodified lines |
| 1058 | 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 | 1062 | li->l.frame_count_in++; |
| 1063 | 1063 | li->l.sample_count_in += frame->nb_samples; |
| 1064 | 1064 | filter_unblock(link->dst); |
| @@ -1241,7 +1241,7 @@ static int ff_filter_activate_default(AVFilterContext *filter) · 176 unmodified lines |
| 1241 | 1241 | } |
| 1242 | 1242 | for (i = 0; i < filter->nb_outputs; i++) { |
| 1243 | 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 | 1245 | !li->frame_blocked_in) { |
| 1246 | 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 | 1581 | av_unused FilterLinkInternal *li = ff_link_internal(link); |
| 1582 | 1582 | av_assert1(!li->status_in); |
| 1583 | 1583 | av_assert1(!li->status_out); |
| 1584 | | − link->frame_wanted_out = 1; |
| 1584 | + li->frame_wanted_out = 1; |
| 1585 | 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 | 1590 | FilterLinkInternal * const li = ff_link_internal(link); |
| 1591 | 1591 | if (li->status_out) |
| 1592 | 1592 | return; |
| 1593 | | − link->frame_wanted_out = 0; |
| 1593 | + li->frame_wanted_out = 0; |
| 1594 | 1594 | li->frame_blocked_in = 0; |
| 1595 | 1595 | link_set_out_status(link, status, AV_NOPTS_VALUE); |
| 1596 | 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 | 1643 | return 0; |
| 1644 | 1644 | } |
| 1645 | + |
| 1646 | +int ff_outlink_frame_wanted(AVFilterLink *link) |
| 1647 | +{ |
| 1648 | + FilterLinkInternal * const li = ff_link_internal(link); |
| 1649 | + return li->frame_wanted_out; |
| 1650 | +} |