Commit cd7febd3 authored by Michael Niedermayer's avatar Michael Niedermayer

lavfi: replace filter_samples by filter_frame

Based on patch by Anton Khirnov
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 16af29a7
...@@ -52,7 +52,7 @@ Buffer references ownership and permissions ...@@ -52,7 +52,7 @@ Buffer references ownership and permissions
point to only a part of a video buffer. point to only a part of a video buffer.
A reference is usually obtained as input to the start_frame or A reference is usually obtained as input to the start_frame or
filter_samples method or requested using the ff_get_video_buffer or filter_frame method or requested using the ff_get_video_buffer or
ff_get_audio_buffer functions. A new reference on an existing buffer can ff_get_audio_buffer functions. A new reference on an existing buffer can
be created with the avfilter_ref_buffer. A reference is destroyed using be created with the avfilter_ref_buffer. A reference is destroyed using
the avfilter_unref_bufferp function. the avfilter_unref_bufferp function.
...@@ -68,14 +68,14 @@ Buffer references ownership and permissions ...@@ -68,14 +68,14 @@ Buffer references ownership and permissions
Here are the (fairly obvious) rules for reference ownership: Here are the (fairly obvious) rules for reference ownership:
* A reference received by the start_frame or filter_samples method * A reference received by the start_frame or filter_frame method
belong to the corresponding filter. belong to the corresponding filter.
Special exception: for video references: the reference may be used Special exception: for video references: the reference may be used
internally for automatic copying and must not be destroyed before internally for automatic copying and must not be destroyed before
end_frame; it can be given away to ff_start_frame. end_frame; it can be given away to ff_start_frame.
* A reference passed to ff_start_frame or ff_filter_samples is given * A reference passed to ff_start_frame or ff_filter_frame is given
away and must no longer be used. away and must no longer be used.
* A reference created with avfilter_ref_buffer belongs to the code that * A reference created with avfilter_ref_buffer belongs to the code that
...@@ -93,16 +93,16 @@ Buffer references ownership and permissions ...@@ -93,16 +93,16 @@ Buffer references ownership and permissions
The AVFilterLink structure has a few AVFilterBufferRef fields. Here are The AVFilterLink structure has a few AVFilterBufferRef fields. Here are
the rules to handle them: the rules to handle them:
* cur_buf is set before the start_frame and filter_samples methods to * cur_buf is set before the start_frame and filter_frame methods to
the same reference given as argument to the methods and belongs to the the same reference given as argument to the methods and belongs to the
destination filter of the link. If it has not been cleared after destination filter of the link. If it has not been cleared after
end_frame or filter_samples, libavfilter will automatically destroy end_frame or filter_frame, libavfilter will automatically destroy
the reference; therefore, any filter that needs to keep the reference the reference; therefore, any filter that needs to keep the reference
for longer must set cur_buf to NULL. for longer must set cur_buf to NULL.
* out_buf belongs to the source filter of the link and can be used to * out_buf belongs to the source filter of the link and can be used to
store a reference to the buffer that has been sent to the destination. store a reference to the buffer that has been sent to the destination.
If it is not NULL after end_frame or filter_samples, libavfilter will If it is not NULL after end_frame or filter_frame, libavfilter will
automatically destroy the reference. automatically destroy the reference.
If a video input pad does not have a start_frame method, the default If a video input pad does not have a start_frame method, the default
...@@ -179,7 +179,7 @@ Buffer references ownership and permissions ...@@ -179,7 +179,7 @@ Buffer references ownership and permissions
with the WRITE permission. with the WRITE permission.
* Filters that intend to keep a reference after the filtering process * Filters that intend to keep a reference after the filtering process
is finished (after end_frame or filter_samples returns) must have the is finished (after end_frame or filter_frame returns) must have the
PRESERVE permission on it and remove the WRITE permission if they PRESERVE permission on it and remove the WRITE permission if they
create a new reference to give it away. create a new reference to give it away.
...@@ -198,7 +198,7 @@ Frame scheduling ...@@ -198,7 +198,7 @@ Frame scheduling
Simple filters that output one frame for each input frame should not have Simple filters that output one frame for each input frame should not have
to worry about it. to worry about it.
start_frame / filter_samples start_frame / filter_frame
---------------------------- ----------------------------
These methods are called when a frame is pushed to the filter's input. These methods are called when a frame is pushed to the filter's input.
...@@ -233,7 +233,7 @@ Frame scheduling ...@@ -233,7 +233,7 @@ Frame scheduling
This method is called when a frame is wanted on an output. This method is called when a frame is wanted on an output.
For an input, it should directly call start_frame or filter_samples on For an input, it should directly call start_frame or filter_frame on
the corresponding output. the corresponding output.
For a filter, if there are queued frames already ready, one of these For a filter, if there are queued frames already ready, one of these
...@@ -266,4 +266,4 @@ Frame scheduling ...@@ -266,4 +266,4 @@ Frame scheduling
Note that, except for filters that can have queued frames, request_frame Note that, except for filters that can have queued frames, request_frame
does not push frames: it requests them to its input, and as a reaction, does not push frames: it requests them to its input, and as a reaction,
the start_frame / filter_samples method will be called and do the work. the start_frame / filter_frame method will be called and do the work.
...@@ -135,7 +135,7 @@ static int config_output(AVFilterLink *outlink) ...@@ -135,7 +135,7 @@ static int config_output(AVFilterLink *outlink)
return 0; return 0;
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamplesref) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamplesref)
{ {
AConvertContext *aconvert = inlink->dst->priv; AConvertContext *aconvert = inlink->dst->priv;
const int n = insamplesref->audio->nb_samples; const int n = insamplesref->audio->nb_samples;
...@@ -149,7 +149,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamplesref ...@@ -149,7 +149,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamplesref
avfilter_copy_buffer_ref_props(outsamplesref, insamplesref); avfilter_copy_buffer_ref_props(outsamplesref, insamplesref);
outsamplesref->audio->channel_layout = outlink->channel_layout; outsamplesref->audio->channel_layout = outlink->channel_layout;
ret = ff_filter_samples(outlink, outsamplesref); ret = ff_filter_frame(outlink, outsamplesref);
avfilter_unref_buffer(insamplesref); avfilter_unref_buffer(insamplesref);
return ret; return ret;
} }
...@@ -164,7 +164,7 @@ AVFilter avfilter_af_aconvert = { ...@@ -164,7 +164,7 @@ AVFilter avfilter_af_aconvert = {
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ, }, .min_perms = AV_PERM_READ, },
{ .name = NULL}}, { .name = NULL}},
.outputs = (const AVFilterPad[]) {{ .name = "default", .outputs = (const AVFilterPad[]) {{ .name = "default",
......
...@@ -217,7 +217,7 @@ static inline void copy_samples(int nb_inputs, struct amerge_input in[], ...@@ -217,7 +217,7 @@ static inline void copy_samples(int nb_inputs, struct amerge_input in[],
} }
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
AMergeContext *am = ctx->priv; AMergeContext *am = ctx->priv;
...@@ -290,7 +290,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) ...@@ -290,7 +290,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples)
} }
} }
} }
return ff_filter_samples(ctx->outputs[0], outbuf); return ff_filter_frame(ctx->outputs[0], outbuf);
} }
static av_cold int init(AVFilterContext *ctx, const char *args) static av_cold int init(AVFilterContext *ctx, const char *args)
...@@ -313,7 +313,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args) ...@@ -313,7 +313,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
AVFilterPad pad = { AVFilterPad pad = {
.name = name, .name = name,
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE, .min_perms = AV_PERM_READ | AV_PERM_PRESERVE,
}; };
if (!name) if (!name)
......
...@@ -309,7 +309,7 @@ static int output_frame(AVFilterLink *outlink, int nb_samples) ...@@ -309,7 +309,7 @@ static int output_frame(AVFilterLink *outlink, int nb_samples)
if (s->next_pts != AV_NOPTS_VALUE) if (s->next_pts != AV_NOPTS_VALUE)
s->next_pts += nb_samples; s->next_pts += nb_samples;
return ff_filter_samples(outlink, out_buf); return ff_filter_frame(outlink, out_buf);
} }
/** /**
...@@ -450,7 +450,7 @@ static int request_frame(AVFilterLink *outlink) ...@@ -450,7 +450,7 @@ static int request_frame(AVFilterLink *outlink)
return output_frame(outlink, available_samples); return output_frame(outlink, available_samples);
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *buf)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
MixContext *s = ctx->priv; MixContext *s = ctx->priv;
...@@ -502,7 +502,7 @@ static int init(AVFilterContext *ctx, const char *args) ...@@ -502,7 +502,7 @@ static int init(AVFilterContext *ctx, const char *args)
snprintf(name, sizeof(name), "input%d", i); snprintf(name, sizeof(name), "input%d", i);
pad.type = AVMEDIA_TYPE_AUDIO; pad.type = AVMEDIA_TYPE_AUDIO;
pad.name = av_strdup(name); pad.name = av_strdup(name);
pad.filter_samples = filter_samples; pad.filter_frame = filter_frame;
ff_insert_inpad(ctx, i, &pad); ff_insert_inpad(ctx, i, &pad);
} }
......
...@@ -170,7 +170,7 @@ static int config_output(AVFilterLink *outlink) ...@@ -170,7 +170,7 @@ static int config_output(AVFilterLink *outlink)
return 0; return 0;
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamplesref) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamplesref)
{ {
AResampleContext *aresample = inlink->dst->priv; AResampleContext *aresample = inlink->dst->priv;
const int n_in = insamplesref->audio->nb_samples; const int n_in = insamplesref->audio->nb_samples;
...@@ -205,7 +205,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamplesref) ...@@ -205,7 +205,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamplesref)
outsamplesref->audio->nb_samples = n_out; outsamplesref->audio->nb_samples = n_out;
ret = ff_filter_samples(outlink, outsamplesref); ret = ff_filter_frame(outlink, outsamplesref);
aresample->req_fullfilled= 1; aresample->req_fullfilled= 1;
avfilter_unref_buffer(insamplesref); avfilter_unref_buffer(insamplesref);
return ret; return ret;
...@@ -247,7 +247,7 @@ static int request_frame(AVFilterLink *outlink) ...@@ -247,7 +247,7 @@ static int request_frame(AVFilterLink *outlink)
outsamplesref->pts = ROUNDED_DIV(outsamplesref->pts, inlink->sample_rate); outsamplesref->pts = ROUNDED_DIV(outsamplesref->pts, inlink->sample_rate);
#endif #endif
ff_filter_samples(outlink, outsamplesref); ff_filter_frame(outlink, outsamplesref);
return 0; return 0;
} }
return ret; return ret;
...@@ -263,7 +263,7 @@ AVFilter avfilter_af_aresample = { ...@@ -263,7 +263,7 @@ AVFilter avfilter_af_aresample = {
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ, }, .min_perms = AV_PERM_READ, },
{ .name = NULL}}, { .name = NULL}},
.outputs = (const AVFilterPad[]) {{ .name = "default", .outputs = (const AVFilterPad[]) {{ .name = "default",
......
...@@ -125,12 +125,12 @@ static int push_samples(AVFilterLink *outlink) ...@@ -125,12 +125,12 @@ static int push_samples(AVFilterLink *outlink)
if (asns->next_out_pts != AV_NOPTS_VALUE) if (asns->next_out_pts != AV_NOPTS_VALUE)
asns->next_out_pts += nb_out_samples; asns->next_out_pts += nb_out_samples;
ff_filter_samples(outlink, outsamples); ff_filter_frame(outlink, outsamples);
asns->req_fullfilled = 1; asns->req_fullfilled = 1;
return nb_out_samples; return nb_out_samples;
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
ASNSContext *asns = ctx->priv; ASNSContext *asns = ctx->priv;
...@@ -186,7 +186,7 @@ AVFilter avfilter_af_asetnsamples = { ...@@ -186,7 +186,7 @@ AVFilter avfilter_af_asetnsamples = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ|AV_PERM_WRITE .min_perms = AV_PERM_READ|AV_PERM_WRITE
}, },
{ .name = NULL } { .name = NULL }
......
...@@ -54,7 +54,7 @@ static void uninit(AVFilterContext *ctx) ...@@ -54,7 +54,7 @@ static void uninit(AVFilterContext *ctx)
av_freep(&s->plane_checksums); av_freep(&s->plane_checksums);
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *buf)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
AShowInfoContext *s = ctx->priv; AShowInfoContext *s = ctx->priv;
...@@ -100,7 +100,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) ...@@ -100,7 +100,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
av_log(ctx, AV_LOG_INFO, "]\n"); av_log(ctx, AV_LOG_INFO, "]\n");
s->frame++; s->frame++;
return ff_filter_samples(inlink->dst->outputs[0], buf); return ff_filter_frame(inlink->dst->outputs[0], buf);
} }
static const AVFilterPad inputs[] = { static const AVFilterPad inputs[] = {
...@@ -108,7 +108,7 @@ static const AVFilterPad inputs[] = { ...@@ -108,7 +108,7 @@ static const AVFilterPad inputs[] = {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer, .get_audio_buffer = ff_null_get_audio_buffer,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ, .min_perms = AV_PERM_READ,
}, },
{ NULL }, { NULL },
......
...@@ -122,7 +122,7 @@ static int send_out(AVFilterContext *ctx, int out_id) ...@@ -122,7 +122,7 @@ static int send_out(AVFilterContext *ctx, int out_id)
av_q2d(ctx->outputs[out_id]->time_base) * buf->pts; av_q2d(ctx->outputs[out_id]->time_base) * buf->pts;
as->var_values[VAR_T1 + out_id] += buf->audio->nb_samples / as->var_values[VAR_T1 + out_id] += buf->audio->nb_samples /
(double)ctx->inputs[out_id]->sample_rate; (double)ctx->inputs[out_id]->sample_rate;
ret = ff_filter_samples(ctx->outputs[out_id], buf); ret = ff_filter_frame(ctx->outputs[out_id], buf);
queue->nb--; queue->nb--;
queue->tail = (queue->tail + 1) % QUEUE_SIZE; queue->tail = (queue->tail + 1) % QUEUE_SIZE;
if (as->req[out_id]) if (as->req[out_id])
...@@ -167,7 +167,7 @@ static int request_frame(AVFilterLink *outlink) ...@@ -167,7 +167,7 @@ static int request_frame(AVFilterLink *outlink)
return 0; return 0;
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
AStreamSyncContext *as = ctx->priv; AStreamSyncContext *as = ctx->priv;
...@@ -191,11 +191,11 @@ AVFilter avfilter_af_astreamsync = { ...@@ -191,11 +191,11 @@ AVFilter avfilter_af_astreamsync = {
.inputs = (const AVFilterPad[]) { .inputs = (const AVFilterPad[]) {
{ .name = "in1", { .name = "in1",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE, }, .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, },
{ .name = "in2", { .name = "in2",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE, }, .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, },
{ .name = NULL } { .name = NULL }
}, },
......
...@@ -39,7 +39,7 @@ typedef struct ASyncContext { ...@@ -39,7 +39,7 @@ typedef struct ASyncContext {
float min_delta_sec; float min_delta_sec;
int max_comp; int max_comp;
/* set by filter_samples() to signal an output frame to request_frame() */ /* set by filter_frame() to signal an output frame to request_frame() */
int got_output; int got_output;
} ASyncContext; } ASyncContext;
...@@ -135,7 +135,7 @@ static int request_frame(AVFilterLink *link) ...@@ -135,7 +135,7 @@ static int request_frame(AVFilterLink *link)
} }
buf->pts = s->pts; buf->pts = s->pts;
return ff_filter_samples(link, buf); return ff_filter_frame(link, buf);
} }
return ret; return ret;
...@@ -155,7 +155,7 @@ static int64_t get_delay(ASyncContext *s) ...@@ -155,7 +155,7 @@ static int64_t get_delay(ASyncContext *s)
return avresample_available(s->avr) + avresample_get_delay(s->avr); return avresample_available(s->avr) + avresample_get_delay(s->avr);
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *buf)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
ASyncContext *s = ctx->priv; ASyncContext *s = ctx->priv;
...@@ -211,7 +211,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) ...@@ -211,7 +211,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
av_samples_set_silence(buf_out->extended_data, out_size - delta, av_samples_set_silence(buf_out->extended_data, out_size - delta,
delta, nb_channels, buf->format); delta, nb_channels, buf->format);
} }
ret = ff_filter_samples(outlink, buf_out); ret = ff_filter_frame(outlink, buf_out);
if (ret < 0) if (ret < 0)
goto fail; goto fail;
s->got_output = 1; s->got_output = 1;
...@@ -237,7 +237,7 @@ static const AVFilterPad avfilter_af_asyncts_inputs[] = { ...@@ -237,7 +237,7 @@ static const AVFilterPad avfilter_af_asyncts_inputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples .filter_frame = filter_frame
}, },
{ NULL } { NULL }
}; };
......
...@@ -138,7 +138,7 @@ typedef struct { ...@@ -138,7 +138,7 @@ typedef struct {
RDFTContext *complex_to_real; RDFTContext *complex_to_real;
FFTSample *correlation; FFTSample *correlation;
// for managing AVFilterPad.request_frame and AVFilterPad.filter_samples // for managing AVFilterPad.request_frame and AVFilterPad.filter_frame
int request_fulfilled; int request_fulfilled;
AVFilterBufferRef *dst_buffer; AVFilterBufferRef *dst_buffer;
uint8_t *dst; uint8_t *dst;
...@@ -1033,7 +1033,7 @@ static void push_samples(ATempoContext *atempo, ...@@ -1033,7 +1033,7 @@ static void push_samples(ATempoContext *atempo,
(AVRational){ 1, outlink->sample_rate }, (AVRational){ 1, outlink->sample_rate },
outlink->time_base); outlink->time_base);
ff_filter_samples(outlink, atempo->dst_buffer); ff_filter_frame(outlink, atempo->dst_buffer);
atempo->dst_buffer = NULL; atempo->dst_buffer = NULL;
atempo->dst = NULL; atempo->dst = NULL;
atempo->dst_end = NULL; atempo->dst_end = NULL;
...@@ -1041,7 +1041,7 @@ static void push_samples(ATempoContext *atempo, ...@@ -1041,7 +1041,7 @@ static void push_samples(ATempoContext *atempo,
atempo->nsamples_out += n_out; atempo->nsamples_out += n_out;
} }
static int filter_samples(AVFilterLink *inlink, static int filter_frame(AVFilterLink *inlink,
AVFilterBufferRef *src_buffer) AVFilterBufferRef *src_buffer)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
...@@ -1148,7 +1148,7 @@ AVFilter avfilter_af_atempo = { ...@@ -1148,7 +1148,7 @@ AVFilter avfilter_af_atempo = {
.inputs = (const AVFilterPad[]) { .inputs = (const AVFilterPad[]) {
{ .name = "default", { .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.config_props = config_props, .config_props = config_props,
.min_perms = AV_PERM_READ, }, .min_perms = AV_PERM_READ, },
{ .name = NULL} { .name = NULL}
......
...@@ -312,7 +312,7 @@ static int channelmap_query_formats(AVFilterContext *ctx) ...@@ -312,7 +312,7 @@ static int channelmap_query_formats(AVFilterContext *ctx)
return 0; return 0;
} }
static int channelmap_filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) static int channelmap_filter_frame(AVFilterLink *inlink, AVFilterBufferRef *buf)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
AVFilterLink *outlink = ctx->outputs[0]; AVFilterLink *outlink = ctx->outputs[0];
...@@ -354,7 +354,7 @@ static int channelmap_filter_samples(AVFilterLink *inlink, AVFilterBufferRef *bu ...@@ -354,7 +354,7 @@ static int channelmap_filter_samples(AVFilterLink *inlink, AVFilterBufferRef *bu
memcpy(buf->data, buf->extended_data, memcpy(buf->data, buf->extended_data,
FFMIN(FF_ARRAY_ELEMS(buf->data), nch_out) * sizeof(buf->data[0])); FFMIN(FF_ARRAY_ELEMS(buf->data), nch_out) * sizeof(buf->data[0]));
return ff_filter_samples(outlink, buf); return ff_filter_frame(outlink, buf);
} }
static int channelmap_config_input(AVFilterLink *inlink) static int channelmap_config_input(AVFilterLink *inlink)
...@@ -389,7 +389,7 @@ static const AVFilterPad avfilter_af_channelmap_inputs[] = { ...@@ -389,7 +389,7 @@ static const AVFilterPad avfilter_af_channelmap_inputs[] = {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.min_perms = AV_PERM_READ | AV_PERM_WRITE, .min_perms = AV_PERM_READ | AV_PERM_WRITE,
.filter_samples = channelmap_filter_samples, .filter_frame = channelmap_filter_frame,
.config_props = channelmap_config_input .config_props = channelmap_config_input
}, },
{ NULL } { NULL }
......
...@@ -105,7 +105,7 @@ static int query_formats(AVFilterContext *ctx) ...@@ -105,7 +105,7 @@ static int query_formats(AVFilterContext *ctx)
return 0; return 0;
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *buf)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
int i, ret = 0; int i, ret = 0;
...@@ -122,7 +122,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) ...@@ -122,7 +122,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
buf_out->audio->channel_layout = buf_out->audio->channel_layout =
av_channel_layout_extract_channel(buf->audio->channel_layout, i); av_channel_layout_extract_channel(buf->audio->channel_layout, i);
ret = ff_filter_samples(ctx->outputs[i], buf_out); ret = ff_filter_frame(ctx->outputs[i], buf_out);
if (ret < 0) if (ret < 0)
break; break;
} }
...@@ -134,7 +134,7 @@ static const AVFilterPad avfilter_af_channelsplit_inputs[] = { ...@@ -134,7 +134,7 @@ static const AVFilterPad avfilter_af_channelsplit_inputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, .filter_frame = filter_frame,
}, },
{ NULL } { NULL }
}; };
......
...@@ -120,7 +120,7 @@ static inline int16_t *scalarproduct(const int16_t *in, const int16_t *endin, in ...@@ -120,7 +120,7 @@ static inline int16_t *scalarproduct(const int16_t *in, const int16_t *endin, in
return out; return out;
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
{ {
AVFilterLink *outlink = inlink->dst->outputs[0]; AVFilterLink *outlink = inlink->dst->outputs[0];
int16_t *taps, *endin, *in, *out; int16_t *taps, *endin, *in, *out;
...@@ -148,7 +148,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) ...@@ -148,7 +148,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples)
// save part of input for next round // save part of input for next round
memcpy(taps, endin, NUMTAPS * sizeof(*taps)); memcpy(taps, endin, NUMTAPS * sizeof(*taps));
ret = ff_filter_samples(outlink, outsamples); ret = ff_filter_frame(outlink, outsamples);
avfilter_unref_buffer(insamples); avfilter_unref_buffer(insamples);
return ret; return ret;
} }
...@@ -160,7 +160,7 @@ AVFilter avfilter_af_earwax = { ...@@ -160,7 +160,7 @@ AVFilter avfilter_af_earwax = {
.priv_size = sizeof(EarwaxContext), .priv_size = sizeof(EarwaxContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.config_props = config_input, .config_props = config_input,
.min_perms = AV_PERM_READ, }, .min_perms = AV_PERM_READ, },
{ .name = NULL}}, { .name = NULL}},
......
...@@ -94,7 +94,7 @@ static const AVClass join_class = { ...@@ -94,7 +94,7 @@ static const AVClass join_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
static int filter_samples(AVFilterLink *link, AVFilterBufferRef *buf) static int filter_frame(AVFilterLink *link, AVFilterBufferRef *buf)
{ {
AVFilterContext *ctx = link->dst; AVFilterContext *ctx = link->dst;
JoinContext *s = ctx->priv; JoinContext *s = ctx->priv;
...@@ -229,7 +229,7 @@ static int join_init(AVFilterContext *ctx, const char *args) ...@@ -229,7 +229,7 @@ static int join_init(AVFilterContext *ctx, const char *args)
snprintf(name, sizeof(name), "input%d", i); snprintf(name, sizeof(name), "input%d", i);
pad.type = AVMEDIA_TYPE_AUDIO; pad.type = AVMEDIA_TYPE_AUDIO;
pad.name = av_strdup(name); pad.name = av_strdup(name);
pad.filter_samples = filter_samples; pad.filter_frame = filter_frame;
pad.needs_fifo = 1; pad.needs_fifo = 1;
...@@ -470,7 +470,7 @@ static int join_request_frame(AVFilterLink *outlink) ...@@ -470,7 +470,7 @@ static int join_request_frame(AVFilterLink *outlink)
priv->nb_in_buffers = ctx->nb_inputs; priv->nb_in_buffers = ctx->nb_inputs;
buf->buf->priv = priv; buf->buf->priv = priv;
ret = ff_filter_samples(outlink, buf); ret = ff_filter_frame(outlink, buf);
memset(s->input_frames, 0, sizeof(*s->input_frames) * ctx->nb_inputs); memset(s->input_frames, 0, sizeof(*s->input_frames) * ctx->nb_inputs);
......
...@@ -353,7 +353,7 @@ static int config_props(AVFilterLink *link) ...@@ -353,7 +353,7 @@ static int config_props(AVFilterLink *link)
return 0; return 0;
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
{ {
int ret; int ret;
int n = insamples->audio->nb_samples; int n = insamples->audio->nb_samples;
...@@ -365,7 +365,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) ...@@ -365,7 +365,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples)
avfilter_copy_buffer_ref_props(outsamples, insamples); avfilter_copy_buffer_ref_props(outsamples, insamples);
outsamples->audio->channel_layout = outlink->channel_layout; outsamples->audio->channel_layout = outlink->channel_layout;
ret = ff_filter_samples(outlink, outsamples); ret = ff_filter_frame(outlink, outsamples);
avfilter_unref_buffer(insamples); avfilter_unref_buffer(insamples);
return ret; return ret;
} }
...@@ -388,7 +388,7 @@ AVFilter avfilter_af_pan = { ...@@ -388,7 +388,7 @@ AVFilter avfilter_af_pan = {
{ .name = "default", { .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.config_props = config_props, .config_props = config_props,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ, }, .min_perms = AV_PERM_READ, },
{ .name = NULL} { .name = NULL}
}, },
......
...@@ -40,7 +40,7 @@ typedef struct ResampleContext { ...@@ -40,7 +40,7 @@ typedef struct ResampleContext {
int64_t next_pts; int64_t next_pts;
/* set by filter_samples() to signal an output frame to request_frame() */ /* set by filter_frame() to signal an output frame to request_frame() */
int got_output; int got_output;
} ResampleContext; } ResampleContext;
...@@ -162,12 +162,12 @@ static int request_frame(AVFilterLink *outlink) ...@@ -162,12 +162,12 @@ static int request_frame(AVFilterLink *outlink)
} }
buf->pts = s->next_pts; buf->pts = s->next_pts;
return ff_filter_samples(outlink, buf); return ff_filter_frame(outlink, buf);
} }
return ret; return ret;
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *buf)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
ResampleContext *s = ctx->priv; ResampleContext *s = ctx->priv;
...@@ -224,7 +224,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) ...@@ -224,7 +224,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
s->next_pts = buf_out->pts + buf_out->audio->nb_samples; s->next_pts = buf_out->pts + buf_out->audio->nb_samples;
ret = ff_filter_samples(outlink, buf_out); ret = ff_filter_frame(outlink, buf_out);
s->got_output = 1; s->got_output = 1;
} }
...@@ -232,7 +232,7 @@ fail: ...@@ -232,7 +232,7 @@ fail:
avfilter_unref_buffer(buf); avfilter_unref_buffer(buf);
} else { } else {
buf->format = outlink->format; buf->format = outlink->format;
ret = ff_filter_samples(outlink, buf); ret = ff_filter_frame(outlink, buf);
s->got_output = 1; s->got_output = 1;
} }
...@@ -243,7 +243,7 @@ static const AVFilterPad avfilter_af_resample_inputs[] = { ...@@ -243,7 +243,7 @@ static const AVFilterPad avfilter_af_resample_inputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ .min_perms = AV_PERM_READ
}, },
{ NULL } { NULL }
......
...@@ -84,7 +84,7 @@ static char *get_metadata_val(AVFilterBufferRef *insamples, const char *key) ...@@ -84,7 +84,7 @@ static char *get_metadata_val(AVFilterBufferRef *insamples, const char *key)
return e && e->value ? e->value : NULL; return e && e->value ? e->value : NULL;
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
{ {
int i; int i;
SilenceDetectContext *silence = inlink->dst->priv; SilenceDetectContext *silence = inlink->dst->priv;
...@@ -132,7 +132,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) ...@@ -132,7 +132,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples)
} }
} }
return ff_filter_samples(inlink->dst->outputs[0], insamples); return ff_filter_frame(inlink->dst->outputs[0], insamples);
} }
static int query_formats(AVFilterContext *ctx) static int query_formats(AVFilterContext *ctx)
...@@ -173,7 +173,7 @@ AVFilter avfilter_af_silencedetect = { ...@@ -173,7 +173,7 @@ AVFilter avfilter_af_silencedetect = {
{ .name = "default", { .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer, .get_audio_buffer = ff_null_get_audio_buffer,
.filter_samples = filter_samples, }, .filter_frame = filter_frame, },
{ .name = NULL } { .name = NULL }
}, },
.outputs = (const AVFilterPad[]) { .outputs = (const AVFilterPad[]) {
......
...@@ -110,7 +110,7 @@ static int query_formats(AVFilterContext *ctx) ...@@ -110,7 +110,7 @@ static int query_formats(AVFilterContext *ctx)
return 0; return 0;
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
{ {
VolumeContext *vol = inlink->dst->priv; VolumeContext *vol = inlink->dst->priv;
AVFilterLink *outlink = inlink->dst->outputs[0]; AVFilterLink *outlink = inlink->dst->outputs[0];
...@@ -169,7 +169,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) ...@@ -169,7 +169,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples)
} }
} }
} }
return ff_filter_samples(outlink, insamples); return ff_filter_frame(outlink, insamples);
} }
AVFilter avfilter_af_volume = { AVFilter avfilter_af_volume = {
...@@ -181,7 +181,7 @@ AVFilter avfilter_af_volume = { ...@@ -181,7 +181,7 @@ AVFilter avfilter_af_volume = {
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ|AV_PERM_WRITE}, .min_perms = AV_PERM_READ|AV_PERM_WRITE},
{ .name = NULL}}, { .name = NULL}},
......
...@@ -49,7 +49,7 @@ static int query_formats(AVFilterContext *ctx) ...@@ -49,7 +49,7 @@ static int query_formats(AVFilterContext *ctx)
return 0; return 0;
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samples) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *samples)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
VolDetectContext *vd = ctx->priv; VolDetectContext *vd = ctx->priv;
...@@ -70,7 +70,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samples) ...@@ -70,7 +70,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samples)
vd->histogram[pcm[i] + 0x8000]++; vd->histogram[pcm[i] + 0x8000]++;
} }
return ff_filter_samples(inlink->dst->outputs[0], samples); return ff_filter_frame(inlink->dst->outputs[0], samples);
} }
#define MAX_DB 91 #define MAX_DB 91
...@@ -143,7 +143,7 @@ AVFilter avfilter_af_volumedetect = { ...@@ -143,7 +143,7 @@ AVFilter avfilter_af_volumedetect = {
{ .name = "default", { .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer, .get_audio_buffer = ff_null_get_audio_buffer,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ, }, .min_perms = AV_PERM_READ, },
{ .name = NULL } { .name = NULL }
}, },
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#include "avfilter.h" #include "avfilter.h"
#include "internal.h" #include "internal.h"
static int null_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref) static int null_filter_frame(AVFilterLink *link, AVFilterBufferRef *samplesref)
{ {
avfilter_unref_bufferp(&samplesref); avfilter_unref_bufferp(&samplesref);
return 0; return 0;
...@@ -32,7 +32,7 @@ static const AVFilterPad avfilter_asink_anullsink_inputs[] = { ...@@ -32,7 +32,7 @@ static const AVFilterPad avfilter_asink_anullsink_inputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = null_filter_samples, .filter_frame = null_filter_frame,
}, },
{ NULL }, { NULL },
}; };
......
...@@ -237,7 +237,7 @@ static int request_frame(AVFilterLink *outlink) ...@@ -237,7 +237,7 @@ static int request_frame(AVFilterLink *outlink)
samplesref->audio->sample_rate = eval->sample_rate; samplesref->audio->sample_rate = eval->sample_rate;
eval->pts += eval->nb_samples; eval->pts += eval->nb_samples;
ff_filter_samples(outlink, samplesref); ff_filter_frame(outlink, samplesref);
return 0; return 0;
} }
......
...@@ -111,7 +111,7 @@ static int request_frame(AVFilterLink *outlink) ...@@ -111,7 +111,7 @@ static int request_frame(AVFilterLink *outlink)
samplesref->audio->channel_layout = null->channel_layout; samplesref->audio->channel_layout = null->channel_layout;
samplesref->audio->sample_rate = outlink->sample_rate; samplesref->audio->sample_rate = outlink->sample_rate;
ff_filter_samples(outlink, avfilter_ref_buffer(samplesref, ~0)); ff_filter_frame(outlink, avfilter_ref_buffer(samplesref, ~0));
avfilter_unref_buffer(samplesref); avfilter_unref_buffer(samplesref);
null->pts += null->nb_samples; null->pts += null->nb_samples;
......
...@@ -265,7 +265,7 @@ static int request_frame(AVFilterLink *outlink) ...@@ -265,7 +265,7 @@ static int request_frame(AVFilterLink *outlink)
flite->wave_samples += nb_samples * flite->wave->num_channels; flite->wave_samples += nb_samples * flite->wave->num_channels;
flite->wave_nb_samples -= nb_samples; flite->wave_nb_samples -= nb_samples;
return ff_filter_samples(outlink, samplesref); return ff_filter_frame(outlink, samplesref);
} }
AVFilter avfilter_asrc_flite = { AVFilter avfilter_asrc_flite = {
......
...@@ -157,30 +157,30 @@ fail: ...@@ -157,30 +157,30 @@ fail:
return NULL; return NULL;
} }
static int default_filter_samples(AVFilterLink *link, static int default_filter_frame(AVFilterLink *link,
AVFilterBufferRef *samplesref) AVFilterBufferRef *samplesref)
{ {
return ff_filter_samples(link->dst->outputs[0], samplesref); return ff_filter_frame(link->dst->outputs[0], samplesref);
} }
int ff_filter_samples_framed(AVFilterLink *link, AVFilterBufferRef *samplesref) int ff_filter_frame_framed(AVFilterLink *link, AVFilterBufferRef *samplesref)
{ {
int (*filter_samples)(AVFilterLink *, AVFilterBufferRef *); int (*filter_frame)(AVFilterLink *, AVFilterBufferRef *);
AVFilterPad *src = link->srcpad; AVFilterPad *src = link->srcpad;
AVFilterPad *dst = link->dstpad; AVFilterPad *dst = link->dstpad;
int64_t pts; int64_t pts;
AVFilterBufferRef *buf_out; AVFilterBufferRef *buf_out;
int ret; int ret;
FF_TPRINTF_START(NULL, filter_samples); ff_tlog_link(NULL, link, 1); FF_TPRINTF_START(NULL, filter_frame); ff_tlog_link(NULL, link, 1);
if (link->closed) { if (link->closed) {
avfilter_unref_buffer(samplesref); avfilter_unref_buffer(samplesref);
return AVERROR_EOF; return AVERROR_EOF;
} }
if (!(filter_samples = dst->filter_samples)) if (!(filter_frame = dst->filter_frame))
filter_samples = default_filter_samples; filter_frame = default_filter_frame;
av_assert1((samplesref->perms & src->min_perms) == src->min_perms); av_assert1((samplesref->perms & src->min_perms) == src->min_perms);
samplesref->perms &= ~ src->rej_perms; samplesref->perms &= ~ src->rej_perms;
...@@ -213,12 +213,12 @@ int ff_filter_samples_framed(AVFilterLink *link, AVFilterBufferRef *samplesref) ...@@ -213,12 +213,12 @@ int ff_filter_samples_framed(AVFilterLink *link, AVFilterBufferRef *samplesref)
link->cur_buf = buf_out; link->cur_buf = buf_out;
pts = buf_out->pts; pts = buf_out->pts;
ret = filter_samples(link, buf_out); ret = filter_frame(link, buf_out);
ff_update_link_current_pts(link, pts); ff_update_link_current_pts(link, pts);
return ret; return ret;
} }
int ff_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref) int ff_filter_frame(AVFilterLink *link, AVFilterBufferRef *samplesref)
{ {
int insamples = samplesref->audio->nb_samples, inpos = 0, nb_samples; int insamples = samplesref->audio->nb_samples, inpos = 0, nb_samples;
AVFilterBufferRef *pbuf = link->partial_buf; AVFilterBufferRef *pbuf = link->partial_buf;
...@@ -232,7 +232,7 @@ int ff_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref) ...@@ -232,7 +232,7 @@ int ff_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref)
if (!link->min_samples || if (!link->min_samples ||
(!pbuf && (!pbuf &&
insamples >= link->min_samples && insamples <= link->max_samples)) { insamples >= link->min_samples && insamples <= link->max_samples)) {
return ff_filter_samples_framed(link, samplesref); return ff_filter_frame_framed(link, samplesref);
} }
/* Handle framing (min_samples, max_samples) */ /* Handle framing (min_samples, max_samples) */
while (insamples) { while (insamples) {
...@@ -259,7 +259,7 @@ int ff_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref) ...@@ -259,7 +259,7 @@ int ff_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref)
insamples -= nb_samples; insamples -= nb_samples;
pbuf->audio->nb_samples += nb_samples; pbuf->audio->nb_samples += nb_samples;
if (pbuf->audio->nb_samples >= link->min_samples) { if (pbuf->audio->nb_samples >= link->min_samples) {
ret = ff_filter_samples_framed(link, pbuf); ret = ff_filter_frame_framed(link, pbuf);
pbuf = NULL; pbuf = NULL;
} }
} }
......
...@@ -74,13 +74,13 @@ AVFilterBufferRef *ff_get_audio_buffer(AVFilterLink *link, int perms, ...@@ -74,13 +74,13 @@ AVFilterBufferRef *ff_get_audio_buffer(AVFilterLink *link, int perms,
* @return >= 0 on success, a negative AVERROR on error. The receiving filter * @return >= 0 on success, a negative AVERROR on error. The receiving filter
* is responsible for unreferencing samplesref in case of error. * is responsible for unreferencing samplesref in case of error.
*/ */
int ff_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref); int ff_filter_frame(AVFilterLink *link, AVFilterBufferRef *samplesref);
/** /**
* Send a buffer of audio samples to the next link, without checking * Send a buffer of audio samples to the next link, without checking
* min_samples. * min_samples.
*/ */
int ff_filter_samples_framed(AVFilterLink *link, int ff_filter_frame_framed(AVFilterLink *link,
AVFilterBufferRef *samplesref); AVFilterBufferRef *samplesref);
#endif /* AVFILTER_AUDIO_H */ #endif /* AVFILTER_AUDIO_H */
...@@ -185,7 +185,7 @@ static void push_frame(AVFilterContext *ctx, unsigned in_no, ...@@ -185,7 +185,7 @@ static void push_frame(AVFilterContext *ctx, unsigned in_no,
ff_end_frame(outlink); ff_end_frame(outlink);
break; break;
case AVMEDIA_TYPE_AUDIO: case AVMEDIA_TYPE_AUDIO:
ff_filter_samples(outlink, buf); ff_filter_frame(outlink, buf);
break; break;
} }
} }
...@@ -244,7 +244,7 @@ static int end_frame(AVFilterLink *inlink) ...@@ -244,7 +244,7 @@ static int end_frame(AVFilterLink *inlink)
return 0; return 0;
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *buf)
{ {
process_frame(inlink, buf); process_frame(inlink, buf);
return 0; /* enhancement: handle error return */ return 0; /* enhancement: handle error return */
...@@ -297,7 +297,7 @@ static void send_silence(AVFilterContext *ctx, unsigned in_no, unsigned out_no) ...@@ -297,7 +297,7 @@ static void send_silence(AVFilterContext *ctx, unsigned in_no, unsigned out_no)
av_samples_set_silence(buf->extended_data, 0, frame_nb_samples, av_samples_set_silence(buf->extended_data, 0, frame_nb_samples,
nb_channels, outlink->format); nb_channels, outlink->format);
buf->pts = base_pts + av_rescale_q(sent, rate_tb, outlink->time_base); buf->pts = base_pts + av_rescale_q(sent, rate_tb, outlink->time_base);
ff_filter_samples(outlink, buf); ff_filter_frame(outlink, buf);
sent += frame_nb_samples; sent += frame_nb_samples;
nb_samples -= frame_nb_samples; nb_samples -= frame_nb_samples;
} }
...@@ -397,7 +397,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args) ...@@ -397,7 +397,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
pad.draw_slice = draw_slice; pad.draw_slice = draw_slice;
pad.end_frame = end_frame; pad.end_frame = end_frame;
} else { } else {
pad.filter_samples = filter_samples; pad.filter_frame = filter_frame;
} }
ff_insert_inpad(ctx, ctx->nb_inputs, &pad); ff_insert_inpad(ctx, ctx->nb_inputs, &pad);
} }
......
...@@ -281,7 +281,7 @@ static int plot_spectrum_column(AVFilterLink *inlink, AVFilterBufferRef *insampl ...@@ -281,7 +281,7 @@ static int plot_spectrum_column(AVFilterLink *inlink, AVFilterBufferRef *insampl
return add_samples; return add_samples;
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
ShowSpectrumContext *showspectrum = ctx->priv; ShowSpectrumContext *showspectrum = ctx->priv;
...@@ -310,7 +310,7 @@ AVFilter avfilter_avf_showspectrum = { ...@@ -310,7 +310,7 @@ AVFilter avfilter_avf_showspectrum = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ, .min_perms = AV_PERM_READ,
}, },
{ .name = NULL } { .name = NULL }
......
...@@ -179,7 +179,7 @@ static int request_frame(AVFilterLink *outlink) ...@@ -179,7 +179,7 @@ static int request_frame(AVFilterLink *outlink)
#define MAX_INT16 ((1<<15) -1) #define MAX_INT16 ((1<<15) -1)
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
AVFilterLink *outlink = ctx->outputs[0]; AVFilterLink *outlink = ctx->outputs[0];
...@@ -240,7 +240,7 @@ AVFilter avfilter_avf_showwaves = { ...@@ -240,7 +240,7 @@ AVFilter avfilter_avf_showwaves = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ, .min_perms = AV_PERM_READ,
}, },
{ .name = NULL } { .name = NULL }
......
...@@ -343,7 +343,7 @@ int ff_request_frame(AVFilterLink *link) ...@@ -343,7 +343,7 @@ int ff_request_frame(AVFilterLink *link)
if (ret == AVERROR_EOF && link->partial_buf) { if (ret == AVERROR_EOF && link->partial_buf) {
AVFilterBufferRef *pbuf = link->partial_buf; AVFilterBufferRef *pbuf = link->partial_buf;
link->partial_buf = NULL; link->partial_buf = NULL;
ff_filter_samples_framed(link, pbuf); ff_filter_frame_framed(link, pbuf);
return 0; return 0;
} }
if (ret == AVERROR_EOF) if (ret == AVERROR_EOF)
......
...@@ -339,7 +339,7 @@ struct AVFilterPad { ...@@ -339,7 +339,7 @@ struct AVFilterPad {
* must ensure that samplesref is properly unreferenced on error if it * must ensure that samplesref is properly unreferenced on error if it
* hasn't been passed on to another filter. * hasn't been passed on to another filter.
*/ */
int (*filter_samples)(AVFilterLink *link, AVFilterBufferRef *samplesref); int (*filter_frame)(AVFilterLink *link, AVFilterBufferRef *samplesref);
/** /**
* Frame poll callback. This returns the number of immediately available * Frame poll callback. This returns the number of immediately available
...@@ -678,7 +678,7 @@ struct AVFilterLink { ...@@ -678,7 +678,7 @@ struct AVFilterLink {
int partial_buf_size; int partial_buf_size;
/** /**
* Minimum number of samples to filter at once. If filter_samples() is * Minimum number of samples to filter at once. If filter_frame() is
* called with fewer samples, it will accumulate them in partial_buf. * called with fewer samples, it will accumulate them in partial_buf.
* This field and the related ones must not be changed after filtering * This field and the related ones must not be changed after filtering
* has started. * has started.
...@@ -687,7 +687,7 @@ struct AVFilterLink { ...@@ -687,7 +687,7 @@ struct AVFilterLink {
int min_samples; int min_samples;
/** /**
* Maximum number of samples to filter at once. If filter_samples() is * Maximum number of samples to filter at once. If filter_frame() is
* called with more samples, it will split them. * called with more samples, it will split them.
*/ */
int max_samples; int max_samples;
...@@ -703,7 +703,7 @@ struct AVFilterLink { ...@@ -703,7 +703,7 @@ struct AVFilterLink {
/** /**
* True if the link is closed. * True if the link is closed.
* If set, all attemps of start_frame, filter_samples or request_frame * If set, all attemps of start_frame, filter_frame or request_frame
* will fail with AVERROR_EOF, and if necessary the reference will be * will fail with AVERROR_EOF, and if necessary the reference will be
* destroyed. * destroyed.
* If request_frame returns AVERROR_EOF, this flag is set on the * If request_frame returns AVERROR_EOF, this flag is set on the
......
...@@ -169,7 +169,7 @@ static const AVFilterPad avfilter_asink_abuffer_inputs[] = { ...@@ -169,7 +169,7 @@ static const AVFilterPad avfilter_asink_abuffer_inputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = start_frame, .filter_frame = start_frame,
.min_perms = AV_PERM_READ, .min_perms = AV_PERM_READ,
.needs_fifo = 1 .needs_fifo = 1
}, },
......
...@@ -379,7 +379,7 @@ static int request_frame(AVFilterLink *link) ...@@ -379,7 +379,7 @@ static int request_frame(AVFilterLink *link)
return ret; return ret;
break; break;
case AVMEDIA_TYPE_AUDIO: case AVMEDIA_TYPE_AUDIO:
ret = ff_filter_samples(link, buf); ret = ff_filter_frame(link, buf);
break; break;
default: default:
avfilter_unref_bufferp(&buf); avfilter_unref_bufferp(&buf);
......
...@@ -436,7 +436,7 @@ static int gate_update(struct integrator *integ, double power, ...@@ -436,7 +436,7 @@ static int gate_update(struct integrator *integ, double power,
return gate_hist_pos; return gate_hist_pos;
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
{ {
int i, ch; int i, ch;
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
...@@ -638,7 +638,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) ...@@ -638,7 +638,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples)
} }
} }
return ff_filter_samples(ctx->outputs[ebur128->do_video], insamples); return ff_filter_frame(ctx->outputs[ebur128->do_video], insamples);
} }
static int query_formats(AVFilterContext *ctx) static int query_formats(AVFilterContext *ctx)
...@@ -740,7 +740,7 @@ AVFilter avfilter_af_ebur128 = { ...@@ -740,7 +740,7 @@ AVFilter avfilter_af_ebur128 = {
{ .name = "default", { .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer, .get_audio_buffer = ff_null_get_audio_buffer,
.filter_samples = filter_samples, }, .filter_frame = filter_frame, },
{ .name = NULL } { .name = NULL }
}, },
.outputs = NULL, .outputs = NULL,
......
...@@ -511,7 +511,7 @@ end: ...@@ -511,7 +511,7 @@ end:
switch (inlink->type) { switch (inlink->type) {
case AVMEDIA_TYPE_VIDEO: return ff_start_frame (inlink->dst->outputs[0], ref); case AVMEDIA_TYPE_VIDEO: return ff_start_frame (inlink->dst->outputs[0], ref);
case AVMEDIA_TYPE_AUDIO: return ff_filter_samples(inlink->dst->outputs[0], ref); case AVMEDIA_TYPE_AUDIO: return ff_filter_frame(inlink->dst->outputs[0], ref);
} }
return AVERROR(ENOSYS); return AVERROR(ENOSYS);
} }
...@@ -562,7 +562,7 @@ AVFilter avfilter_af_asendcmd = { ...@@ -562,7 +562,7 @@ AVFilter avfilter_af_asendcmd = {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer, .get_audio_buffer = ff_null_get_audio_buffer,
.filter_samples = process_frame, .filter_frame = process_frame,
}, },
{ .name = NULL } { .name = NULL }
}, },
......
...@@ -174,7 +174,7 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref) ...@@ -174,7 +174,7 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
setpts->var_values[VAR_N] += 1.0; setpts->var_values[VAR_N] += 1.0;
if (setpts->type == AVMEDIA_TYPE_AUDIO) { if (setpts->type == AVMEDIA_TYPE_AUDIO) {
setpts->var_values[VAR_NB_CONSUMED_SAMPLES] += inpicref->audio->nb_samples; setpts->var_values[VAR_NB_CONSUMED_SAMPLES] += inpicref->audio->nb_samples;
return ff_filter_samples(inlink->dst->outputs[0], outpicref); return ff_filter_frame(inlink->dst->outputs[0], outpicref);
} else } else
return ff_start_frame (inlink->dst->outputs[0], outpicref); return ff_start_frame (inlink->dst->outputs[0], outpicref);
} }
...@@ -201,7 +201,7 @@ AVFilter avfilter_af_asetpts = { ...@@ -201,7 +201,7 @@ AVFilter avfilter_af_asetpts = {
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer, .get_audio_buffer = ff_null_get_audio_buffer,
.config_props = config_input, .config_props = config_input,
.filter_samples = filter_frame, .filter_frame = filter_frame,
}, },
{ .name = NULL } { .name = NULL }
}, },
......
...@@ -120,7 +120,7 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) ...@@ -120,7 +120,7 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
return ff_start_frame(outlink, picref); return ff_start_frame(outlink, picref);
} }
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *samplesref)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
AVFilterLink *outlink = ctx->outputs[0]; AVFilterLink *outlink = ctx->outputs[0];
...@@ -133,7 +133,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref) ...@@ -133,7 +133,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref)
outlink->time_base.num, outlink->time_base.den, samplesref->pts); outlink->time_base.num, outlink->time_base.den, samplesref->pts);
} }
return ff_filter_samples(outlink, samplesref); return ff_filter_frame(outlink, samplesref);
} }
#if CONFIG_SETTB_FILTER #if CONFIG_SETTB_FILTER
...@@ -181,7 +181,7 @@ AVFilter avfilter_af_asettb = { ...@@ -181,7 +181,7 @@ AVFilter avfilter_af_asettb = {
{ .name = "default", { .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer, .get_audio_buffer = ff_null_get_audio_buffer,
.filter_samples = filter_samples, }, .filter_frame = filter_frame, },
{ .name = NULL } { .name = NULL }
}, },
.outputs = (const AVFilterPad[]) { .outputs = (const AVFilterPad[]) {
......
...@@ -228,7 +228,7 @@ static int return_audio_frame(AVFilterContext *ctx) ...@@ -228,7 +228,7 @@ static int return_audio_frame(AVFilterContext *ctx)
buf_out = s->buf_out; buf_out = s->buf_out;
s->buf_out = NULL; s->buf_out = NULL;
} }
return ff_filter_samples(link, buf_out); return ff_filter_frame(link, buf_out);
} }
static int request_frame(AVFilterLink *outlink) static int request_frame(AVFilterLink *outlink)
...@@ -257,7 +257,7 @@ static int request_frame(AVFilterLink *outlink) ...@@ -257,7 +257,7 @@ static int request_frame(AVFilterLink *outlink)
if (outlink->request_samples) { if (outlink->request_samples) {
return return_audio_frame(outlink->src); return return_audio_frame(outlink->src);
} else { } else {
ret = ff_filter_samples(outlink, fifo->root.next->buf); ret = ff_filter_frame(outlink, fifo->root.next->buf);
queue_pop(fifo); queue_pop(fifo);
} }
break; break;
...@@ -308,7 +308,7 @@ static const AVFilterPad avfilter_af_afifo_inputs[] = { ...@@ -308,7 +308,7 @@ static const AVFilterPad avfilter_af_afifo_inputs[] = {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer, .get_audio_buffer = ff_null_get_audio_buffer,
.filter_samples = add_to_queue, .filter_frame = add_to_queue,
.min_perms = AV_PERM_PRESERVE, .min_perms = AV_PERM_PRESERVE,
}, },
{ NULL } { NULL }
......
...@@ -147,7 +147,7 @@ struct AVFilterPad { ...@@ -147,7 +147,7 @@ struct AVFilterPad {
* must ensure that samplesref is properly unreferenced on error if it * must ensure that samplesref is properly unreferenced on error if it
* hasn't been passed on to another filter. * hasn't been passed on to another filter.
*/ */
int (*filter_samples)(AVFilterLink *link, AVFilterBufferRef *samplesref); int (*filter_frame)(AVFilterLink *link, AVFilterBufferRef *samplesref);
/** /**
* Frame poll callback. This returns the number of immediately available * Frame poll callback. This returns the number of immediately available
......
...@@ -268,7 +268,7 @@ AVFilter avfilter_vsink_buffersink = { ...@@ -268,7 +268,7 @@ AVFilter avfilter_vsink_buffersink = {
.outputs = (const AVFilterPad[]) {{ .name = NULL }}, .outputs = (const AVFilterPad[]) {{ .name = NULL }},
}; };
static int filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref) static int filter_frame(AVFilterLink *link, AVFilterBufferRef *samplesref)
{ {
end_frame(link); end_frame(link);
return 0; return 0;
...@@ -338,7 +338,7 @@ AVFilter avfilter_asink_ffabuffersink = { ...@@ -338,7 +338,7 @@ AVFilter avfilter_asink_ffabuffersink = {
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE, }, .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, },
{ .name = NULL }}, { .name = NULL }},
.outputs = (const AVFilterPad[]) {{ .name = NULL }}, .outputs = (const AVFilterPad[]) {{ .name = NULL }},
...@@ -354,7 +354,7 @@ AVFilter avfilter_asink_abuffersink = { ...@@ -354,7 +354,7 @@ AVFilter avfilter_asink_abuffersink = {
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE, }, .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, },
{ .name = NULL }}, { .name = NULL }},
.outputs = (const AVFilterPad[]) {{ .name = NULL }}, .outputs = (const AVFilterPad[]) {{ .name = NULL }},
...@@ -372,13 +372,13 @@ int av_buffersink_read(AVFilterContext *ctx, AVFilterBufferRef **buf) ...@@ -372,13 +372,13 @@ int av_buffersink_read(AVFilterContext *ctx, AVFilterBufferRef **buf)
if (ctx->filter-> inputs[0].start_frame == if (ctx->filter-> inputs[0].start_frame ==
avfilter_vsink_buffer. inputs[0].start_frame || avfilter_vsink_buffer. inputs[0].start_frame ||
ctx->filter-> inputs[0].filter_samples == ctx->filter-> inputs[0].filter_frame ==
avfilter_asink_abuffer.inputs[0].filter_samples) avfilter_asink_abuffer.inputs[0].filter_frame)
return ff_buffersink_read_compat(ctx, buf); return ff_buffersink_read_compat(ctx, buf);
av_assert0(ctx->filter-> inputs[0].end_frame == av_assert0(ctx->filter-> inputs[0].end_frame ==
avfilter_vsink_ffbuffersink. inputs[0].end_frame || avfilter_vsink_ffbuffersink. inputs[0].end_frame ||
ctx->filter-> inputs[0].filter_samples == ctx->filter-> inputs[0].filter_frame ==
avfilter_asink_ffabuffersink.inputs[0].filter_samples); avfilter_asink_ffabuffersink.inputs[0].filter_frame);
ret = av_buffersink_get_buffer_ref(ctx, &tbuf, ret = av_buffersink_get_buffer_ref(ctx, &tbuf,
buf ? 0 : AV_BUFFERSINK_FLAG_PEEK); buf ? 0 : AV_BUFFERSINK_FLAG_PEEK);
...@@ -399,11 +399,11 @@ int av_buffersink_read_samples(AVFilterContext *ctx, AVFilterBufferRef **buf, ...@@ -399,11 +399,11 @@ int av_buffersink_read_samples(AVFilterContext *ctx, AVFilterBufferRef **buf,
AVFilterLink *link = ctx->inputs[0]; AVFilterLink *link = ctx->inputs[0];
int nb_channels = av_get_channel_layout_nb_channels(link->channel_layout); int nb_channels = av_get_channel_layout_nb_channels(link->channel_layout);
if (ctx->filter-> inputs[0].filter_samples == if (ctx->filter-> inputs[0].filter_frame ==
avfilter_asink_abuffer.inputs[0].filter_samples) avfilter_asink_abuffer.inputs[0].filter_frame)
return ff_buffersink_read_samples_compat(ctx, buf, nb_samples); return ff_buffersink_read_samples_compat(ctx, buf, nb_samples);
av_assert0(ctx->filter-> inputs[0].filter_samples == av_assert0(ctx->filter-> inputs[0].filter_frame ==
avfilter_asink_ffabuffersink.inputs[0].filter_samples); avfilter_asink_ffabuffersink.inputs[0].filter_frame);
tbuf = ff_get_audio_buffer(link, AV_PERM_WRITE, nb_samples); tbuf = ff_get_audio_buffer(link, AV_PERM_WRITE, nb_samples);
if (!tbuf) if (!tbuf)
......
...@@ -142,7 +142,7 @@ AVFilter avfilter_vf_split = { ...@@ -142,7 +142,7 @@ AVFilter avfilter_vf_split = {
.outputs = NULL, .outputs = NULL,
}; };
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *samplesref)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
int i, ret = 0; int i, ret = 0;
...@@ -155,7 +155,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref) ...@@ -155,7 +155,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref)
break; break;
} }
ret = ff_filter_samples(inlink->dst->outputs[i], buf_out); ret = ff_filter_frame(inlink->dst->outputs[i], buf_out);
if (ret < 0) if (ret < 0)
break; break;
} }
...@@ -168,7 +168,7 @@ static const AVFilterPad avfilter_af_asplit_inputs[] = { ...@@ -168,7 +168,7 @@ static const AVFilterPad avfilter_af_asplit_inputs[] = {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer, .get_audio_buffer = ff_null_get_audio_buffer,
.filter_samples = filter_samples .filter_frame = filter_frame
}, },
{ NULL } { NULL }
}; };
......
...@@ -577,7 +577,7 @@ static int movie_push_frame(AVFilterContext *ctx, unsigned out_id) ...@@ -577,7 +577,7 @@ static int movie_push_frame(AVFilterContext *ctx, unsigned out_id)
ff_end_frame(outlink); ff_end_frame(outlink);
break; break;
case AVMEDIA_TYPE_AUDIO: case AVMEDIA_TYPE_AUDIO:
ff_filter_samples(outlink, buf); ff_filter_frame(outlink, buf);
break; break;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment