diff options
author | Kyle Swanson <k@ylo.ph> | 2017-04-05 11:43:12 -0500 |
---|---|---|
committer | Kyle Swanson <k@ylo.ph> | 2017-04-05 11:43:12 -0500 |
commit | f3d8e0d369456113d1223cdf77072b52fc79eceb (patch) | |
tree | 73ce182a6fb48442312c4f208ac27c657f6f7f03 | |
parent | d8eb40bd70c9c6326f51ce4afe29c3d4485388b2 (diff) | |
download | ffmpeg-f3d8e0d369456113d1223cdf77072b52fc79eceb.tar.gz |
avfilter/af_loudnorm: do not upsample during second-pass linear normalization
Signed-off-by: Kyle Swanson <k@ylo.ph>
-rw-r--r-- | libavfilter/af_loudnorm.c | 58 | ||||
-rw-r--r-- | libavfilter/version.h | 2 |
2 files changed, 35 insertions, 25 deletions
diff --git a/libavfilter/af_loudnorm.c b/libavfilter/af_loudnorm.c index 9d91c76047..e3e815e272 100644 --- a/libavfilter/af_loudnorm.c +++ b/libavfilter/af_loudnorm.c @@ -682,6 +682,7 @@ static int request_frame(AVFilterLink *outlink) static int query_formats(AVFilterContext *ctx) { + LoudNormContext *s = ctx->priv; AVFilterFormats *formats; AVFilterChannelLayouts *layouts; AVFilterLink *inlink = ctx->inputs[0]; @@ -707,15 +708,17 @@ static int query_formats(AVFilterContext *ctx) if (ret < 0) return ret; - formats = ff_make_format_list(input_srate); - if (!formats) - return AVERROR(ENOMEM); - ret = ff_formats_ref(formats, &inlink->out_samplerates); - if (ret < 0) - return ret; - ret = ff_formats_ref(formats, &outlink->in_samplerates); - if (ret < 0) - return ret; + if (s->frame_type != LINEAR_MODE) { + formats = ff_make_format_list(input_srate); + if (!formats) + return AVERROR(ENOMEM); + ret = ff_formats_ref(formats, &inlink->out_samplerates); + if (ret < 0) + return ret; + ret = ff_formats_ref(formats, &outlink->in_samplerates); + if (ret < 0) + return ret; + } return 0; } @@ -754,21 +757,6 @@ static int config_input(AVFilterLink *inlink) init_gaussian_filter(s); - s->frame_type = FIRST_FRAME; - - if (s->linear) { - double offset, offset_tp; - offset = s->target_i - s->measured_i; - offset_tp = s->measured_tp + offset; - - if (s->measured_tp != 99 && s->measured_thresh != -70 && s->measured_lra != 0 && s->measured_i != 0) { - if ((offset_tp <= s->target_tp) && (s->measured_lra <= s->target_lra)) { - s->frame_type = LINEAR_MODE; - s->offset = offset; - } - } - } - if (s->frame_type != LINEAR_MODE) { inlink->min_samples = inlink->max_samples = @@ -790,6 +778,27 @@ static int config_input(AVFilterLink *inlink) return 0; } +static av_cold int init(AVFilterContext *ctx) +{ + LoudNormContext *s = ctx->priv; + s->frame_type = FIRST_FRAME; + + if (s->linear) { + double offset, offset_tp; + offset = s->target_i - s->measured_i; + offset_tp = s->measured_tp + offset; + + if (s->measured_tp != 99 && s->measured_thresh != -70 && s->measured_lra != 0 && s->measured_i != 0) { + if ((offset_tp <= s->target_tp) && (s->measured_lra <= s->target_lra)) { + s->frame_type = LINEAR_MODE; + s->offset = offset; + } + } + } + + return 0; +} + static av_cold void uninit(AVFilterContext *ctx) { LoudNormContext *s = ctx->priv; @@ -914,6 +923,7 @@ AVFilter ff_af_loudnorm = { .priv_size = sizeof(LoudNormContext), .priv_class = &loudnorm_class, .query_formats = query_formats, + .init = init, .uninit = uninit, .inputs = avfilter_af_loudnorm_inputs, .outputs = avfilter_af_loudnorm_outputs, diff --git a/libavfilter/version.h b/libavfilter/version.h index 9a4d1c7fea..6f33acb074 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -30,7 +30,7 @@ #include "libavutil/version.h" #define LIBAVFILTER_VERSION_MAJOR 6 -#define LIBAVFILTER_VERSION_MINOR 83 +#define LIBAVFILTER_VERSION_MINOR 84 #define LIBAVFILTER_VERSION_MICRO 100 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ |