[FFmpeg-devel] [PATCHv2 2/2] avcodec/sinewin_tablegen: use sin instead of sinf for fixed point to improve precision

Ganesh Ajjanagadde gajjanag at gmail.com
Mon Mar 14 00:19:13 CET 2016


On Sun, Mar 13, 2016 at 6:50 PM, Marton Balint <cus at passwd.hu> wrote:
> Signed-off-by: Marton Balint <cus at passwd.hu>
> ---
>  libavcodec/sinewin_tablegen.h | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/libavcodec/sinewin_tablegen.h b/libavcodec/sinewin_tablegen.h
> index 4432135..9c912aa 100644
> --- a/libavcodec/sinewin_tablegen.h
> +++ b/libavcodec/sinewin_tablegen.h
> @@ -50,9 +50,9 @@ SINETABLE(8192);
>  #endif
>
>  #if USE_FIXED
> -#define SIN_FIX(a) (int)floor((a) * 0x80000000 + 0.5)
> +#define SIN_FIX(a) (int)floor(sin(a) * 0x80000000 + 0.5)

Note that lrint may be preferred, it is faster and better rounded.
Hosts/hardcoded tables can use lavu/tablegen.h, which fall back to
floor based hacks.

>  #else
> -#define SIN_FIX(a) a
> +#define SIN_FIX(a) sinf(a)
>  #endif

Also, why is it essential that SIN_FIX is redefined, can't you just
change sinf to sin on line 69?

>
>  SINETABLE_CONST INTFLOAT * const AAC_RENAME(ff_sine_windows)[] = {
> @@ -66,7 +66,7 @@ SINETABLE_CONST INTFLOAT * const AAC_RENAME(ff_sine_windows)[] = {
>  av_cold void AAC_RENAME(ff_sine_window_init)(INTFLOAT *window, int n) {
>      int i;
>      for(i = 0; i < n; i++)
> -        window[i] = SIN_FIX(sinf((i + 0.5) * (M_PI / (2.0 * n))));
> +        window[i] = SIN_FIX((i + 0.5) * (M_PI / (2.0 * n)));
>  }

Could you please add a link in the commit message describing more
verbosely why you need this (e.g which platform)?

>
>  av_cold void AAC_RENAME(ff_init_ff_sine_windows)(int index) {
> --
> 2.6.2
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


More information about the ffmpeg-devel mailing list