Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- commit 63702014fa4e4bb812fa984ca748f3178bd1174f
- Author: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
- Date: Sat Dec 26 21:51:28 2015 -0800
- lavfi/af_anequalizer: remove cabs, cexp dependencies
- Replaces by real arithmetic. Tested the validity of these transformations separately.
- Numerical differences are ~1e-15, and should not matter: it is not even
- clear which is more precise mathematically.
- Reviewed-by: Paul B Mahol <onemda@gmail.com>
- Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
- diff --git a/libavfilter/af_anequalizer.c b/libavfilter/af_anequalizer.c
- --- a/libavfilter/af_anequalizer.c
- +++ b/libavfilter/af_anequalizer.c
- @@ -101,34 +99,41 @@
- colors = av_strdup(s->colors);
- if (!colors)
- return;
- memset(out->data[0], 0, s->h * out->linesize[0]);
- for (ch = 0; ch < inlink->channels; ch++) {
- uint8_t fg[4] = { 0xff, 0xff, 0xff, 0xff };
- int prev_v = -1;
- double f;
- color = av_strtok(ch == 0 ? colors : NULL, " |", &saveptr);
- if (color)
- av_parse_color(fg, color, -1, ctx);
- for (f = 0; f < s->w; f++) {
- - double complex z;
- - double complex H = 1;
- + double zr, zi, zr2, zi2;
- + double Hr, Hi;
- + double Hmag = 1;
- double w;
- int v, y, x;
- w = M_PI * (s->fscale ? pow(s->w - 1, f / s->w) : f) / (s->w - 1);
- - z = 1. / cexp(I * w);
- + zr = cos(w);
- + zr2 = zr * zr;
- + zi = -sin(w);
- + zi2 = zi * zi;
- for (n = 0; n < s->nb_filters; n++) {
- if (s->filters[n].channel != ch ||
- s->filters[n].ignore)
- continue;
- for (i = 0; i < FILTER_ORDER / 2; i++) {
- FoSection *S = &s->filters[n].section[i];
- - H *= (((((S->b4 * z + S->b3) * z + S->b2) * z + S->b1) * z + S->b0) /
- - ((((S->a4 * z + S->a3) * z + S->a2) * z + S->a1) * z + S->a0));
- + /* H *= (((((S->b4 * z + S->b3) * z + S->b2) * z + S->b1) * z + S->b0) /
- + ((((S->a4 * z + S->a3) * z + S->a2) * z + S->a1) * z + S->a0)); */
- +
- + Hr = S->b4*(1-8*zr2*zi2) + S->b2*(zr2-zi2) + zr*(S->b1+S->b3*(zr2-3*zi2))+ S->b0;
- + Hi = zi*(S->b3*(3*zr2-zi2) + S->b1 + 2*zr*(2*S->b4*(zr2-zi2) + S->b2));
- commit 59ac7ce4dac5b2a68c4afb827b03a595e2d2f32e
- Author: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
- Date: Sun Dec 27 16:48:52 2015 -0800
- lavfi/af_anequalizer: replace pow(10,x) by ff_exp10(x)
- Reviewed-by: Paul B Mahol <onemda@gmail.com>
- Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
- diff --git a/libavfilter/af_anequalizer.c b/libavfilter/af_anequalizer.c
- --- a/libavfilter/af_anequalizer.c
- +++ b/libavfilter/af_anequalizer.c
- @@ -310,41 +310,41 @@
- if (G == 0 && G0 == 0) {
- f->section[0].a0 = 1;
- f->section[0].b0 = 1;
- f->section[1].a0 = 1;
- f->section[1].b0 = 1;
- return;
- }
- - G = pow(10, G/20);
- - Gb = pow(10, Gb/20);
- - G0 = pow(10, G0/20);
- + G = ff_exp10(G/20);
- + Gb = ff_exp10(Gb/20);
- + G0 = ff_exp10(G0/20);
- epsilon = sqrt((G * G - Gb * Gb) / (Gb * Gb - G0 * G0));
- g = pow(G, 1.0 / N);
- g0 = pow(G0, 1.0 / N);
- beta = pow(epsilon, -1.0 / N) * tan(wb/2);
- c0 = cos(w0);
- for (i = 1; i <= L; i++) {
- double ui = (2.0 * i - 1) / N;
- double si = sin(M_PI * ui / 2.0);
- double Di = beta * beta + 2 * si * beta + 1;
- butterworth_fo_section(&f->section[i - 1], beta, si, g, g0, Di, c0);
- }
- }
- static void chebyshev1_fo_section(FoSection *S, double a,
- double c, double tetta_b,
- double g0, double si, double b,
- double D, double c0)
- {
- if (c0 == 1 || c0 == -1) {
- S->b0 = (tetta_b*tetta_b*(b*b+g0*g0*c*c) + 2*g0*b*si*tetta_b*tetta_b + g0*g0)/D;
- S->b1 = 2*c0*(tetta_b*tetta_b*(b*b+g0*g0*c*c) - g0*g0)/D;
- S->b2 = (tetta_b*tetta_b*(b*b+g0*g0*c*c) - 2*g0*b*si*tetta_b + g0*g0)/D;
- S->b3 = 0;
- S->b4 = 0;
- S->a0 = 1;
- commit 9f4c7b4df7f31755b7caf4d080c7577c787c1e72
- Author: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
- Date: Sun Dec 27 16:50:09 2015 -0800
- lavfi/af_anequalizer: replace pow(x,-2) by 1/(x*x)
- Reviewed-by: Paul B Mahol <onemda@gmail.com>
- Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
- diff --git a/libavfilter/af_anequalizer.c b/libavfilter/af_anequalizer.c
- index d7b5b6cf08..649c0b961d 100644
- --- a/libavfilter/af_anequalizer.c
- +++ b/libavfilter/af_anequalizer.c
- @@ -391,8 +391,8 @@ static void chebyshev1_bp_filter(EqualizatorFilter *f,
- epsilon = sqrt((G*G - Gb*Gb) / (Gb*Gb - G0*G0));
- g0 = pow(G0,1.0/N);
- - alfa = pow(1.0/epsilon + sqrt(1 + pow(epsilon,-2.0)), 1.0/N);
- - beta = pow(G/epsilon + Gb * sqrt(1 + pow(epsilon,-2.0)), 1.0/N);
- + alfa = pow(1.0/epsilon + sqrt(1 + 1/(epsilon*epsilon)), 1.0/N);
- + beta = pow(G/epsilon + Gb * sqrt(1 + 1/(epsilon*epsilon)), 1.0/N);
- a = 0.5 * (alfa - 1.0/alfa);
- b = 0.5 * (beta - g0*g0*(1/beta));
- tetta_b = tan(wb/2);
- commit c6e3b6a819a5955a0945ea063a81db487c2233a1
- Author: Paul B Mahol <onemda@gmail.com>
- Date: Fri Dec 25 15:00:06 2015 +0100
- avfilter/af_anequalizer: use pow instead of exp10
- Signed-off-by: Paul B Mahol <onemda@gmail.com>
- diff --git a/libavfilter/af_anequalizer.c b/libavfilter/af_anequalizer.c
- index a437e2b9dc..ae953225ad 100644
- --- a/libavfilter/af_anequalizer.c
- +++ b/libavfilter/af_anequalizer.c
- @@ -307,9 +307,9 @@ static void butterworth_bp_filter(EqualizatorFilter *f,
- return;
- }
- - G = exp10( G/20);
- - Gb = exp10(Gb/20);
- - G0 = exp10(G0/20);
- + G = pow(10, G/20);
- + Gb = pow(10, Gb/20);
- + G0 = pow(10, G0/20);
- epsilon = sqrt((G * G - Gb * Gb) / (Gb * Gb - G0 * G0));
- g = pow(G, 1.0 / N);
- @@ -376,9 +376,9 @@ static void chebyshev1_bp_filter(EqualizatorFilter *f,
- return;
- }
- - G = exp10( G/20);
- - Gb = exp10(Gb/20);
- - G0 = exp10(G0/20);
- + G = pow(10, G/20);
- + Gb = pow(10, Gb/20);
- + G0 = pow(10, G0/20);
- epsilon = sqrt((G*G - Gb*Gb) / (Gb*Gb - G0*G0));
- g0 = pow(G0,1.0/N);
- @@ -449,9 +449,9 @@ static void chebyshev2_bp_filter(EqualizatorFilter *f,
- return;
- }
- - G = exp10( G/20);
- - Gb = exp10(Gb/20);
- - G0 = exp10(G0/20);
- + G = pow(10, G/20);
- + Gb = pow(10, Gb/20);
- + G0 = pow(10, G0/20);
- epsilon = sqrt((G*G - Gb*Gb) / (Gb*Gb - G0*G0));
- g = pow(G, 1.0 / N);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement