Colin Guthrie wrote:
AFAIK, the way Wine uses snd_pcm_delay() is to check when a sample is fully played. e.g. they wait for the function to return 0. I think this was done due to the docs specifically say that it is the "difference between appl_ptr and hw_ptr" so it makes sense to assume this will return 0 when there is nothing waiting to be played. I would strongly recommend that you remove the implementation detail from the (supposedly high level) docs.
Wine needs to know when a particular sample has been played by the hardware. And it should be reasonably accurate as some applications may depend on that timing. Currently Wine accounts for how many bytes it has written into the device, and then uses 'bytes_written - frames_to_bytes(snd_pcm_delay())' to find out which samples have been played. AFAICS alsa has no dedicated function to find out which samples have been played, so Wine is forced to emulate it using snd_pcm_delay(). If there is any function at all that would be more appropriate in that situation, please tell the Wine developers.
tom