Message ID | 20160820043202.6172-1-jamrial@gmail.com |
---|---|
State | Accepted |
Commit | 27ee70290ef4c032bff5c1dd7c0db2f6d17018fe |
Headers | show |
On Saturday, August 20, 2016, James Almer <jamrial@gmail.com> wrote: > Should fix compilation with non C99 compilers like msvc 2012, where > acosh() is not available. > > Signed-off-by: James Almer <jamrial@gmail.com <javascript:;>> > --- > A fallback function like > > static av_always_inline double acosh(double x) > { > return log(x + sqrt((x * x) - 1.0)); > } > > could be added to libm.h if acosh() is needed sometime in the > future for values that can't be computed at compile time. > The above example doesn't take into account things like x == NaN > and x < 1.0, though. > > libavfilter/window_func.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/libavfilter/window_func.c b/libavfilter/window_func.c > index fcdf6ea..acf1b20 100644 > --- a/libavfilter/window_func.c > +++ b/libavfilter/window_func.c > @@ -117,7 +117,7 @@ void ff_generate_window_func(float *lut, int N, int > win_func, float *overlap) > *overlap = 0.33; > break; > case WFUNC_DOLPH: { > - double b = cosh(acosh(pow(10., 3)) / (N-1)), sum, t, c, norm = 0; > + double b = cosh(7.6009022095419887 / (N-1)), sum, t, c, norm = 0; > int j; > for (c = 1 - 1 / (b*b), n = (N-1) / 2; n >= 0; --n) { > for (sum = !n, b = t = j = 1; j <= n && sum != t; b *= (n-j) > * (1./j), ++j) > LGTM
On 8/20/2016 2:46 AM, Paul B Mahol wrote: > On Saturday, August 20, 2016, James Almer <jamrial@gmail.com> wrote: > >> Should fix compilation with non C99 compilers like msvc 2012, where >> acosh() is not available. >> >> Signed-off-by: James Almer <jamrial@gmail.com <javascript:;>> >> --- >> A fallback function like >> >> static av_always_inline double acosh(double x) >> { >> return log(x + sqrt((x * x) - 1.0)); >> } >> >> could be added to libm.h if acosh() is needed sometime in the >> future for values that can't be computed at compile time. >> The above example doesn't take into account things like x == NaN >> and x < 1.0, though. >> >> libavfilter/window_func.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/libavfilter/window_func.c b/libavfilter/window_func.c >> index fcdf6ea..acf1b20 100644 >> --- a/libavfilter/window_func.c >> +++ b/libavfilter/window_func.c >> @@ -117,7 +117,7 @@ void ff_generate_window_func(float *lut, int N, int >> win_func, float *overlap) >> *overlap = 0.33; >> break; >> case WFUNC_DOLPH: { >> - double b = cosh(acosh(pow(10., 3)) / (N-1)), sum, t, c, norm = 0; >> + double b = cosh(7.6009022095419887 / (N-1)), sum, t, c, norm = 0; >> int j; >> for (c = 1 - 1 / (b*b), n = (N-1) / 2; n >= 0; --n) { >> for (sum = !n, b = t = j = 1; j <= n && sum != t; b *= (n-j) >> * (1./j), ++j) > > >> > > > > LGTM Pushed, thanks.
diff --git a/libavfilter/window_func.c b/libavfilter/window_func.c index fcdf6ea..acf1b20 100644 --- a/libavfilter/window_func.c +++ b/libavfilter/window_func.c @@ -117,7 +117,7 @@ void ff_generate_window_func(float *lut, int N, int win_func, float *overlap) *overlap = 0.33; break; case WFUNC_DOLPH: { - double b = cosh(acosh(pow(10., 3)) / (N-1)), sum, t, c, norm = 0; + double b = cosh(7.6009022095419887 / (N-1)), sum, t, c, norm = 0; int j; for (c = 1 - 1 / (b*b), n = (N-1) / 2; n >= 0; --n) { for (sum = !n, b = t = j = 1; j <= n && sum != t; b *= (n-j) * (1./j), ++j)
Should fix compilation with non C99 compilers like msvc 2012, where acosh() is not available. Signed-off-by: James Almer <jamrial@gmail.com> --- A fallback function like static av_always_inline double acosh(double x) { return log(x + sqrt((x * x) - 1.0)); } could be added to libm.h if acosh() is needed sometime in the future for values that can't be computed at compile time. The above example doesn't take into account things like x == NaN and x < 1.0, though. libavfilter/window_func.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)