[alsa-devel] [PATCH] speaker-test: Fix dropped samples at the end of test

Takashi Iwai tiwai at suse.de
Tue Sep 16 16:45:30 CEST 2014


At Tue, 16 Sep 2014 10:51:32 +0300,
Jarkko Nikula wrote:
> 
> On 09/15/2014 06:23 PM, Takashi Iwai wrote:
> > At Fri, 12 Sep 2014 15:14:28 +0300,
> > Jarkko Nikula wrote:
> >> Commit 6d1673526b0f ("Avoid unnecessary drain/restart in speaker-test")
> >> drains only when buffer is bigger than audio sample. This has a drawback
> >> that up to buffer size amount of data may not be heard at the end of audio
> >> sample.
> >>
> >> This was noted with "speaker-test -c 2 -t wav -s 2" test on a
> >> hardware that has a buffer size of 24000 samples and 48 kHz sample rate.
> >> Instead of playing "front right" it played something like "front ra".
> >>
> >> Reverse buffer size vs sample size test wouldn't work either since then
> >> samples smaller than buffer are dropped.
> >>
> >> Fix this by removing buffer_size tests from write_loop() and do
> >> drain/restart always when not aborting.
> >>
> >> Signed-off-by: Jarkko Nikula <jarkko.nikula at linux.intel.com>
> >> Reported-by: Vidal, Guillaume-florianX <guillaume-florianx.vidal at intel.com>
> >> ---
> >> This was originally noted on Baytrail ADSP hw (default buffer size 24000)
> >> but can be heard also on Intel HDA (default buffer size 8192) when audio
> >> sample is small enough but bigger than buffer. For instance 100 ms sample
> >> finishes too shortly (buffer size 8192, sample size 9600) but 50 ms plays
> >> ok (buffer size 8192, sample size 4800).
> >>
> >> I guess some optimization can be done for snd_pcm_prepare() when not looping
> >> but that's not necessary for this fix.
> > Won't it suffice by just putting snd_pcm_drain() at the end of the
> > whole operation like below?  Doing snd_pcm_drain() and
> > snd_pcm_prepare() at each time causes often undesired pop noises or
> > such.
> Yeah, that works too and pop avoidance is a good argument.
> > OTOH, doing drain there is good for showing the text at the right
> > time.  So, we'll likely want to have both options managed by a command
> > line option.
> >
> I see slight difference between text print and sample starts time on 
> Baytrail ADSP when doing loop test with your patch. Perhaps about half 
> second since buffer size is 24000 and SR 48 kHZ but I don't think that 
> matters much since it's hardly noticeable.
> 
> Tested-by: Jarkko Nikula <jarkko.nikula at linux.intel.com>

OK, I pushed the fix.  Thanks for checking.


Takashi


More information about the Alsa-devel mailing list