summaryrefslogtreecommitdiff
path: root/libavfilter/audio.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavfilter/audio.c')
-rw-r--r--libavfilter/audio.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/libavfilter/audio.c b/libavfilter/audio.c
index 0ebec3c2d0..f3eebbfdae 100644
--- a/libavfilter/audio.c
+++ b/libavfilter/audio.c
@@ -150,19 +150,19 @@ fail:
return NULL;
}
-static void default_filter_samples(AVFilterLink *link,
- AVFilterBufferRef *samplesref)
+static int default_filter_samples(AVFilterLink *link,
+ AVFilterBufferRef *samplesref)
{
- ff_filter_samples(link->dst->outputs[0], samplesref);
+ return ff_filter_samples(link->dst->outputs[0], samplesref);
}
-void ff_filter_samples_framed(AVFilterLink *link,
- AVFilterBufferRef *samplesref)
+int ff_filter_samples_framed(AVFilterLink *link, AVFilterBufferRef *samplesref)
{
- void (*filter_samples)(AVFilterLink *, AVFilterBufferRef *);
+ int (*filter_samples)(AVFilterLink *, AVFilterBufferRef *);
AVFilterPad *dst = link->dstpad;
int64_t pts;
AVFilterBufferRef *buf_out;
+ int ret;
FF_TPRINTF_START(NULL, filter_samples); ff_tlog_link(NULL, link, 1);
@@ -193,21 +193,22 @@ void ff_filter_samples_framed(AVFilterLink *link,
link->cur_buf = buf_out;
pts = buf_out->pts;
- filter_samples(link, buf_out);
+ ret = filter_samples(link, buf_out);
ff_update_link_current_pts(link, pts);
+ return ret;
}
-void ff_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref)
+int ff_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref)
{
int insamples = samplesref->audio->nb_samples, inpos = 0, nb_samples;
AVFilterBufferRef *pbuf = link->partial_buf;
int nb_channels = av_get_channel_layout_nb_channels(link->channel_layout);
+ int ret = 0;
if (!link->min_samples ||
(!pbuf &&
insamples >= link->min_samples && insamples <= link->max_samples)) {
- ff_filter_samples_framed(link, samplesref);
- return;
+ return ff_filter_samples_framed(link, samplesref);
}
/* Handle framing (min_samples, max_samples) */
while (insamples) {
@@ -218,7 +219,7 @@ void ff_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref)
if (!pbuf) {
av_log(link->dst, AV_LOG_WARNING,
"Samples dropped due to memory allocation failure.\n");
- return;
+ return 0;
}
avfilter_copy_buffer_ref_props(pbuf, samplesref);
pbuf->pts = samplesref->pts +
@@ -234,10 +235,11 @@ void ff_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref)
insamples -= nb_samples;
pbuf->audio->nb_samples += nb_samples;
if (pbuf->audio->nb_samples >= link->min_samples) {
- ff_filter_samples_framed(link, pbuf);
+ ret = ff_filter_samples_framed(link, pbuf);
pbuf = NULL;
}
}
avfilter_unref_buffer(samplesref);
link->partial_buf = pbuf;
+ return ret;
}