parent
72d580f819
commit
9e329185d7
@ -46,6 +46,7 @@ typedef struct CompandContext {
|
|||||||
char *attacks, *decays, *points;
|
char *attacks, *decays, *points;
|
||||||
CompandSegment *segments;
|
CompandSegment *segments;
|
||||||
ChanParam *channels;
|
ChanParam *channels;
|
||||||
|
int nb_segments;
|
||||||
double in_min_lin;
|
double in_min_lin;
|
||||||
double out_min_lin;
|
double out_min_lin;
|
||||||
double curve_dB;
|
double curve_dB;
|
||||||
@ -160,11 +161,11 @@ static double get_volume(CompandContext *s, double in_lin)
|
|||||||
|
|
||||||
in_log = log(in_lin);
|
in_log = log(in_lin);
|
||||||
|
|
||||||
for (i = 1;; i++)
|
for (i = 1; i < s->nb_segments; i++)
|
||||||
if (in_log <= s->segments[i + 1].x)
|
if (in_log <= s->segments[i].x)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
cs = &s->segments[i];
|
cs = &s->segments[i - 1];
|
||||||
in_log -= cs->x;
|
in_log -= cs->x;
|
||||||
out_log = cs->y + in_log * (cs->a * in_log + cs->b);
|
out_log = cs->y + in_log * (cs->a * in_log + cs->b);
|
||||||
|
|
||||||
@ -318,7 +319,8 @@ static int config_output(AVFilterLink *outlink)
|
|||||||
uninit(ctx);
|
uninit(ctx);
|
||||||
|
|
||||||
s->channels = av_mallocz_array(outlink->channels, sizeof(*s->channels));
|
s->channels = av_mallocz_array(outlink->channels, sizeof(*s->channels));
|
||||||
s->segments = av_mallocz_array((nb_points + 4) * 2, sizeof(*s->segments));
|
s->nb_segments = (nb_points + 4) * 2;
|
||||||
|
s->segments = av_mallocz_array(s->nb_segments, sizeof(*s->segments));
|
||||||
|
|
||||||
if (!s->channels || !s->segments)
|
if (!s->channels || !s->segments)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user