diff options
author | Martin Storsjö <martin@martin.st> | 2019-12-04 13:04:41 +0200 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2019-12-18 15:15:29 +0200 |
commit | aad0e26f9312d380e613e312a3b307609296fe58 (patch) | |
tree | f19909bd36c30a86c13c44202900d76afff53b0d /libavfilter/buffersink.h | |
parent | e10654de2b0db0f3b4828a3cc066d6fa21d02516 (diff) | |
download | ffmpeg-aad0e26f9312d380e613e312a3b307609296fe58.tar.gz |
checkasm: aacpsdsp: Tolerate extra intermediate precision in stereo_interpolate
The stereo_interpolate functions add h_step to the values h
BUF_SIZE times. Within the stereo_interpolate C functions, the
values h (h0-h3, h00-h13) are declared as local float variables,
but the compiler is free to keep them in a register with extra
precision.
If the accumulation is rounded to 32 bit float precision after
each step, the less significant bits of h_step end up ignored
and the sum can deviate, affecting the end result more than
the currently set EPS.
By clearing the log2(BUF_SIZE) lower bits of h_step, we make sure
that the accumulation shouldn't differ significantly, regardless
of any extra precision in the accmulating register/variable.
This fixes the aacpsdsp checkasm test when built with clang for
mingw/x86_32.
Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavfilter/buffersink.h')
0 files changed, 0 insertions, 0 deletions