vlc/vlc-2.0 | branch: master | Rémi Denis-Courmont <[email protected]> | Wed Mar 7 20:25:11 2012 +0200| [cfc6a9bf40be5c78c0d53bbc7a7f79f1d76b1ca2] | committer: Rémi Denis-Courmont
ALSA: refine buffer / period parameters We really need at least two periods: with only one period we could hit a buffer underrun after a buffer overrun (a REALLY dumb failure...). Then we have a favorite buffer size. Then we pick the least number of periods to reduce wakeups (but at least 2 anyway). (cherry picked from commit 2dd544eb847556972c6bdd49e1eb0c281122f448) > http://git.videolan.org/gitweb.cgi/vlc/vlc-2.0.git/?a=commit;h=cfc6a9bf40be5c78c0d53bbc7a7f79f1d76b1ca2 --- modules/audio_output/alsa.c | 32 +++++++++++++++++++------------- 1 files changed, 19 insertions(+), 13 deletions(-) diff --git a/modules/audio_output/alsa.c b/modules/audio_output/alsa.c index 7006662..393fe01 100644 --- a/modules/audio_output/alsa.c +++ b/modules/audio_output/alsa.c @@ -437,26 +437,32 @@ static int Open (vlc_object_t *obj) msg_Dbg (aout, "resampling from %d Hz to %d Hz", aout->format.i_rate, rate); + /* Set number of periods (at least two) */ + param = 2; + val = snd_pcm_hw_params_set_periods_min (pcm, hw, ¶m, NULL); + if (val) + { + msg_Err (aout, "cannot set minimum of %u periods: %s", param, + snd_strerror (val)); + goto error; + } + /* Set buffer size */ param = AOUT_MAX_ADVANCE_TIME; val = snd_pcm_hw_params_set_buffer_time_near (pcm, hw, ¶m, NULL); if (val) - msg_Warn (aout, "cannot set buffer duration near %u us: %s", - param, snd_strerror (val)); - val = snd_pcm_hw_params_set_buffer_time_last (pcm, hw, ¶m, NULL); - if (val) - msg_Warn (aout, "cannot set buffer duration: %s", snd_strerror (val)); + { + msg_Err (aout, "cannot set buffer duration near %u us: %s", + param, snd_strerror (val)); + goto error; + } - /* Set number of periods (at least two) */ - param = 2; - val = snd_pcm_hw_params_set_periods_min (pcm, hw, ¶m, NULL); - if (val) - msg_Warn (aout, "cannot set minimum of %u periods: %s", param, - snd_strerror (val)); val = snd_pcm_hw_params_set_periods_first (pcm, hw, ¶m, NULL); if (val) - msg_Warn (aout, "cannot set periods count near %u: %s", param, - snd_strerror (val)); + { + msg_Err (aout, "cannot select periods: %s", snd_strerror (val)); + goto error; + } /* Commit hardware parameters */ val = snd_pcm_hw_params (pcm, hw); _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
