2013/12/6 Tanu Kaskinen <tanu.kaskinen at linux.intel.com> > On Sat, 2013-11-30 at 18:07 +0100, Lars-Peter Clausen wrote: > > PCM Devices which have the BATCH flag set update the PCM pointer only > with > > period size granularity. Using timer based scheduling does not have any > > advantage in this mode. For one devices which have that flag set usually > update > > the position pointer in software after getting the period interrupt. So > > disabling the period interrupt is not possible for this kind of devices. > > Furthermore writing to or reading from the buffer slice for the current > period > > is not possible since the position inside the buffer is not known. On > the other > > hand the tsched algorithm seems to get easily confused for this kind of > > hardware, which results in garbled audio output. This typically means > that timer > > based scheduling needs to be manually disabled on systems with such > devices. > > Auto disabling tsched in this case allows these systems to run with the > default > > configuration. > > > > Signed-off-by: Lars-Peter Clausen <lars at metafoo.de> > > --- > > src/modules/alsa/alsa-util.c | 4 ++++ > > 1 file changed, 4 insertions(+) > > > > diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c > > index 75f5858..4b24e47 100644 > > --- a/src/modules/alsa/alsa-util.c > > +++ b/src/modules/alsa/alsa-util.c > > @@ -245,6 +245,10 @@ int pa_alsa_set_hw_params( > > if (!pa_alsa_pcm_is_hw(pcm_handle)) > > _use_tsched = false; > > > > + /* The PCM pointer is only updated with period granularity */ > > + if (snd_pcm_hw_params_is_batch(hwparams)) > > + _use_tsched = false; > > + > > #if (SND_LIB_VERSION >= ((1<<16)|(0<<8)|24)) /* API additions in 1.0.24 > */ > > if (_use_tsched) { > > > > Thanks! I applied the patch. > > -- > Are you patch sufficient ? In alsa-lib , snd_pcm_sw_params_set_avail_min always return zero int snd_pcm_sw_params_set_avail_min(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val) { assert(pcm && params); /* Fix avail_min if it's below period size. The period_size * defines the minimal wake-up timing accuracy, so it doesn't * make sense to set below that. */ if (val < pcm->period_size) val = pcm->period_size; params->avail_min = val; return 0; } http://cgit.freedesktop.org/pulseaudio/pulseaudio/commit/src/modules/alsa/alsa-sink.c?id=26a270a934f0f174f7bd7eb89e85301963721deb /* We need at last one frame in the used part of the buffer */ - avail_min = (snd_pcm_uframes_t) u->hwbuf_unused_frames + 1; + avail_min = (snd_pcm_uframes_t) u->hwbuf_unused / u->frame_size + 1; do pulseaudio need to keep at least one periods instead of more than 1 frames for those driver which update hwptr in periods ? -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/pulseaudio-discuss/attachments/20131209/416f5a57/attachment.html>