From: bruceperens Date: Wed, 12 Mar 2014 21:35:20 +0000 (+0000) Subject: Drop delayed samples rather than reading them. X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=0ec9b0caf68e1a8b99ad93d2755611821f6fb1e0;p=freetel-svn-tracking.git Drop delayed samples rather than reading them. git-svn-id: https://svn.code.sf.net/p/freetel/code@1431 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/freedv-server/source/platform/linux/audio_in_alsa.cpp b/freedv-server/source/platform/linux/audio_in_alsa.cpp index 44210317..64d1de54 100644 --- a/freedv-server/source/platform/linux/audio_in_alsa.cpp +++ b/freedv-server/source/platform/linux/audio_in_alsa.cpp @@ -99,7 +99,7 @@ namespace FreeDV { if ( result == -EPIPE ) { snd_pcm_recover(handle, result, 1); result = snd_pcm_readi(handle, array, length); - std::cerr << "ALSA read underrun." << std::endl; + std::cerr << "ALSA input: read underrun." << std::endl; if ( result == -EPIPE ) return 0; } @@ -139,28 +139,19 @@ namespace FreeDV { if ( delay >= overlong_delay && available > 0 ) { int dropped = 0; - while ( delay > delay_goal ) { - std::int16_t buffer[1000]; - - int samples = min(available, delay - delay_goal); - const int length = min(sizeof(buffer) / sizeof(*buffer), - samples); - - if ( snd_pcm_readi(handle, buffer, length) < 0 ) - break; - dropped += length; - if ( snd_pcm_avail_delay(handle, &available, &delay) < 0 ) - break; - } - std::cerr << "ALSA input: long delay, dropped " - << dropped << " queued audio samples." << std::endl; + snd_pcm_drop(handle); + snd_pcm_prepare(handle); + snd_pcm_start(handle); + const double seconds = (double)delay / (double)SampleRate; + std::cerr << "ALSA input: program paused, dropped " + << seconds << " seconds of queued audio samples." << std::endl; } if ( error == -EPIPE ) { snd_pcm_recover(handle, error, 1); available = snd_pcm_avail_delay(handle, &available, &delay); - std::cerr << "ALSA read underrun." << std::endl; + std::cerr << "ALSA input: read underrun." << std::endl; } if ( error >= 0 ) diff --git a/freedv-server/source/platform/linux/audio_out_alsa.cpp b/freedv-server/source/platform/linux/audio_out_alsa.cpp index 5b19696e..62b41c67 100644 --- a/freedv-server/source/platform/linux/audio_out_alsa.cpp +++ b/freedv-server/source/platform/linux/audio_out_alsa.cpp @@ -94,7 +94,7 @@ namespace FreeDV { if ( result == -EPIPE ) { snd_pcm_recover(handle, result, 1); result = snd_pcm_writei(handle, array, length); - std::cerr << "ALSA write underrun." << std::endl; + std::cerr << "ALSA output: write underrun." << std::endl; if ( result == -EPIPE ) return 0; } @@ -129,7 +129,7 @@ namespace FreeDV { if ( error == -EPIPE ) { snd_pcm_recover(handle, error, 1); available = snd_pcm_avail_delay(handle, &available, &delay); - std::cerr << "ALSA write underrun." << std::endl; + std::cerr << "ALSA output: write underrun." << std::endl; } if ( error == 0 ) return available;