[alsa-devel] [PATCH] alsabat: fix the buffer size dependency issue

Takashi Iwai tiwai at suse.de
Wed Aug 16 18:07:20 CEST 2017


On Tue, 08 Aug 2017 16:31:38 +0200,
Zhang Keqiao wrote:
> 
> In round trip latency test, the latency time is depends on the buffer
> size, before the test, it will playing one second 0 data to synchronize
> the playback thread and the recording thread, then begin playing a ~1000
> HZ sine wave and record it. Stop counting and playing if the input's
> loudness is higher than the threshold. The issue here is before catching
> the sine wave, the buffer is full with 0 data need to deal with, so this
> latency is also counted.
> 
> This patch is intends to use flag to do the thread synchronization instead
> of playing 0 data, once recording thread is ready, playing the ~1000 HZ
> sine wave and start over this process until the final test is over.
> 
> Signed-off-by: Zhang Keqiao <keqiaox.k.zhang at linux.intel.com>
> ---
>  bat/alsa.c        | 26 +++++++++++++++++++++++---
>  bat/common.h      |  4 +++-
>  bat/latencytest.c | 47 +++++++++++++++++++++++++----------------------
>  3 files changed, 51 insertions(+), 26 deletions(-)
> 
> diff --git a/bat/alsa.c b/bat/alsa.c
> index 7613f44..5af7766 100644
> --- a/bat/alsa.c
> +++ b/bat/alsa.c
> @@ -351,6 +351,14 @@ static int latencytest_process_output(struct pcm_container *sndpcm,
>  
>  	bat->latency.is_playing = true;
>  
> +	/* set playback ready */
> +	bat->latency.state = LATENCY_STATE_PLAY_READY;
> +
> +	/* wait for capture ready */
> +	while (bat->latency.state != LATENCY_STATE_RECORD_AND_LISTEN) {
> +		usleep(10);
> +	}

The code doesn't look good from the multi-thread synchronization
POV...


thanks,

Takashi


More information about the Alsa-devel mailing list