# HG changeset patch # User Tony Vroon # Date 1241986529 -3600 # Node ID a6a57fe6a75c6d92aeb51a6c568eece51d1f7ee4 # Parent 87b0c47089e5ee528433ac4920bc94411e471aba Fix last second(s) of playback getting lost, by Hans de Goede. diff -r 87b0c47089e5 -r a6a57fe6a75c src/alsa/audio.c --- a/src/alsa/audio.c Sat May 09 13:47:30 2009 -0500 +++ b/src/alsa/audio.c Sun May 10 21:15:29 2009 +0100 @@ -141,13 +141,11 @@ int alsa_playing(void) { - if (!going || paused || alsa_pcm == NULL) + if (!going || paused || prebuffer || alsa_pcm == NULL) return FALSE; - return snd_pcm_state(alsa_pcm) == SND_PCM_STATE_RUNNING && - !paused && - !prebuffer && - get_thread_buffer_filled() > hw_period_size_in; + return snd_pcm_state(alsa_pcm) == SND_PCM_STATE_RUNNING || + get_thread_buffer_filled(); } static gint @@ -647,7 +645,7 @@ { gint length, cnt, avail; - length = MIN(hw_period_size_in, get_thread_buffer_filled()); + length = get_thread_buffer_filled(); avail = snd_pcm_frames_to_bytes(alsa_pcm, alsa_get_avail()); length = MIN(length, avail); while (length > 0) @@ -677,8 +675,7 @@ { if (get_thread_buffer_filled() > prebuffer_size) prebuffer = FALSE; - if (!paused && !prebuffer && - get_thread_buffer_filled() > hw_period_size_in) + if (!paused && !prebuffer && get_thread_buffer_filled()) { wr = snd_pcm_wait(alsa_pcm, 10); if (wr > 0)