summaryrefslogtreecommitdiff
path: root/src/pcm/pcm_dmix.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pcm/pcm_dmix.c')
-rw-r--r--src/pcm/pcm_dmix.c16
1 files changed, 3 insertions, 13 deletions
diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c
index 58e4975d..b26a5c79 100644
--- a/src/pcm/pcm_dmix.c
+++ b/src/pcm/pcm_dmix.c
@@ -450,9 +450,10 @@ static snd_pcm_state_t snd_pcm_dmix_state(snd_pcm_t *pcm)
snd_pcm_state_t state;
state = snd_pcm_state(dmix->spcm);
switch (state) {
+ case SND_PCM_STATE_XRUN:
case SND_PCM_STATE_SUSPENDED:
- return state;
case SND_PCM_STATE_DISCONNECTED:
+ dmix->state = state;
return state;
default:
break;
@@ -533,17 +534,6 @@ static int snd_pcm_dmix_hwsync(snd_pcm_t *pcm)
}
}
-static int snd_pcm_dmix_prepare(snd_pcm_t *pcm)
-{
- snd_pcm_direct_t *dmix = pcm->private_data;
-
- snd_pcm_direct_check_interleave(dmix, pcm);
- dmix->state = SND_PCM_STATE_PREPARED;
- dmix->appl_ptr = dmix->last_appl_ptr = 0;
- dmix->hw_ptr = 0;
- return snd_pcm_direct_set_timer_params(dmix);
-}
-
static void reset_slave_ptr(snd_pcm_t *pcm, snd_pcm_direct_t *dmix)
{
dmix->slave_appl_ptr = dmix->slave_hw_ptr = *dmix->spcm->hw.ptr;
@@ -920,7 +910,7 @@ static const snd_pcm_fast_ops_t snd_pcm_dmix_fast_ops = {
.state = snd_pcm_dmix_state,
.hwsync = snd_pcm_dmix_hwsync,
.delay = snd_pcm_dmix_delay,
- .prepare = snd_pcm_dmix_prepare,
+ .prepare = snd_pcm_direct_prepare,
.reset = snd_pcm_dmix_reset,
.start = snd_pcm_dmix_start,
.drop = snd_pcm_dmix_drop,