[FFmpeg-devel] [PATCH] avfilter/af_loudnorm: do not upsample during second-pass linear normalization
Kyle Swanson
k at ylo.ph
Wed Apr 5 20:04:17 EEST 2017
On Tue, Apr 4, 2017 at 7:14 AM, Kyle Swanson <k at ylo.ph> wrote:
> Hi,
>
>
> On Sun, Apr 2, 2017 at 6:32 PM, Kyle Swanson <k at ylo.ph> wrote:
>
>> Signed-off-by: Kyle Swanson <k at ylo.ph>
>> ---
>> libavfilter/af_loudnorm.c | 58 +++++++++++++++++++++++++++---
>> -----------------
>> 1 file changed, 34 insertions(+), 24 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,
>> --
>> 2.10.1
>>
>>
> If no one has anything for this, I'll push it in the next day or so.
>
> Kyle
>
Pushed.
More information about the ffmpeg-devel
mailing list