At Fri, 4 Sep 2009 00:43:09 +0200, Giovanni Maruzzelli wrote:
On Fri, Sep 4, 2009 at 12:03 AM, Giovanni Maruzzelligmaruzz.lists@gmail.com wrote:
I'll test it and report back here.
Still we have big problems....
OK, then upgrade your alsa driver stack to 1.0.21. There have been some changes in PCM core. Then, get dummy.c again from the latest alsa-driver-unstable tarball. It already contains my latest fix.
If 1.0.21+dummy.c doesn't work, apply the patch below to get position logs. If this still causes the invalid backward jump to position 0, you should check xrun debug, e.g. # echo 9 > /proc/asound/card0/pcm0p/xrun_debug
(assuming snd-dummy is card0).
Takashi
--- diff --git a/dummy.c b/dummy.c index e8e29bf..f7c21d5 100644 --- a/dummy.c +++ b/dummy.c @@ -239,6 +239,10 @@ static void dummy_systimer_update(struct dummy_systimer_pcm *dpcm) dpcm->frac_period_rest += dpcm->frac_period_size; } dpcm->frac_period_rest -= delta; + printk(KERN_DEBUG "xxx delta=%ld, pos=%d(%d), rest=%d(%d)\n", + delta / dpcm->rate, + dpcm->frac_pos, dpcm->frac_pos / HZ, + dpcm->frac_period_rest, dpcm->frac_period_rest / HZ); }
static int dummy_systimer_start(struct snd_pcm_substream *substream) @@ -248,6 +252,10 @@ static int dummy_systimer_start(struct snd_pcm_substream *substream) dpcm->base_time = jiffies; dummy_systimer_rearm(dpcm); spin_unlock(&dpcm->lock); + printk(KERN_DEBUG "*** START: buffer=%d, period=%d, rate=%d\n", + (int)substream->runtime->buffer_size, + (int)substream->runtime->period_size, + substream->runtime->rate); return 0; }
@@ -257,6 +265,7 @@ static int dummy_systimer_stop(struct snd_pcm_substream *substream) spin_lock(&dpcm->lock); del_timer(&dpcm->timer); spin_unlock(&dpcm->lock); + printk(KERN_DEBUG "*** STOP\n"); return 0; }