[alsa-devel] how to obtain hardware playback position after underrun?
Hello,
I am trying to figure out how to obtain the hardware playback position after an underrun occured. When I have no underruns, I can simply keep track of the time by counting the samples processed. (I am using snd_pcm_mmap_commit). But in the unlucky event an underrun occurs, I would like to know what the playback position would have been without any underrun. Is this possible? I have been looking at the API docs, and at the source code, but to no avail.
Thanks,
Maarten
At Wed, 25 Apr 2012 18:42:16 +0200, Maarten de Boer wrote:
Hello,
I am trying to figure out how to obtain the hardware playback position after an underrun occured. When I have no underruns, I can simply keep track of the time by counting the samples processed. (I am using snd_pcm_mmap_commit). But in the unlucky event an underrun occurs, I would like to know what the playback position would have been without any underrun. Is this possible? I have been looking at the API docs, and at the source code, but to no avail.
In general, the driver doesn't give such information directly. When an underrun happens, it depends on the hardware what happens at the next. It might stop immediately, reset, or whatever.
The driver can take a timestamp at the time the underrun is detected, at most. You can guess from this value.
Note that this doesn't guarantee the exact time, though. The detection is usually done at the period boundary unless the hardware generates the underrun event or the position callback casually detects the underrun.
Takashi
participants (2)
-
Maarten de Boer
-
Takashi Iwai