I found another clue to this but can anyone please explain what could be going wrong?
The execution enters into the following function
static int snd_pcm_update_hw_ptr_interrupt(struct snd_pcm_substream >*substream) { .... new_hw_ptr = hw_base + pos;
this gets updated correctly
... hdelta = new_hw_ptr - old_hw_ptr; jdelta = jiffies - runtime->hw_ptr_jiffies;
as far as I don't get into the following loop, am good...the moment I get into this loop my new_hw_ptr gets modified and it does not progress in capture. Any clues?
if (((hdelta * HZ) / runtime->rate) > jdelta + HZ/100) { delta = jdelta / (((runtime->period_size * HZ) / runtime->rate) + HZ/100); hw_ptr_error(substream, "hw_ptr skipping! [Q] " "(pos=%ld, delta=%ld, period=%ld, " "jdelta=%lu/%lu/%lu)\n", (long)pos, (long)hdelta, (long)runtime->period_size, jdelta, ((hdelta * HZ) / runtime->rate), delta); hw_ptr_interrupt = runtime->hw_ptr_interrupt + runtime->period_size * delta; if (hw_ptr_interrupt >= runtime->boundary) hw_ptr_interrupt -= runtime->boundary; /* rebase to interrupt position */ hw_base = new_hw_ptr = hw_ptr_interrupt; /* align hw_base to buffer_size */ hw_base -= hw_base % runtime->buffer_size; delta = 0; } ... }
Thanks, Harsha
______________________________________ From: Harsha, Priya Sent: Saturday, June 27, 2009 9:18 AM To: alsa-devel@alsa-project.org Subject: snd_pcm_lib_read1 timeout
Hi,
I have a basic question;
There is a schedule_timeout() in snd_pcm_lib_read1 -> wait_for_avail_min. When and where does this timeout get signaled? What would be the reason that this timeout happens?
Thanks, Harsha