diff options
author | Marton Balint <cus@passwd.hu> | 2016-10-15 20:21:22 +0300 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2016-11-11 21:37:54 +0300 |
commit | 005d058f4230f3207ebcf1131df7426d4f57392f (patch) | |
tree | a65646eab5ac5a0df5dd51da3354018bf23bbc88 /libavfilter/af_loudnorm.c | |
parent | 7b8445f03d10faf7ed232e6201bf04ba73d980d7 (diff) |
lavfi/loudnorm: add an internal libebur128 library
Also contains the following changes to the library:
- add ff_ prefix to functions
- remove cplusplus defines.
- add FF_ prefix to contants and some structs
- remove true peak calculation feature, since it uses its own resampler, and
af_loudnorm does not need it.
- remove version info and some fprintf(stderr) functions
- convert to use av_malloc
- always use histogram mode for LRA calculation, otherwise LRA data is slowly
consuming memory making af_loudnorm unfit for 24/7 operation. It also uses a
BSD style linked list implementation which is probably not available on all
platforms. So let's just remove the classic mode which not uses histogram.
- add ff_thread_once for calculating static histogram tables
- convert some functions to void which cannot fail
- remove intrinsics and some unused headers
- add support for planar audio
- remove channel / sample rate changer function, in ffmpeg usually we simply
alloc a new context
- convert some static variables to defines
- declare static histogram variables as aligned
- convert some initalizations to mallocz
- add window size parameter to init function and remove window size setter
function
- convert return codes to AVERROR
- fix indentation
Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavfilter/af_loudnorm.c')
-rw-r--r-- | libavfilter/af_loudnorm.c | 60 |
1 files changed, 30 insertions, 30 deletions
diff --git a/libavfilter/af_loudnorm.c b/libavfilter/af_loudnorm.c index 604697e6f7..9d91c76047 100644 --- a/libavfilter/af_loudnorm.c +++ b/libavfilter/af_loudnorm.c @@ -24,7 +24,7 @@ #include "avfilter.h" #include "internal.h" #include "audio.h" -#include <ebur128.h> +#include "ebur128.h" enum FrameType { FIRST_FRAME, @@ -91,8 +91,8 @@ typedef struct LoudNormContext { int prev_nb_samples; int channels; - ebur128_state *r128_in; - ebur128_state *r128_out; + FFEBUR128State *r128_in; + FFEBUR128State *r128_out; } LoudNormContext; #define OFFSET(x) offsetof(LoudNormContext, x) @@ -437,15 +437,15 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) buf = s->buf; limiter_buf = s->limiter_buf; - ebur128_add_frames_double(s->r128_in, src, in->nb_samples); + ff_ebur128_add_frames_double(s->r128_in, src, in->nb_samples); if (s->frame_type == FIRST_FRAME && in->nb_samples < frame_size(inlink->sample_rate, 3000)) { double offset, offset_tp, true_peak; - ebur128_loudness_global(s->r128_in, &global); + ff_ebur128_loudness_global(s->r128_in, &global); for (c = 0; c < inlink->channels; c++) { double tmp; - ebur128_sample_peak(s->r128_in, c, &tmp); + ff_ebur128_sample_peak(s->r128_in, c, &tmp); if (c == 0 || tmp > true_peak) true_peak = tmp; } @@ -467,7 +467,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) s->buf_index += inlink->channels; } - ebur128_loudness_shortterm(s->r128_in, &shortterm); + ff_ebur128_loudness_shortterm(s->r128_in, &shortterm); if (shortterm < s->measured_thresh) { s->above_threshold = 0; @@ -497,7 +497,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) subframe_length = frame_size(inlink->sample_rate, 100); true_peak_limiter(s, dst, subframe_length, inlink->channels); - ebur128_add_frames_double(s->r128_out, dst, subframe_length); + ff_ebur128_add_frames_double(s->r128_out, dst, subframe_length); s->pts += out->nb_samples = @@ -536,12 +536,12 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) s->limiter_buf_index = s->limiter_buf_index + subframe_length < s->limiter_buf_size ? s->limiter_buf_index + subframe_length : s->limiter_buf_index + subframe_length - s->limiter_buf_size; true_peak_limiter(s, dst, in->nb_samples, inlink->channels); - ebur128_add_frames_double(s->r128_out, dst, in->nb_samples); + ff_ebur128_add_frames_double(s->r128_out, dst, in->nb_samples); - ebur128_loudness_range(s->r128_in, &lra); - ebur128_loudness_global(s->r128_in, &global); - ebur128_loudness_shortterm(s->r128_in, &shortterm); - ebur128_relative_threshold(s->r128_in, &relative_threshold); + ff_ebur128_loudness_range(s->r128_in, &lra); + ff_ebur128_loudness_global(s->r128_in, &global); + ff_ebur128_loudness_shortterm(s->r128_in, &shortterm); + ff_ebur128_relative_threshold(s->r128_in, &relative_threshold); if (s->above_threshold == 0) { double shortterm_out; @@ -549,7 +549,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) if (shortterm > s->measured_thresh) s->prev_delta *= 1.0058; - ebur128_loudness_shortterm(s->r128_out, &shortterm_out); + ff_ebur128_loudness_shortterm(s->r128_out, &shortterm_out); if (shortterm_out >= s->target_i) s->above_threshold = 1; } @@ -611,7 +611,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) } dst = (double *)out->data[0]; - ebur128_add_frames_double(s->r128_out, dst, in->nb_samples); + ff_ebur128_add_frames_double(s->r128_out, dst, in->nb_samples); break; case LINEAR_MODE: @@ -624,7 +624,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) } dst = (double *)out->data[0]; - ebur128_add_frames_double(s->r128_out, dst, in->nb_samples); + ff_ebur128_add_frames_double(s->r128_out, dst, in->nb_samples); s->pts += in->nb_samples; break; } @@ -725,17 +725,17 @@ static int config_input(AVFilterLink *inlink) AVFilterContext *ctx = inlink->dst; LoudNormContext *s = ctx->priv; - s->r128_in = ebur128_init(inlink->channels, inlink->sample_rate, EBUR128_MODE_I | EBUR128_MODE_S | EBUR128_MODE_LRA | EBUR128_MODE_SAMPLE_PEAK); + s->r128_in = ff_ebur128_init(inlink->channels, inlink->sample_rate, 0, FF_EBUR128_MODE_I | FF_EBUR128_MODE_S | FF_EBUR128_MODE_LRA | FF_EBUR128_MODE_SAMPLE_PEAK); if (!s->r128_in) return AVERROR(ENOMEM); - s->r128_out = ebur128_init(inlink->channels, inlink->sample_rate, EBUR128_MODE_I | EBUR128_MODE_S | EBUR128_MODE_LRA | EBUR128_MODE_SAMPLE_PEAK); + s->r128_out = ff_ebur128_init(inlink->channels, inlink->sample_rate, 0, FF_EBUR128_MODE_I | FF_EBUR128_MODE_S | FF_EBUR128_MODE_LRA | FF_EBUR128_MODE_SAMPLE_PEAK); if (!s->r128_out) return AVERROR(ENOMEM); if (inlink->channels == 1 && s->dual_mono) { - ebur128_set_channel(s->r128_in, 0, EBUR128_DUAL_MONO); - ebur128_set_channel(s->r128_out, 0, EBUR128_DUAL_MONO); + ff_ebur128_set_channel(s->r128_in, 0, FF_EBUR128_DUAL_MONO); + ff_ebur128_set_channel(s->r128_out, 0, FF_EBUR128_DUAL_MONO); } s->buf_size = frame_size(inlink->sample_rate, 3000) * inlink->channels; @@ -799,22 +799,22 @@ static av_cold void uninit(AVFilterContext *ctx) if (!s->r128_in || !s->r128_out) goto end; - ebur128_loudness_range(s->r128_in, &lra_in); - ebur128_loudness_global(s->r128_in, &i_in); - ebur128_relative_threshold(s->r128_in, &thresh_in); + ff_ebur128_loudness_range(s->r128_in, &lra_in); + ff_ebur128_loudness_global(s->r128_in, &i_in); + ff_ebur128_relative_threshold(s->r128_in, &thresh_in); for (c = 0; c < s->channels; c++) { double tmp; - ebur128_sample_peak(s->r128_in, c, &tmp); + ff_ebur128_sample_peak(s->r128_in, c, &tmp); if ((c == 0) || (tmp > tp_in)) tp_in = tmp; } - ebur128_loudness_range(s->r128_out, &lra_out); - ebur128_loudness_global(s->r128_out, &i_out); - ebur128_relative_threshold(s->r128_out, &thresh_out); + ff_ebur128_loudness_range(s->r128_out, &lra_out); + ff_ebur128_loudness_global(s->r128_out, &i_out); + ff_ebur128_relative_threshold(s->r128_out, &thresh_out); for (c = 0; c < s->channels; c++) { double tmp; - ebur128_sample_peak(s->r128_out, c, &tmp); + ff_ebur128_sample_peak(s->r128_out, c, &tmp); if ((c == 0) || (tmp > tp_out)) tp_out = tmp; } @@ -881,9 +881,9 @@ static av_cold void uninit(AVFilterContext *ctx) end: if (s->r128_in) - ebur128_destroy(&s->r128_in); + ff_ebur128_destroy(&s->r128_in); if (s->r128_out) - ebur128_destroy(&s->r128_out); + ff_ebur128_destroy(&s->r128_out); av_freep(&s->limiter_buf); av_freep(&s->prev_smp); av_freep(&s->buf); |