History

lavfi: add helpers to consume frames from link FIFOs.

Nicolas George committed 9 years ago

Commit d360ddf1 parent 2e5af442 files · +94 −0Browse files

Showing the changes to libavfilter/avfilter.c (1 of 2 files). Show all

Unified · Split

libavfilter/avfilter.c+52−0
@@ -1501,6 +1501,58 @@ int ff_inlink_acknowledge_status(AVFilterLink *link, int *rstatus, int64_t *rpts · 1500 unmodified lines
1501 return 1;1501 return 1;
1502}1502}
1503 1503
1504int ff_inlink_check_available_frame(AVFilterLink *link)
1505{
1506 return ff_framequeue_queued_frames(&link->fifo) > 0;
1507}
1508
1509int ff_inlink_check_available_samples(AVFilterLink *link, unsigned min)
1510{
1511 uint64_t samples = ff_framequeue_queued_samples(&link->fifo);
1512 av_assert1(min);
1513 return samples >= min || (link->status_in && samples);
1514}
1515
1516static void consume_update(AVFilterLink *link, const AVFrame *frame)
1517{
1518 ff_inlink_process_commands(link, frame);
1519 link->dst->is_disabled = !ff_inlink_evaluate_timeline_at_frame(link, frame);
1520 link->frame_count_out++;
1521}
1522
1523int ff_inlink_consume_frame(AVFilterLink *link, AVFrame **rframe)
1524{
1525 AVFrame *frame;
1526
1527 *rframe = NULL;
1528 if (!ff_inlink_check_available_frame(link))
1529 return 0;
1530 frame = ff_framequeue_take(&link->fifo);
1531 consume_update(link, frame);
1532 *rframe = frame;
1533 return 1;
1534}
1535
1536int ff_inlink_consume_samples(AVFilterLink *link, unsigned min, unsigned max,
1537 AVFrame **rframe)
1538{
1539 AVFrame *frame;
1540 int ret;
1541
1542 av_assert1(min);
1543 *rframe = NULL;
1544 if (!ff_inlink_check_available_samples(link, min))
1545 return 0;
1546 if (link->status_in)
1547 min = FFMIN(min, ff_framequeue_queued_samples(&link->fifo));
1548 ret = take_samples(link, min, link->max_samples, &frame);
1549 if (ret < 0)
1550 return ret;
1551 consume_update(link, frame);
1552 *rframe = frame;
1553 return 1;
1554}
1555
1504int ff_inlink_make_frame_writable(AVFilterLink *link, AVFrame **rframe)1556int ff_inlink_make_frame_writable(AVFilterLink *link, AVFrame **rframe)
1505{1557{
1506 AVFrame *frame = *rframe;1558 AVFrame *frame = *rframe;

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