mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-28 20:53:54 +02:00
lavfi: add a new struct for private link properties
Specifically those that should be visible to filters, but hidden from API callers. Such properties are currently located at the end of the public AVFilterLink struct, demarcated by a comment marking them as private. However it is generally better to hide them explicitly, using the same pattern already employed in avformat or avcodec. The new struct is currently trivial, but will become more useful in following commits.
This commit is contained in:
parent
426e33c758
commit
54754eec1e
@ -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.
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user