[FFmpeg-devel] [PATCH v2 2/2] checkasm: aacencdsp: Actually test nonzero values in quant_bands

Martin Storsjö martin at martin.st
Fri Feb 7 11:25:13 EET 2025


On Wed, 5 Feb 2025, Martin Storsjö wrote:

> Previously, we read elements from ff_aac_pow34sf_tab; however
> that table is initialized to zero; one needs to call
> ff_aac_float_common_init() to make sure that the table is
> initialized.
>
> However, given the range of the input values, a large number of
> entries in ff_aac_pow34sf_tab would give results outside of the
> range for signed 32 bit integers. As the largest aac_cb_maxval
> entry is 16, it seems more reasonable to produce values within
> an order of mangitude of that value.
>
> (When hitting INT_MIN, implementations may end up with different
> results depending on whether the value is negated as a float or
> as an int. This corner case is irrelevant in practice as this
> is way outside of the expected value range here.)
>
> Coincidentally, this fixes linking checkasm with Apple's older
> linker. (In Xcode 15, Apple switched to a new linker. The one in
> older toolchains seems to have a bug where it won't figure out to
> load object files from a static library, if the only symbol
> referenced in the object file is a "common" symbol, i.e. one for
> a zero-initialized variable. This issue can also be reproduced with
> newer Apple toolchains by passing -Wl,-ld_classic to the linker.)
> ---
> tests/checkasm/aacencdsp.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tests/checkasm/aacencdsp.c b/tests/checkasm/aacencdsp.c
> index 5308a2ac03..713284211c 100644
> --- a/tests/checkasm/aacencdsp.c
> +++ b/tests/checkasm/aacencdsp.c
> @@ -67,7 +67,7 @@ static void test_abs_pow34(AACEncDSPContext *s)
> static void test_quant_bands(AACEncDSPContext *s)
> {
>     int maxval = randomize_elem(aac_cb_maxval);
> -    float q34 = randomize_elem(ff_aac_pow34sf_tab);
> +    float q34 = (float)rnd() / (UINT_MAX / 1024);
>     float rounding = (rnd() & 1) ? ROUND_TO_ZERO : ROUND_STANDARD;
>     LOCAL_ALIGNED_16(float, in, [BUF_SIZE]);
>     LOCAL_ALIGNED_16(float, scaled, [BUF_SIZE]);
> -- 
> 2.43.0

These changes were OK'd by Lynne on irc, I'll push them later if there's 
no more feedback on it. (I've tested these changes with thousands of 
different checkasm seeds now.)

// Martin


More information about the ffmpeg-devel mailing list