lavfi: EBU R.128 irregular time
Correct the time interval between logged data rows to the expected value of 100 milliseconds by naming a new loop counter variable to be distinct from loop counters for inner loops that inadvertently change the outer loop operation. This suggested patch is 1 of 3 for Ticket #2144 "libavfilter ebur128 loudness inaccuracy, irregular time interval, LFE interference". This suggested patch supersedes the contribution of January 15, 2013 in the thread “[PATCH] lavfi: EBU R.128 irreg time, ch weights, skip LFE” which combined multiple fixes in one patch. Reviewed-by: Clément Bœsch <ubitux@gmail.com> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
2dc2e4f5af
commit
24c47f00fe
@ -438,7 +438,7 @@ static int gate_update(struct integrator *integ, double power,
|
|||||||
|
|
||||||
static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
|
static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
|
||||||
{
|
{
|
||||||
int i, ch;
|
int i, ch, idx_insample;
|
||||||
AVFilterContext *ctx = inlink->dst;
|
AVFilterContext *ctx = inlink->dst;
|
||||||
EBUR128Context *ebur128 = ctx->priv;
|
EBUR128Context *ebur128 = ctx->priv;
|
||||||
const int nb_channels = ebur128->nb_channels;
|
const int nb_channels = ebur128->nb_channels;
|
||||||
@ -446,7 +446,7 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
|
|||||||
const double *samples = (double *)insamples->data[0];
|
const double *samples = (double *)insamples->data[0];
|
||||||
AVFilterBufferRef *pic = ebur128->outpicref;
|
AVFilterBufferRef *pic = ebur128->outpicref;
|
||||||
|
|
||||||
for (i = 0; i < nb_samples; i++) {
|
for (idx_insample = 0; idx_insample < nb_samples; idx_insample++) {
|
||||||
const int bin_id_400 = ebur128->i400.cache_pos;
|
const int bin_id_400 = ebur128->i400.cache_pos;
|
||||||
const int bin_id_3000 = ebur128->i3000.cache_pos;
|
const int bin_id_3000 = ebur128->i3000.cache_pos;
|
||||||
|
|
||||||
@ -505,7 +505,7 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
|
|||||||
double power_400 = 1e-12, power_3000 = 1e-12;
|
double power_400 = 1e-12, power_3000 = 1e-12;
|
||||||
AVFilterLink *outlink = ctx->outputs[0];
|
AVFilterLink *outlink = ctx->outputs[0];
|
||||||
const int64_t pts = insamples->pts +
|
const int64_t pts = insamples->pts +
|
||||||
av_rescale_q(i, (AVRational){ 1, inlink->sample_rate },
|
av_rescale_q(idx_insample, (AVRational){ 1, inlink->sample_rate },
|
||||||
outlink->time_base);
|
outlink->time_base);
|
||||||
|
|
||||||
ebur128->sample_count = 0;
|
ebur128->sample_count = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user