Advertisement
Guest User

Untitled

a guest
Apr 15th, 2019
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.62 KB | None | 0 0
  1. commit 63702014fa4e4bb812fa984ca748f3178bd1174f
  2. Author: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
  3. Date: Sat Dec 26 21:51:28 2015 -0800
  4.  
  5. lavfi/af_anequalizer: remove cabs, cexp dependencies
  6.  
  7. Replaces by real arithmetic. Tested the validity of these transformations separately.
  8. Numerical differences are ~1e-15, and should not matter: it is not even
  9. clear which is more precise mathematically.
  10.  
  11. Reviewed-by: Paul B Mahol <onemda@gmail.com>
  12. Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
  13.  
  14. diff --git a/libavfilter/af_anequalizer.c b/libavfilter/af_anequalizer.c
  15. --- a/libavfilter/af_anequalizer.c
  16. +++ b/libavfilter/af_anequalizer.c
  17. @@ -101,34 +99,41 @@
  18. colors = av_strdup(s->colors);
  19. if (!colors)
  20. return;
  21.  
  22. memset(out->data[0], 0, s->h * out->linesize[0]);
  23.  
  24. for (ch = 0; ch < inlink->channels; ch++) {
  25. uint8_t fg[4] = { 0xff, 0xff, 0xff, 0xff };
  26. int prev_v = -1;
  27. double f;
  28.  
  29. color = av_strtok(ch == 0 ? colors : NULL, " |", &saveptr);
  30. if (color)
  31. av_parse_color(fg, color, -1, ctx);
  32.  
  33. for (f = 0; f < s->w; f++) {
  34. - double complex z;
  35. - double complex H = 1;
  36. + double zr, zi, zr2, zi2;
  37. + double Hr, Hi;
  38. + double Hmag = 1;
  39. double w;
  40. int v, y, x;
  41.  
  42. w = M_PI * (s->fscale ? pow(s->w - 1, f / s->w) : f) / (s->w - 1);
  43. - z = 1. / cexp(I * w);
  44. + zr = cos(w);
  45. + zr2 = zr * zr;
  46. + zi = -sin(w);
  47. + zi2 = zi * zi;
  48.  
  49. for (n = 0; n < s->nb_filters; n++) {
  50. if (s->filters[n].channel != ch ||
  51. s->filters[n].ignore)
  52. continue;
  53.  
  54. for (i = 0; i < FILTER_ORDER / 2; i++) {
  55. FoSection *S = &s->filters[n].section[i];
  56.  
  57. - H *= (((((S->b4 * z + S->b3) * z + S->b2) * z + S->b1) * z + S->b0) /
  58. - ((((S->a4 * z + S->a3) * z + S->a2) * z + S->a1) * z + S->a0));
  59. + /* H *= (((((S->b4 * z + S->b3) * z + S->b2) * z + S->b1) * z + S->b0) /
  60. + ((((S->a4 * z + S->a3) * z + S->a2) * z + S->a1) * z + S->a0)); */
  61. +
  62. + Hr = S->b4*(1-8*zr2*zi2) + S->b2*(zr2-zi2) + zr*(S->b1+S->b3*(zr2-3*zi2))+ S->b0;
  63. + Hi = zi*(S->b3*(3*zr2-zi2) + S->b1 + 2*zr*(2*S->b4*(zr2-zi2) + S->b2));
  64.  
  65.  
  66.  
  67. commit 59ac7ce4dac5b2a68c4afb827b03a595e2d2f32e
  68. Author: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
  69. Date: Sun Dec 27 16:48:52 2015 -0800
  70.  
  71. lavfi/af_anequalizer: replace pow(10,x) by ff_exp10(x)
  72.  
  73. Reviewed-by: Paul B Mahol <onemda@gmail.com>
  74. Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
  75.  
  76. diff --git a/libavfilter/af_anequalizer.c b/libavfilter/af_anequalizer.c
  77. --- a/libavfilter/af_anequalizer.c
  78. +++ b/libavfilter/af_anequalizer.c
  79. @@ -310,41 +310,41 @@
  80.  
  81. if (G == 0 && G0 == 0) {
  82. f->section[0].a0 = 1;
  83. f->section[0].b0 = 1;
  84. f->section[1].a0 = 1;
  85. f->section[1].b0 = 1;
  86. return;
  87. }
  88.  
  89. - G = pow(10, G/20);
  90. - Gb = pow(10, Gb/20);
  91. - G0 = pow(10, G0/20);
  92. + G = ff_exp10(G/20);
  93. + Gb = ff_exp10(Gb/20);
  94. + G0 = ff_exp10(G0/20);
  95.  
  96. epsilon = sqrt((G * G - Gb * Gb) / (Gb * Gb - G0 * G0));
  97. g = pow(G, 1.0 / N);
  98. g0 = pow(G0, 1.0 / N);
  99. beta = pow(epsilon, -1.0 / N) * tan(wb/2);
  100. c0 = cos(w0);
  101.  
  102. for (i = 1; i <= L; i++) {
  103. double ui = (2.0 * i - 1) / N;
  104. double si = sin(M_PI * ui / 2.0);
  105. double Di = beta * beta + 2 * si * beta + 1;
  106.  
  107. butterworth_fo_section(&f->section[i - 1], beta, si, g, g0, Di, c0);
  108. }
  109. }
  110.  
  111. static void chebyshev1_fo_section(FoSection *S, double a,
  112. double c, double tetta_b,
  113. double g0, double si, double b,
  114. double D, double c0)
  115. {
  116. if (c0 == 1 || c0 == -1) {
  117. S->b0 = (tetta_b*tetta_b*(b*b+g0*g0*c*c) + 2*g0*b*si*tetta_b*tetta_b + g0*g0)/D;
  118. S->b1 = 2*c0*(tetta_b*tetta_b*(b*b+g0*g0*c*c) - g0*g0)/D;
  119. S->b2 = (tetta_b*tetta_b*(b*b+g0*g0*c*c) - 2*g0*b*si*tetta_b + g0*g0)/D;
  120. S->b3 = 0;
  121. S->b4 = 0;
  122.  
  123. S->a0 = 1;
  124.  
  125.  
  126. commit 9f4c7b4df7f31755b7caf4d080c7577c787c1e72
  127. Author: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
  128. Date: Sun Dec 27 16:50:09 2015 -0800
  129.  
  130. lavfi/af_anequalizer: replace pow(x,-2) by 1/(x*x)
  131.  
  132. Reviewed-by: Paul B Mahol <onemda@gmail.com>
  133. Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
  134.  
  135. diff --git a/libavfilter/af_anequalizer.c b/libavfilter/af_anequalizer.c
  136. index d7b5b6cf08..649c0b961d 100644
  137. --- a/libavfilter/af_anequalizer.c
  138. +++ b/libavfilter/af_anequalizer.c
  139. @@ -391,8 +391,8 @@ static void chebyshev1_bp_filter(EqualizatorFilter *f,
  140.  
  141. epsilon = sqrt((G*G - Gb*Gb) / (Gb*Gb - G0*G0));
  142. g0 = pow(G0,1.0/N);
  143. - alfa = pow(1.0/epsilon + sqrt(1 + pow(epsilon,-2.0)), 1.0/N);
  144. - beta = pow(G/epsilon + Gb * sqrt(1 + pow(epsilon,-2.0)), 1.0/N);
  145. + alfa = pow(1.0/epsilon + sqrt(1 + 1/(epsilon*epsilon)), 1.0/N);
  146. + beta = pow(G/epsilon + Gb * sqrt(1 + 1/(epsilon*epsilon)), 1.0/N);
  147. a = 0.5 * (alfa - 1.0/alfa);
  148. b = 0.5 * (beta - g0*g0*(1/beta));
  149. tetta_b = tan(wb/2);
  150.  
  151.  
  152. commit c6e3b6a819a5955a0945ea063a81db487c2233a1
  153. Author: Paul B Mahol <onemda@gmail.com>
  154. Date: Fri Dec 25 15:00:06 2015 +0100
  155.  
  156. avfilter/af_anequalizer: use pow instead of exp10
  157.  
  158. Signed-off-by: Paul B Mahol <onemda@gmail.com>
  159.  
  160. diff --git a/libavfilter/af_anequalizer.c b/libavfilter/af_anequalizer.c
  161. index a437e2b9dc..ae953225ad 100644
  162. --- a/libavfilter/af_anequalizer.c
  163. +++ b/libavfilter/af_anequalizer.c
  164. @@ -307,9 +307,9 @@ static void butterworth_bp_filter(EqualizatorFilter *f,
  165. return;
  166. }
  167.  
  168. - G = exp10( G/20);
  169. - Gb = exp10(Gb/20);
  170. - G0 = exp10(G0/20);
  171. + G = pow(10, G/20);
  172. + Gb = pow(10, Gb/20);
  173. + G0 = pow(10, G0/20);
  174.  
  175. epsilon = sqrt((G * G - Gb * Gb) / (Gb * Gb - G0 * G0));
  176. g = pow(G, 1.0 / N);
  177. @@ -376,9 +376,9 @@ static void chebyshev1_bp_filter(EqualizatorFilter *f,
  178. return;
  179. }
  180.  
  181. - G = exp10( G/20);
  182. - Gb = exp10(Gb/20);
  183. - G0 = exp10(G0/20);
  184. + G = pow(10, G/20);
  185. + Gb = pow(10, Gb/20);
  186. + G0 = pow(10, G0/20);
  187.  
  188. epsilon = sqrt((G*G - Gb*Gb) / (Gb*Gb - G0*G0));
  189. g0 = pow(G0,1.0/N);
  190. @@ -449,9 +449,9 @@ static void chebyshev2_bp_filter(EqualizatorFilter *f,
  191. return;
  192. }
  193.  
  194. - G = exp10( G/20);
  195. - Gb = exp10(Gb/20);
  196. - G0 = exp10(G0/20);
  197. + G = pow(10, G/20);
  198. + Gb = pow(10, Gb/20);
  199. + G0 = pow(10, G0/20);
  200.  
  201. epsilon = sqrt((G*G - Gb*Gb) / (Gb*Gb - G0*G0));
  202. g = pow(G, 1.0 / N);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement