@@ -176,7 +176,7 @@ int avfilter_link(AVFilterContext *src, unsigned srcpad,
li = av_mallocz(sizeof(*li));
if (!li)
return AVERROR(ENOMEM);
- link = &li->l;
+ link = &li->l.pub;
src->outputs[srcpad] = dst->inputs[dstpad] = link;
@@ -222,7 +222,7 @@ int avfilter_config_links(AVFilterContext *filter)
static void update_link_current_pts(FilterLinkInternal *li, int64_t pts)
{
- AVFilterLink *const link = &li->l;
+ AVFilterLink *const link = &li->l.pub;
if (pts == AV_NOPTS_VALUE)
return;
@@ -1077,7 +1077,7 @@ static int samples_ready(FilterLinkInternal *link, unsigned min)
static int take_samples(FilterLinkInternal *li, unsigned min, unsigned max,
AVFrame **rframe)
{
- AVFilterLink *link = &li->l;
+ AVFilterLink *link = &li->l.pub;
AVFrame *frame0, *frame, *buf;
unsigned nb_samples, nb_frames, i, p;
int ret;
@@ -1169,7 +1169,7 @@ static int ff_filter_frame_to_filter(AVFilterLink *link)
static int forward_status_change(AVFilterContext *filter, FilterLinkInternal *li_in)
{
- AVFilterLink *in = &li_in->l;
+ AVFilterLink *in = &li_in->l.pub;
unsigned out = 0, progress = 0;
int ret;
@@ -1431,7 +1431,7 @@ int ff_inlink_check_available_samples(AVFilterLink *link, unsigned min)
static void consume_update(FilterLinkInternal *li, const AVFrame *frame)
{
- AVFilterLink *const link = &li->l;
+ AVFilterLink *const link = &li->l.pub;
update_link_current_pts(li, frame->pts);
ff_inlink_process_commands(link, frame);
if (link == link->dst->inputs[0])
@@ -28,10 +28,11 @@
#include <stdint.h>
#include "avfilter.h"
+#include "filters.h"
#include "framequeue.h"
typedef struct FilterLinkInternal {
- AVFilterLink l;
+ FilterLink l;
struct FFFramePool *frame_pool;
@@ -1326,7 +1326,7 @@ static void heap_bubble_up(FFFilterGraph *graph,
while (index) {
int parent = (index - 1) >> 1;
- if (links[parent]->l.current_pts_us >= li->l.current_pts_us)
+ if (links[parent]->l.pub.current_pts_us >= li->l.pub.current_pts_us)
break;
links[index] = links[parent];
links[index]->age_index = index;
@@ -1348,9 +1348,9 @@ static void heap_bubble_down(FFFilterGraph *graph,
if (child >= graph->sink_links_count)
break;
if (child + 1 < graph->sink_links_count &&
- links[child + 1]->l.current_pts_us < links[child]->l.current_pts_us)
+ links[child + 1]->l.pub.current_pts_us < links[child]->l.pub.current_pts_us)
child++;
- if (li->l.current_pts_us < links[child]->l.current_pts_us)
+ if (li->l.pub.current_pts_us < links[child]->l.pub.current_pts_us)
break;
links[index] = links[child];
links[index]->age_index = index;
@@ -1372,13 +1372,13 @@ int avfilter_graph_request_oldest(AVFilterGraph *graph)
{
FFFilterGraph *graphi = fffiltergraph(graph);
FilterLinkInternal *oldesti = graphi->sink_links[0];
- AVFilterLink *oldest = &oldesti->l;
+ AVFilterLink *oldest = &oldesti->l.pub;
int64_t frame_count;
int r;
while (graphi->sink_links_count) {
oldesti = graphi->sink_links[0];
- oldest = &oldesti->l;
+ oldest = &oldesti->l.pub;
if (oldest->dst->filter->activate) {
r = av_buffersink_get_frame_flags(oldest->dst, NULL,
AV_BUFFERSINK_FLAG_PEEK);
@@ -33,6 +33,16 @@
*/
#define FFERROR_NOT_READY FFERRTAG('N','R','D','Y')
+/**
+ * Link properties exposed to filter code, but not external callers.
+ *
+ * Cf. AVFilterLink for public properties, FilterLinkInternal for
+ * properties private to the generic layer.
+ */
+typedef struct FilterLink {
+ AVFilterLink pub;
+} FilterLink;
+
/**
* Mark a filter ready and schedule it for activation.
*