diff options
author | Paul B Mahol <onemda@gmail.com> | 2022-02-13 20:40:01 +0100 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2022-02-14 17:51:28 +0100 |
commit | 9e11a7e193255e40836ce7f74bfa6df9498c07bd (patch) | |
tree | dccd7e0cd62529b5326cc122b9967aa1387ce50f /libavfilter | |
parent | 66f8f9ed2930c1aac5bab2c991ea2595274ecf8c (diff) |
avfilter/af_aderivative: add timeline support
Diffstat (limited to 'libavfilter')
-rw-r--r-- | libavfilter/af_aderivative.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/libavfilter/af_aderivative.c b/libavfilter/af_aderivative.c index baa272d609..ca8af6cec8 100644 --- a/libavfilter/af_aderivative.c +++ b/libavfilter/af_aderivative.c @@ -16,6 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "libavutil/opt.h" #include "audio.h" #include "avfilter.h" #include "internal.h" @@ -103,8 +104,18 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) AVFilterContext *ctx = inlink->dst; ADerivativeContext *s = ctx->priv; AVFilterLink *outlink = ctx->outputs[0]; - AVFrame *out = ff_get_audio_buffer(outlink, in->nb_samples); + AVFrame *out; + if (ctx->is_disabled) { + if (s->prev) + av_samples_set_silence(s->prev->extended_data, 0, 1, + s->prev->channels, + s->prev->format); + + return ff_filter_frame(outlink, in); + } + + out = ff_get_audio_buffer(outlink, in->nb_samples); if (!out) { av_frame_free(&in); return AVERROR(ENOMEM); @@ -149,23 +160,33 @@ static const AVFilterPad aderivative_outputs[] = { }, }; +static const AVOption aderivative_options[] = { + { NULL } +}; + +AVFILTER_DEFINE_CLASS_EXT(aderivative, "aderivative/aintegral", aderivative_options); + const AVFilter ff_af_aderivative = { .name = "aderivative", .description = NULL_IF_CONFIG_SMALL("Compute derivative of input audio."), .priv_size = sizeof(ADerivativeContext), + .priv_class = &aderivative_class, .uninit = uninit, FILTER_INPUTS(aderivative_inputs), FILTER_OUTPUTS(aderivative_outputs), FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_S32P, AV_SAMPLE_FMT_DBLP), + .flags = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL, }; const AVFilter ff_af_aintegral = { .name = "aintegral", .description = NULL_IF_CONFIG_SMALL("Compute integral of input audio."), .priv_size = sizeof(ADerivativeContext), + .priv_class = &aderivative_class, .uninit = uninit, FILTER_INPUTS(aderivative_inputs), FILTER_OUTPUTS(aderivative_outputs), FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_DBLP), + .flags = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL, }; |