Browse Source

avfilter/af_loudnorm: do not upsample during second-pass linear normalization

Signed-off-by: Kyle Swanson <k@ylo.ph>
tags/n3.4
Kyle Swanson 9 years ago
parent
commit
f3d8e0d369
2 changed files with 35 additions and 25 deletions
  1. +34
    -24
      libavfilter/af_loudnorm.c
  2. +1
    -1
      libavfilter/version.h

+ 34
- 24
libavfilter/af_loudnorm.c View File

@@ -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,


+ 1
- 1
libavfilter/version.h View File

@@ -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, \


Loading…
Cancel
Save