Unified · Split
| @@ -1559,6 +1559,14 @@ int ff_outlink_get_status(AVFilterLink *link) · 1558 unmodified lines | ||
| 1559 | 1559 | return link->status_in; |
| 1560 | 1560 | } |
| 1561 | 1561 | |
| 1562 | +int ff_inoutlink_check_flow(AVFilterLink *inlink, AVFilterLink *outlink) | |
| 1563 | +{ | |
| 1564 | + return ff_outlink_frame_wanted(outlink) || | |
| 1565 | + ff_inlink_check_available_frame(inlink) || | |
| 1566 | + inlink->status_out; | |
| 1567 | +} | |
| 1568 | + | |
| 1569 | + | |
| 1562 | 1570 | const AVClass *avfilter_get_class(void) |
| 1563 | 1571 | { |
| 1564 | 1572 | return &avfilter_class; |
| @@ -258,4 +258,12 @@ static inline void ff_outlink_set_status(AVFilterLink *link, int status, int64_t · 257 unmodified lines | ||
| 258 | 258 | } \ |
| 259 | 259 | } while (0) |
| 260 | 260 | |
| 261 | +/** | |
| 262 | + * Check for flow control between input and output. | |
| 263 | + * This is necessary for filters that may produce several output frames for | |
| 264 | + * a single input event, otherwise they may produce them all at once, | |
| 265 | + * causing excessive memory consumption. | |
| 266 | + */ | |
| 267 | +int ff_inoutlink_check_flow(AVFilterLink *inlink, AVFilterLink *outlink); | |
| 268 | + | |
| 261 | 269 | #endif /* AVFILTER_FILTERS_H */ |