mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
audio-dsp: cleanups to format conversion
This commit is contained in:
parent
b46a0bc047
commit
d9e3eb49cc
1 changed files with 31 additions and 15 deletions
|
|
@ -213,6 +213,17 @@ static int clear_buffers(struct node *n, struct port *p)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define S16_MIN -32767
|
||||||
|
#define S16_MAX 32767
|
||||||
|
#define S16_SCALE 32767
|
||||||
|
|
||||||
|
#define F32_TO_S16(v) \
|
||||||
|
({ \
|
||||||
|
typeof(v) _v = (v); \
|
||||||
|
_v < -1.0f ? S16_MIN : \
|
||||||
|
_v >= 1.0f ? S16_MAX : \
|
||||||
|
_v * S16_SCALE; \
|
||||||
|
})
|
||||||
|
|
||||||
static void conv_f32_s16(void *dst, void *src, int index, int n_samples, int stride)
|
static void conv_f32_s16(void *dst, void *src, int index, int n_samples, int stride)
|
||||||
{
|
{
|
||||||
|
|
@ -221,17 +232,13 @@ static void conv_f32_s16(void *dst, void *src, int index, int n_samples, int str
|
||||||
int i;
|
int i;
|
||||||
d += index;
|
d += index;
|
||||||
for (i = 0; i < n_samples; i++) {
|
for (i = 0; i < n_samples; i++) {
|
||||||
if (s[i] < -1.0f)
|
*d = F32_TO_S16(s[i]);
|
||||||
*d = -((1 << 15) - 1);
|
|
||||||
else if (s[i] >= 1.0f)
|
|
||||||
*d = (1U << 15) - 1;
|
|
||||||
else
|
|
||||||
//*out = lrintf(in[i] * 32767.0f);
|
|
||||||
*d = s[i] * (1.0f * ((1U << 15) - 1));
|
|
||||||
d += stride;
|
d += stride;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define S16_TO_F32(v) ((v) * (1.0f / S16_SCALE))
|
||||||
|
|
||||||
static void conv_s16_f32(void *dst, void *src, int index, int n_samples, int stride)
|
static void conv_s16_f32(void *dst, void *src, int index, int n_samples, int stride)
|
||||||
{
|
{
|
||||||
float *d = dst;
|
float *d = dst;
|
||||||
|
|
@ -240,7 +247,7 @@ static void conv_s16_f32(void *dst, void *src, int index, int n_samples, int str
|
||||||
|
|
||||||
s += index;
|
s += index;
|
||||||
for (i = 0; i < n_samples; i++) {
|
for (i = 0; i < n_samples; i++) {
|
||||||
d[i] = *s * (1.0f / ((1U << 15) - 1));
|
d[i] = S16_TO_F32(*s);
|
||||||
s += stride;
|
s += stride;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -256,6 +263,18 @@ static void fill_s16(void *dst, int index, int n_samples, int stride)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define S32_MIN -2147483647
|
||||||
|
#define S32_MAX 2147483647
|
||||||
|
#define S32_SCALE 2147483647
|
||||||
|
|
||||||
|
#define F32_TO_S32(v) \
|
||||||
|
({ \
|
||||||
|
typeof(v) _v = (v); \
|
||||||
|
_v < -1.0f ? S32_MIN : \
|
||||||
|
_v >= 1.0f ? S32_MAX : \
|
||||||
|
_v * S32_SCALE; \
|
||||||
|
})
|
||||||
|
|
||||||
static void conv_f32_s32(void *dst, void *src, int index, int n_samples, int stride)
|
static void conv_f32_s32(void *dst, void *src, int index, int n_samples, int stride)
|
||||||
{
|
{
|
||||||
int32_t *d = dst;
|
int32_t *d = dst;
|
||||||
|
|
@ -263,16 +282,13 @@ static void conv_f32_s32(void *dst, void *src, int index, int n_samples, int str
|
||||||
int i;
|
int i;
|
||||||
d += index;
|
d += index;
|
||||||
for (i = 0; i < n_samples; i++) {
|
for (i = 0; i < n_samples; i++) {
|
||||||
if (s[i] < -1.0f)
|
*d = F32_TO_S32(s[i]);
|
||||||
*d = -((1U << 31) - 1);
|
|
||||||
else if (s[i] >= 1.0f)
|
|
||||||
*d = (1U << 31) - 1;
|
|
||||||
else
|
|
||||||
*d = s[i] * (1.0f * ((1U << 31) - 1));
|
|
||||||
d += stride;
|
d += stride;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define S32_TO_F32(v) ((v) * (1.0f / S32_SCALE))
|
||||||
|
|
||||||
static void conv_s32_f32(void *dst, void *src, int index, int n_samples, int stride)
|
static void conv_s32_f32(void *dst, void *src, int index, int n_samples, int stride)
|
||||||
{
|
{
|
||||||
float *d = dst;
|
float *d = dst;
|
||||||
|
|
@ -281,7 +297,7 @@ static void conv_s32_f32(void *dst, void *src, int index, int n_samples, int str
|
||||||
|
|
||||||
s += index;
|
s += index;
|
||||||
for (i = 0; i < n_samples; i++) {
|
for (i = 0; i < n_samples; i++) {
|
||||||
d[i] = *s * (1.0f / ((1U << 31) - 1));
|
d[i] = S32_TO_F32(*s);
|
||||||
s += stride;
|
s += stride;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue