At Wed, 18 Mar 2009 11:51:08 -0700, dfoley wrote:
Takashi Iwai wrote:
At Tue, 17 Mar 2009 21:56:06 -0700, dfoley wrote:
I'm currently having a problem with playing wave files
root@tsi-tpcxx:~# aplay /usr/share/sounds/alsa/Front_Center.wav Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono mapped channel 10 to 2 underrun!!! (at least 130.662 ms long) underrun!!! (at least 140.809 ms long)
I've narrowed it down to the commit ed3da3d9a0ef13c6fe1414ec73c9c1be12747b62 in linux-next/sound-2.6-tiwai.git. ALSA: Rewrite hw_ptr updaters
The audio works fine, when I reverse this commit.
Could you build with CONFIG_SND_DEBUG_XRUN and set below? echo 1 > /proc/asound/card0/pcm0p/xrun_debug
It will show you why the playback skips. It means usually the pointer callback is unstable. The commit changed the xrun check more strictly.
Takashi
root@tsi-tpcxx:~# echo 1 > /proc/asound/card0/pcm0p/xrun_debug root@tsi-tpcxx:~# aplay /usr/share/sounds/alsa/Front_Center.wav Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono mapped channel 10 to 2 hda_codec: Lost interrupts? (stream=0, delta=20004, intr_ptr=2048) XRUN: pcmC0D0p underrun!!! (at least 58.490 ms long) hda_codec: Lost interrupts? (stream=0, delta=20003, intr_ptr=2048) XRUN: pcmC0D0p underrun!!! (at least 58.254 ms long) hda_codec: Lost interrupts? (stream=0, delta=20004, intr_ptr=2048)
So, actually either the interrupt timing or the pointer callback is wrong on your driver.
Try to add a debug print in your pointer callback to print the returned value at each call (better together with runtime->period_size and runtime->buffer_size to refer).
Takashi