mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -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