diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-07-09 22:10:38 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-07-09 22:40:12 +0200 |
commit | f8911b987de4a84ff8ae92f41ff492ece4acadb9 (patch) | |
tree | 0ebda51a6ba23d790da30a7168870928954da395 /libavfilter/audio.c | |
parent | bf5386385dc504a076453ad58f61f808677be747 (diff) | |
parent | 5467742232c312b7d61dca7ac57447f728d8d6c9 (diff) | |
download | ffmpeg-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.c | 26 |
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; } |