summaryrefslogtreecommitdiffstats
path: root/sound/drivers
diff options
context:
space:
mode:
authorAhmet İnan <ainan at>2008-02-28 12:46:32 +0100
committerTakashi Iwai <tiwai@suse.de>2008-04-24 12:00:17 +0200
commit470f23b873679b045908551302fec6b1edf05a5a (patch)
tree145339e5b24d3436d850b07c1503c5cb1e95afba /sound/drivers
parentbed515b0dfdcf8f440c7e6c5bad8ce3eb96fb625 (diff)
downloadop-kernel-dev-470f23b873679b045908551302fec6b1edf05a5a.zip
op-kernel-dev-470f23b873679b045908551302fec6b1edf05a5a.tar.gz
[ALSA] snd-dummy - better realtime app support
when the time interval for a period is smaller than kernel HZ, then snd-aloop and snd-dummy cannot call snd_pcm_period_elapsed as fast enough annymore. this happens for example with games. but the app still needs to see, that the buffer actually did go further, which is provided by these patches. Signed-off-by: Ahmet İnan <ainan <at> mathematik.uni-freiburg.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/drivers')
-rw-r--r--sound/drivers/dummy.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sound/drivers/dummy.c b/sound/drivers/dummy.c
index f67f658..83ac498 100644
--- a/sound/drivers/dummy.c
+++ b/sound/drivers/dummy.c
@@ -259,10 +259,10 @@ static void snd_card_dummy_pcm_timer_function(unsigned long data)
dpcm->timer.expires = 1 + jiffies;
add_timer(&dpcm->timer);
dpcm->pcm_irq_pos += dpcm->pcm_bps;
+ dpcm->pcm_buf_pos += dpcm->pcm_bps;
+ dpcm->pcm_buf_pos %= dpcm->pcm_buffer_size * dpcm->pcm_hz;
if (dpcm->pcm_irq_pos >= dpcm->pcm_period_size * dpcm->pcm_hz) {
dpcm->pcm_irq_pos %= dpcm->pcm_period_size * dpcm->pcm_hz;
- dpcm->pcm_buf_pos += dpcm->pcm_period_size;
- dpcm->pcm_buf_pos %= dpcm->pcm_buffer_size;
spin_unlock_irqrestore(&dpcm->lock, flags);
snd_pcm_period_elapsed(dpcm->substream);
} else
@@ -274,7 +274,7 @@ static snd_pcm_uframes_t snd_card_dummy_pcm_pointer(struct snd_pcm_substream *su
struct snd_pcm_runtime *runtime = substream->runtime;
struct snd_dummy_pcm *dpcm = runtime->private_data;
- return bytes_to_frames(runtime, dpcm->pcm_buf_pos);
+ return bytes_to_frames(runtime, dpcm->pcm_buf_pos / dpcm->pcm_hz);
}
static struct snd_pcm_hardware snd_card_dummy_playback =
OpenPOWER on IntegriCloud