summaryrefslogtreecommitdiff
path: root/libavfilter/audio.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-07-09 22:10:38 +0200
committerMichael Niedermayer <michaelni@gmx.at>2012-07-09 22:40:12 +0200
commitf8911b987de4a84ff8ae92f41ff492ece4acadb9 (patch)
tree0ebda51a6ba23d790da30a7168870928954da395 /libavfilter/audio.c
parentbf5386385dc504a076453ad58f61f808677be747 (diff)
parent5467742232c312b7d61dca7ac57447f728d8d6c9 (diff)
downloadffmpeg-f8911b987de4a84ff8ae92f41ff492ece4acadb9.tar.gz
Merge remote-tracking branch 'qatar/master'
* qatar/master: mss3: use standard zigzag table mss3: split DSP functions that are used in MTS2(MSS4) into separate file motion-test: do not use getopt() tcp: add initial timeout limit for incoming connections configure: Change the rdtsc check to a linker check avconv: propagate fatal errors from lavfi. lavfi: add error handling to filter_samples(). fate-run: make avconv() properly deal with multiple inputs. asplit: don't leak the input buffer. af_resample: fix request_frame() behavior. af_asyncts: fix request_frame() behavior. libx264: support aspect ratio switching matroskadec: honor error_recognition when encountering unknown elements. lavr: resampling: add support for s32p, fltp, and dblp internal sample formats lavr: resampling: add filter type and Kaiser window beta to AVOptions lavr: Use AV_SAMPLE_FMT_NONE to auto-select the internal sample format lavr: mix: validate internal sample format in ff_audio_mix_init() Conflicts: ffmpeg.c ffplay.c libavcodec/libx264.c libavfilter/audio.c libavfilter/split.c libavformat/tcp.c tests/fate-run.sh Merged-by: Michael Niedermayer <michaelni@gmx.at>
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;
}