At Wed, 06 Aug 2008 16:54:38 -0500, Timur Tabi wrote:
Takashi Iwai wrote:
You can return SNDRV_PCM_POS_XRUN from the pointer callback (with kernel messages if you like). Then the PCM stream is stopped and the status is changed to SND_PCM_STATUS_XRUN. Further access will result in -EPIPE.
This doesn't seem to work. I don't get any more underrun/overrun messages, but the application doesn't know that something's failed.
With mplayer, I see this message:
alsa-lib: pcm_hw.c:405:(snd_pcm_hw_hwsync) SNDRV_PCM_IOCTL_HWSYNC failed: Broken pipe
And then mplayer hangs with the status bar here:
A: 0.0 (00.0) of 249.0 (04:09.0) ??,?% $<50>
aplay just hangs.
Hm... The behavior with returning SNDRV_PCM_POS_XRUN is basically identical with the real XRUN detection. I guess the XRUN-stop mechanism doesn't work well with the case of hwsync.
How is the PCM status during hang? Check /proc/asound/card0/pcm*/sub*/* files. Also, could you run with gdb and check at which code-path is it stopped?
thanks,
Takashi