diff mbox

[FFmpeg-devel] avfilter/window_func: use a constant instead of acosh()

Message ID 20160820043202.6172-1-jamrial@gmail.com
State Accepted
Commit 27ee70290ef4c032bff5c1dd7c0db2f6d17018fe
Headers show

Commit Message

James Almer Aug. 20, 2016, 4:32 a.m. UTC
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(-)

Comments

Paul B Mahol Aug. 20, 2016, 5:46 a.m. UTC | #1
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
James Almer Aug. 20, 2016, 2:52 p.m. UTC | #2
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 mbox

Patch

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)