X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Faf_aemphasis.c;h=a5b8e3058a2e45fbcc4afe118c0bb6d73b7007c4;hb=c31fa1d7b44c55d8491b7e6ebe8615289aadec69;hp=4501858fb8f8a4b4fc0b5084991db1e70d664a68;hpb=8142daca44d8825001eb7ee935e2f0a7933e09b2;p=ffmpeg diff --git a/libavfilter/af_aemphasis.c b/libavfilter/af_aemphasis.c index 4501858fb8f..a5b8e3058a2 100644 --- a/libavfilter/af_aemphasis.c +++ b/libavfilter/af_aemphasis.c @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include - #include "libavutil/opt.h" #include "avfilter.h" #include "internal.h" @@ -189,14 +187,15 @@ static inline void set_lp_rbj(BiquadD2 *bq, double fc, double q, double sr, doub static double freq_gain(BiquadCoeffs *c, double freq, double sr) { - double complex z, w; + double zr, zi; freq *= 2.0 * M_PI / sr; - w = 0 + I * freq; - z = 1.0 / cexp(w); + zr = cos(freq); + zi = -sin(freq); - return cabs(((double complex)c->a0 + c->a1 * z + c->a2 * z*z) / - ((double complex)1.0 + c->b1 * z + c->b2 * z*z)); + /* |(a0 + a1*z + a2*z^2)/(1 + b1*z + b2*z^2)| */ + return hypot(c->a0 + c->a1*zr + c->a2*(zr*zr-zi*zi), c->a1*zi + 2*c->a2*zr*zi) / + hypot(1 + c->b1*zr + c->b2*(zr*zr-zi*zi), c->b1*zi + 2*c->b2*zr*zi); } static int config_input(AVFilterLink *inlink) @@ -271,7 +270,6 @@ static int config_input(AVFilterLink *inlink) //swap a1 b1, a2 b2 if (s->type == 7 || s->type == 8) { - s->rc[0].use_brickw = 0; double tau = (s->type == 7 ? 0.000050 : 0.000075); double f = 1.0 / (2 * M_PI * tau); double nyq = sr * 0.5; @@ -287,6 +285,7 @@ static int config_input(AVFilterLink *inlink) set_highshelf_rbj(&s->rc[0].r1, cfreq, q, 1. / gain, sr); else set_highshelf_rbj(&s->rc[0].r1, cfreq, q, gain, sr); + s->rc[0].use_brickw = 0; } else { s->rc[0].use_brickw = 1; if (s->mode == 0) { // Reproduction