At Thu, 27 Sep 2007 14:16:29 +0200 (CEST), Anders Boström wrote:
"TI" == Takashi Iwai tiwai@suse.de writes:
TI> At Tue, 18 Sep 2007 09:41:48 +0200 (CEST), TI> Anders Boström wrote:
>> "TI" == Takashi Iwai tiwai@suse.de writes:
can one please have a lokk at this? aplay -N isn't working for the OP.
TI> Cannot reproduce here. Could you _post_ more details?
OK, I've tested more, and discovered that the problem seems to be that the end of the sound is cut in non-blocking mode. And if I play a very short sound-file, I can't hear anything. Blocking mode works fine.
When using non-blocking mode, an strace contains "ioctl(4, 0x4144, 0x2b9f785d8000) = -1 EAGAIN (Resource temporarily unavailable)". Blocking mode never contains the EAGAIN response.
I attach two files. When playing halt.au, I can only hear the start, about as much as "ha". When playing metal.au, I can't hear anything.
TI> OK, thanks, I see the problem now.
TI> I don't remember whether it's a feature or a bug. The drain ioctl TI> rejects the non-block mode.
I can understand the idea here, that in non-blocking mode, no call should block, ever. But on the other hand, if you call the drain ioctl, you probably expect it to work, even in non-blocking mode. Why would you otherwise call it?
Yes, that's my opinion, too. This particular ioctl is to block the operation, so it should be allowed as long as it's called.
But I vaguely remember that we discussed about it, and the current form is the result of that. Namely, we can call snd_pcm_nonblock(FALSE) explicitly before calling snd_pcm_drain().
Though, I prefer fixing the behavior in the core side to allow the blocking with this call... Any reasonable objections in mind?
Takashi