mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	SPDX tags make the licensing information easy to understand and clear, and they are machine parseable. See https://spdx.dev for more information.
		
			
				
	
	
		
			52 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Spa */
 | 
						|
/* SPDX-FileCopyrightText: Copyright © 2022 Wim Taymans */
 | 
						|
/* SPDX-License-Identifier: MIT */
 | 
						|
 | 
						|
#ifndef DELAY_H
 | 
						|
#define DELAY_H
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
static inline void delay_run(float *buffer, uint32_t *pos,
 | 
						|
		uint32_t n_buffer, uint32_t delay,
 | 
						|
		float *dst, const float *src, const float vol, uint32_t n_samples)
 | 
						|
{
 | 
						|
	uint32_t i;
 | 
						|
	uint32_t p = *pos;
 | 
						|
 | 
						|
	for (i = 0; i < n_samples; i++) {
 | 
						|
		buffer[p] = src[i];
 | 
						|
		dst[i] = buffer[(p - delay) & (n_buffer-1)] * vol;
 | 
						|
		p = (p + 1) & (n_buffer-1);
 | 
						|
	}
 | 
						|
	*pos = p;
 | 
						|
}
 | 
						|
 | 
						|
static inline void delay_convolve_run(float *buffer, uint32_t *pos,
 | 
						|
		uint32_t n_buffer, uint32_t delay,
 | 
						|
		const float *taps, uint32_t n_taps,
 | 
						|
		float *dst, const float *src, const float vol, uint32_t n_samples)
 | 
						|
{
 | 
						|
	uint32_t i, j;
 | 
						|
	uint32_t p = *pos;
 | 
						|
 | 
						|
	for (i = 0; i < n_samples; i++) {
 | 
						|
		float sum = 0.0f;
 | 
						|
 | 
						|
		buffer[p] = src[i];
 | 
						|
		for (j = 0; j < n_taps; j++)
 | 
						|
			sum += (taps[j] * buffer[((p - delay) - j) & (n_buffer-1)]);
 | 
						|
		dst[i] = sum * vol;
 | 
						|
 | 
						|
		p = (p + 1) & (n_buffer-1);
 | 
						|
	}
 | 
						|
	*pos = p;
 | 
						|
}
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* DELAY_H */
 |