diff options
author | Nicolas George <nicolas.george@normalesup.org> | 2012-12-30 19:28:51 +0100 |
---|---|---|
committer | Nicolas George <nicolas.george@normalesup.org> | 2013-01-01 15:19:04 +0100 |
commit | 82541d833016ff899b6f19a02de8781538e24c36 (patch) | |
tree | a50b2f5fcdf03f0b511a842c7638e06574eb080e /libavfilter/audio.c | |
parent | 765158dd82a2e985f4eb0b201a8256964403f623 (diff) | |
download | ffmpeg-82541d833016ff899b6f19a02de8781538e24c36.tar.gz |
lavfi: merge all filtering code into ff_filter_frame.
Diffstat (limited to 'libavfilter/audio.c')
-rw-r--r-- | libavfilter/audio.c | 111 |
1 files changed, 0 insertions, 111 deletions
diff --git a/libavfilter/audio.c b/libavfilter/audio.c index 74cf9a8130..72dcd148a4 100644 --- a/libavfilter/audio.c +++ b/libavfilter/audio.c @@ -179,114 +179,3 @@ AVFilterBufferRef* avfilter_get_audio_buffer_ref_from_arrays(uint8_t **data, nb_samples, sample_fmt, channels, channel_layout); } - -static int default_filter_frame(AVFilterLink *link, AVFilterBufferRef *frame) -{ - return ff_filter_frame(link->dst->outputs[0], frame); -} - -int ff_filter_samples_framed(AVFilterLink *link, AVFilterBufferRef *samplesref) -{ - int (*filter_frame)(AVFilterLink *, AVFilterBufferRef *); - AVFilterPad *src = link->srcpad; - AVFilterPad *dst = link->dstpad; - int64_t pts; - AVFilterBufferRef *buf_out; - int ret; - - FF_TPRINTF_START(NULL, filter_frame); ff_tlog_link(NULL, link, 1); - - if (link->closed) { - avfilter_unref_buffer(samplesref); - return AVERROR_EOF; - } - - if (!(filter_frame = dst->filter_frame)) - filter_frame = default_filter_frame; - - av_assert1((samplesref->perms & src->min_perms) == src->min_perms); - samplesref->perms &= ~ src->rej_perms; - - /* prepare to copy the samples if the buffer has insufficient permissions */ - if ((dst->min_perms & samplesref->perms) != dst->min_perms || - dst->rej_perms & samplesref->perms) { - av_log(link->dst, AV_LOG_DEBUG, - "Copying audio data in avfilter (have perms %x, need %x, reject %x)\n", - samplesref->perms, link->dstpad->min_perms, link->dstpad->rej_perms); - - buf_out = ff_default_get_audio_buffer(link, dst->min_perms, - samplesref->audio->nb_samples); - if (!buf_out) { - avfilter_unref_buffer(samplesref); - return AVERROR(ENOMEM); - } - buf_out->pts = samplesref->pts; - buf_out->audio->sample_rate = samplesref->audio->sample_rate; - - /* Copy actual data into new samples buffer */ - av_samples_copy(buf_out->extended_data, samplesref->extended_data, - 0, 0, samplesref->audio->nb_samples, - av_get_channel_layout_nb_channels(link->channel_layout), - link->format); - - avfilter_unref_buffer(samplesref); - } else - buf_out = samplesref; - - link->cur_buf = buf_out; - pts = buf_out->pts; - ret = filter_frame(link, buf_out); - ff_update_link_current_pts(link, pts); - return ret; -} - -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; - - av_assert1(samplesref->format == link->format); - av_assert1(samplesref->audio->channels == link->channels); - av_assert1(samplesref->audio->channel_layout == link->channel_layout); - av_assert1(samplesref->audio->sample_rate == link->sample_rate); - - if (!link->min_samples || - (!pbuf && - insamples >= link->min_samples && insamples <= link->max_samples)) { - return ff_filter_samples_framed(link, samplesref); - } - /* Handle framing (min_samples, max_samples) */ - while (insamples) { - if (!pbuf) { - AVRational samples_tb = { 1, link->sample_rate }; - int perms = link->dstpad->min_perms | AV_PERM_WRITE; - pbuf = ff_get_audio_buffer(link, perms, link->partial_buf_size); - if (!pbuf) { - av_log(link->dst, AV_LOG_WARNING, - "Samples dropped due to memory allocation failure.\n"); - return 0; - } - avfilter_copy_buffer_ref_props(pbuf, samplesref); - pbuf->pts = samplesref->pts + - av_rescale_q(inpos, samples_tb, link->time_base); - pbuf->audio->nb_samples = 0; - } - nb_samples = FFMIN(insamples, - link->partial_buf_size - pbuf->audio->nb_samples); - av_samples_copy(pbuf->extended_data, samplesref->extended_data, - pbuf->audio->nb_samples, inpos, - nb_samples, nb_channels, link->format); - inpos += nb_samples; - insamples -= nb_samples; - pbuf->audio->nb_samples += nb_samples; - if (pbuf->audio->nb_samples >= link->min_samples) { - ret = ff_filter_samples_framed(link, pbuf); - pbuf = NULL; - } - } - avfilter_unref_buffer(samplesref); - link->partial_buf = pbuf; - return ret; -} |