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
15011501 return 1;
15021502 }
15031503
1504+int ff_inlink_check_available_frame(AVFilterLink *link)
1505+{
1506+ return ff_framequeue_queued_frames(&link->fifo) > 0;
1507+}
1508+
1509+int 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+
1516+static 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+
1523+int 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+
1536+int 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+
15041556 int ff_inlink_make_frame_writable(AVFilterLink *link, AVFrame **rframe)
15051557 {
15061558 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