[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH] audio: proper support for float samples in mixeng
From: |
Alexander Bulekov |
Subject: |
Re: [RFC PATCH] audio: proper support for float samples in mixeng |
Date: |
Mon, 9 Mar 2020 14:36:03 -0400 |
User-agent: |
NeoMutt/20180716 |
Hello,
On 200202 2038, Kővágó, Zoltán wrote:
> -void conv_natural_float_to_stereo(struct st_sample *dst, const void *src,
> - int samples)
> +#ifdef FLOAT_MIXENG
> +#define FLOAT_CONV_TO(x) (x)
> +#define FLOAT_CONV_FROM(x) (x)
> +#else
> +static const float float_scale = UINT_MAX;
> +#define FLOAT_CONV_TO(x) ((x) * float_scale)
> +
> +#ifdef RECIPROCAL
> +static const float float_scale_reciprocal = 1.f / UINT_MAX;
> +#define FLOAT_CONV_FROM(x) ((x) * float_scale_reciprocal)
> +#else
> +#define FLOAT_CONV_FROM(x) ((x) / float_scale)
> +#endif
> +#endif
This brings up errors, when building with clang-10+:
error: implicit conversion from 'unsigned int' to 'float' changes value from
4294967295 to 4294967296 [-Werror,-Wimplicit-int-float-conversion]
static const float float_scale = UINT_MAX;
Would this work?
#include <math.h>
#define FLOAT_CONV_TO(x) ((x) * nextafter(0x1p32, 0));
#define FLOAT_CONV_FROM(x) ((x) / nextafter(0x1p32, 0));
I asked on IRC about this and with Richard's help, I tried:
FLOAT_CONV_TO(x) ((x) * (int64_t)UINT32_MAX)
FLOAT_CONV_FROM(x) ((x) / UINT32_MAX)
since dst->l,r are integers when !FLOAT_MIXENG, this might avoid an
int->float->int conversion , but this still raises warning since *in is
a float.
Thanks
-Alex
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [RFC PATCH] audio: proper support for float samples in mixeng,
Alexander Bulekov <=