From 9e5b75366b8caa4886372be53c2e82f93a1da251 Mon Sep 17 00:00:00 2001 From: John Melton - G0ORX/N6LYT Date: Mon, 19 Dec 2016 12:12:52 +0000 Subject: [PATCH] added check on output buffer size to trim output samples to keep sync. --- audio.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/audio.c b/audio.c index fc73794..b46ab8a 100644 --- a/audio.c +++ b/audio.c @@ -281,7 +281,9 @@ void audio_close_input() { } int audio_write(short left_sample,short right_sample) { + snd_pcm_sframes_t delay; int error; + long trim; if(playback_handle!=NULL && audio_buffer!=NULL) { audio_buffer[audio_offset++]=left_sample; @@ -291,7 +293,16 @@ int audio_write(short left_sample,short right_sample) { if(audio_offset==AUDIO_BUFFER_SIZE) { - if ((error = snd_pcm_writei (playback_handle, audio_buffer, audio_buffer_size)) != audio_buffer_size) { + trim=0; + + if(snd_pcm_delay(playback_handle,&delay)==0) { + if(delay>2048) { + trim=delay-2048; +fprintf(stderr,"audio delay=%ld trim=%ld\n",delay,trim); + } + } + + if ((error = snd_pcm_writei (playback_handle, audio_buffer, audio_buffer_size-trim)) != audio_buffer_size-trim) { if(error==-EPIPE) { if ((error = snd_pcm_prepare (playback_handle)) < 0) { fprintf (stderr, "audio_write: cannot prepare audio interface for use (%s)\n", -- 2.45.2