mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
audioconvert: implement f64s
Add swapping functions for f64s. Fix the awkward interleave/deinterleave names for 32s.
This commit is contained in:
parent
bc1789c3ea
commit
dd1d5960b4
4 changed files with 38 additions and 29 deletions
|
|
@ -164,8 +164,7 @@ MAKE_D_TO_D(f64, double, f32, float, (float));
|
||||||
MAKE_I_TO_I(f64, double, f32, float, (float));
|
MAKE_I_TO_I(f64, double, f32, float, (float));
|
||||||
MAKE_I_TO_D(f64, double, f32, float, (float));
|
MAKE_I_TO_D(f64, double, f32, float, (float));
|
||||||
MAKE_D_TO_I(f64, double, f32, float, (float));
|
MAKE_D_TO_I(f64, double, f32, float, (float));
|
||||||
MAKE_I_TO_D(f64s, double, f32, float, bswap_64); /* FIXME */
|
MAKE_I_TO_D(f64s, uint64_t, f32, float, (float)F64S_TO_F64);
|
||||||
|
|
||||||
|
|
||||||
/* from f32 */
|
/* from f32 */
|
||||||
MAKE_D_TO_D(f32, float, u8, uint8_t, F32_TO_U8);
|
MAKE_D_TO_D(f32, float, u8, uint8_t, F32_TO_U8);
|
||||||
|
|
@ -221,7 +220,7 @@ MAKE_D_TO_D(f32, float, f64, double, (double));
|
||||||
MAKE_I_TO_I(f32, float, f64, double, (double));
|
MAKE_I_TO_I(f32, float, f64, double, (double));
|
||||||
MAKE_I_TO_D(f32, float, f64, double, (double));
|
MAKE_I_TO_D(f32, float, f64, double, (double));
|
||||||
MAKE_D_TO_I(f32, float, f64, double, (double));
|
MAKE_D_TO_I(f32, float, f64, double, (double));
|
||||||
MAKE_D_TO_I(f32, float, f64s, double, bswap_32); /* FIXME */
|
MAKE_D_TO_I(f32, float, f64s, uint64_t, F64_TO_F64S);
|
||||||
|
|
||||||
|
|
||||||
static inline int32_t
|
static inline int32_t
|
||||||
|
|
@ -370,22 +369,22 @@ MAKE_D_shaped(s16, int16_t, F32_TO_S16_SH);
|
||||||
MAKE_I_shaped(s16, int16_t, F32_TO_S16_SH);
|
MAKE_I_shaped(s16, int16_t, F32_TO_S16_SH);
|
||||||
MAKE_I_shaped(s16s, uint16_t, F32_TO_S16S_SH);
|
MAKE_I_shaped(s16s, uint16_t, F32_TO_S16S_SH);
|
||||||
|
|
||||||
#define MAKE_DEINTERLEAVE(size,type,func) \
|
#define MAKE_DEINTERLEAVE(size1,size2, type,func) \
|
||||||
MAKE_I_TO_D(size,type,size,type,func)
|
MAKE_I_TO_D(size1,type,size2,type,func)
|
||||||
|
|
||||||
MAKE_DEINTERLEAVE(8, uint8_t, (uint8_t));
|
MAKE_DEINTERLEAVE(8, 8, uint8_t, (uint8_t));
|
||||||
MAKE_DEINTERLEAVE(16, uint16_t, (uint16_t));
|
MAKE_DEINTERLEAVE(16, 16, uint16_t, (uint16_t));
|
||||||
MAKE_DEINTERLEAVE(24, uint24_t, (uint24_t));
|
MAKE_DEINTERLEAVE(24, 24, uint24_t, (uint24_t));
|
||||||
MAKE_DEINTERLEAVE(32, uint32_t, (uint32_t));
|
MAKE_DEINTERLEAVE(32, 32, uint32_t, (uint32_t));
|
||||||
MAKE_DEINTERLEAVE(32s, uint32_t, bswap_32);
|
MAKE_DEINTERLEAVE(32s, 32, uint32_t, bswap_32);
|
||||||
MAKE_DEINTERLEAVE(64, uint64_t, (uint64_t));
|
MAKE_DEINTERLEAVE(64, 64, uint64_t, (uint64_t));
|
||||||
|
|
||||||
#define MAKE_INTERLEAVE(size,type,func) \
|
#define MAKE_INTERLEAVE(size1,size2,type,func) \
|
||||||
MAKE_D_TO_I(size,type,size,type,func)
|
MAKE_D_TO_I(size1,type,size2,type,func)
|
||||||
|
|
||||||
MAKE_INTERLEAVE(8, uint8_t, (uint8_t));
|
MAKE_INTERLEAVE(8, 8, uint8_t, (uint8_t));
|
||||||
MAKE_INTERLEAVE(16, uint16_t, (uint16_t));
|
MAKE_INTERLEAVE(16, 16, uint16_t, (uint16_t));
|
||||||
MAKE_INTERLEAVE(24, uint24_t, (uint24_t));
|
MAKE_INTERLEAVE(24, 24, uint24_t, (uint24_t));
|
||||||
MAKE_INTERLEAVE(32, uint32_t, (uint32_t));
|
MAKE_INTERLEAVE(32, 32, uint32_t, (uint32_t));
|
||||||
MAKE_INTERLEAVE(32s, uint32_t, bswap_32);
|
MAKE_INTERLEAVE(32, 32s, uint32_t, bswap_32);
|
||||||
MAKE_INTERLEAVE(64, uint64_t, (uint64_t));
|
MAKE_INTERLEAVE(64, 64, uint64_t, (uint64_t));
|
||||||
|
|
|
||||||
|
|
@ -823,7 +823,7 @@ conv_interleave_32s_4s_sse2(void *data, void * SPA_RESTRICT dst, const void * SP
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
conv_32sd_to_32s_sse2(struct convert *conv, void * SPA_RESTRICT dst[], const void * SPA_RESTRICT src[],
|
conv_32d_to_32s_sse2(struct convert *conv, void * SPA_RESTRICT dst[], const void * SPA_RESTRICT src[],
|
||||||
uint32_t n_samples)
|
uint32_t n_samples)
|
||||||
{
|
{
|
||||||
int32_t *d = dst[0];
|
int32_t *d = dst[0];
|
||||||
|
|
@ -991,7 +991,7 @@ conv_deinterleave_32s_4s_sse2(void *data, void * SPA_RESTRICT dst[], const void
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
conv_32s_to_32sd_sse2(struct convert *conv, void * SPA_RESTRICT dst[], const void * SPA_RESTRICT src[],
|
conv_32s_to_32d_sse2(struct convert *conv, void * SPA_RESTRICT dst[], const void * SPA_RESTRICT src[],
|
||||||
uint32_t n_samples)
|
uint32_t n_samples)
|
||||||
{
|
{
|
||||||
const float *s = src[0];
|
const float *s = src[0];
|
||||||
|
|
|
||||||
|
|
@ -105,13 +105,13 @@ static struct conv_info conv_table[] =
|
||||||
MAKE(F32P, F32, 0, conv_32d_to_32_c),
|
MAKE(F32P, F32, 0, conv_32d_to_32_c),
|
||||||
|
|
||||||
#if defined (HAVE_SSE2)
|
#if defined (HAVE_SSE2)
|
||||||
MAKE(F32_OE, F32P, 0, conv_32s_to_32sd_sse2, SPA_CPU_FLAG_SSE2),
|
MAKE(F32_OE, F32P, 0, conv_32s_to_32d_sse2, SPA_CPU_FLAG_SSE2),
|
||||||
#endif
|
#endif
|
||||||
MAKE(F32_OE, F32P, 0, conv_32s_to_32sd_c),
|
MAKE(F32_OE, F32P, 0, conv_32s_to_32d_c),
|
||||||
#if defined (HAVE_SSE2)
|
#if defined (HAVE_SSE2)
|
||||||
MAKE(F32P, F32_OE, 0, conv_32sd_to_32s_sse2, SPA_CPU_FLAG_SSE2),
|
MAKE(F32P, F32_OE, 0, conv_32d_to_32s_sse2, SPA_CPU_FLAG_SSE2),
|
||||||
#endif
|
#endif
|
||||||
MAKE(F32P, F32_OE, 0, conv_32sd_to_32s_c),
|
MAKE(F32P, F32_OE, 0, conv_32d_to_32s_c),
|
||||||
|
|
||||||
MAKE(U32, F32, 0, conv_u32_to_f32_c),
|
MAKE(U32, F32, 0, conv_u32_to_f32_c),
|
||||||
MAKE(U32, F32P, 0, conv_u32_to_f32d_c),
|
MAKE(U32, F32P, 0, conv_u32_to_f32d_c),
|
||||||
|
|
|
||||||
|
|
@ -181,6 +181,16 @@ static inline int24_t bswap_s24(int24_t src)
|
||||||
return (int24_t) { .v1 = src.v3, .v2 = src.v2, .v3 = src.v1 };
|
return (int24_t) { .v1 = src.v3, .v2 = src.v2, .v3 = src.v1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define F32_TO_F32S(v) \
|
||||||
|
bswap_32((union { uint32_t i; float f; }){ .f = (v) }.i)
|
||||||
|
#define F32S_TO_F32(v) \
|
||||||
|
((union { uint32_t i; float f; }){ .i = bswap_32(v) }.f)
|
||||||
|
|
||||||
|
#define F64_TO_F64S(v) \
|
||||||
|
bswap_32((union { uint64_t i; double d; }){ .d = (v) }.i)
|
||||||
|
#define F64S_TO_F64(v) \
|
||||||
|
((union { uint64_t i; double d; }){ .i = bswap_32(v) }.d)
|
||||||
|
|
||||||
#define NS_MAX 8
|
#define NS_MAX 8
|
||||||
#define NS_MASK (NS_MAX-1)
|
#define NS_MASK (NS_MAX-1)
|
||||||
|
|
||||||
|
|
@ -371,14 +381,14 @@ DEFINE_FUNCTION(8_to_8d, c);
|
||||||
DEFINE_FUNCTION(16_to_16d, c);
|
DEFINE_FUNCTION(16_to_16d, c);
|
||||||
DEFINE_FUNCTION(24_to_24d, c);
|
DEFINE_FUNCTION(24_to_24d, c);
|
||||||
DEFINE_FUNCTION(32_to_32d, c);
|
DEFINE_FUNCTION(32_to_32d, c);
|
||||||
DEFINE_FUNCTION(32s_to_32sd, c);
|
DEFINE_FUNCTION(32s_to_32d, c);
|
||||||
DEFINE_FUNCTION(64_to_64d, c);
|
DEFINE_FUNCTION(64_to_64d, c);
|
||||||
DEFINE_FUNCTION(64s_to_64sd, c);
|
DEFINE_FUNCTION(64s_to_64sd, c);
|
||||||
DEFINE_FUNCTION(8d_to_8, c);
|
DEFINE_FUNCTION(8d_to_8, c);
|
||||||
DEFINE_FUNCTION(16d_to_16, c);
|
DEFINE_FUNCTION(16d_to_16, c);
|
||||||
DEFINE_FUNCTION(24d_to_24, c);
|
DEFINE_FUNCTION(24d_to_24, c);
|
||||||
DEFINE_FUNCTION(32d_to_32, c);
|
DEFINE_FUNCTION(32d_to_32, c);
|
||||||
DEFINE_FUNCTION(32sd_to_32s, c);
|
DEFINE_FUNCTION(32d_to_32s, c);
|
||||||
DEFINE_FUNCTION(64d_to_64, c);
|
DEFINE_FUNCTION(64d_to_64, c);
|
||||||
DEFINE_FUNCTION(64sd_to_64s, c);
|
DEFINE_FUNCTION(64sd_to_64s, c);
|
||||||
|
|
||||||
|
|
@ -399,9 +409,9 @@ DEFINE_FUNCTION(f32d_to_s16_2, sse2);
|
||||||
DEFINE_FUNCTION(f32d_to_s16, sse2);
|
DEFINE_FUNCTION(f32d_to_s16, sse2);
|
||||||
DEFINE_FUNCTION(f32d_to_s16d, sse2);
|
DEFINE_FUNCTION(f32d_to_s16d, sse2);
|
||||||
DEFINE_FUNCTION(32_to_32d, sse2);
|
DEFINE_FUNCTION(32_to_32d, sse2);
|
||||||
DEFINE_FUNCTION(32s_to_32sd, sse2);
|
DEFINE_FUNCTION(32s_to_32d, sse2);
|
||||||
DEFINE_FUNCTION(32d_to_32, sse2);
|
DEFINE_FUNCTION(32d_to_32, sse2);
|
||||||
DEFINE_FUNCTION(32sd_to_32s, sse2);
|
DEFINE_FUNCTION(32d_to_32s, sse2);
|
||||||
#endif
|
#endif
|
||||||
#if defined(HAVE_SSSE3)
|
#if defined(HAVE_SSSE3)
|
||||||
DEFINE_FUNCTION(s24_to_f32d, ssse3);
|
DEFINE_FUNCTION(s24_to_f32d, ssse3);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue