[FFmpeg-cvslog] avfilter/af_loudnorm: do not upsample during second-pass linear normalization
Kyle Swanson
git at videolan.org
Wed Apr 5 20:03:13 EEST 2017
ffmpeg | branch: master | Kyle Swanson <k at ylo.ph> | Wed Apr 5 11:43:12 2017 -0500| [f3d8e0d369456113d1223cdf77072b52fc79eceb] | committer: Kyle Swanson
avfilter/af_loudnorm: do not upsample during second-pass linear normalization
Signed-off-by: Kyle Swanson <k at ylo.ph>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f3d8e0d369456113d1223cdf77072b52fc79eceb
---
libavfilter/af_loudnorm.c | 58 +++++++++++++++++++++++++++--------------------
libavfilter/version.h | 2 +-
2 files changed, 35 insertions(+), 25 deletions(-)
diff --git a/libavfilter/af_loudnorm.c b/libavfilter/af_loudnorm.c
index 9d91c76..e3e815e 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 9a4d1c7..6f33acb 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, \
More information about the ffmpeg-cvslog
mailing list