Fixed mmap emulation

This commit is contained in:
Abramo Bagnara 2000-09-29 13:50:42 +00:00
parent 81245f78d4
commit 7088f19233
3 changed files with 28 additions and 8 deletions

View file

@ -219,7 +219,7 @@ ssize_t snd_pcm_writei(snd_pcm_t *pcm, const void *buffer, size_t size)
assert(pcm->valid_setup);
assert(pcm->setup.xfer_mode == SND_PCM_XFER_INTERLEAVED);
assert(!pcm->mmap_data);
return pcm->fast_ops->writei(pcm->fast_op_arg, buffer, size);
return _snd_pcm_writei(pcm, buffer, size);
}
ssize_t snd_pcm_writen(snd_pcm_t *pcm, void **bufs, size_t size)
@ -229,7 +229,7 @@ ssize_t snd_pcm_writen(snd_pcm_t *pcm, void **bufs, size_t size)
assert(pcm->valid_setup);
assert(pcm->setup.xfer_mode == SND_PCM_XFER_NONINTERLEAVED);
assert(!pcm->mmap_data);
return pcm->fast_ops->writen(pcm->fast_op_arg, bufs, size);
return _snd_pcm_writen(pcm, bufs, size);
}
ssize_t snd_pcm_readi(snd_pcm_t *pcm, void *buffer, size_t size)
@ -239,7 +239,7 @@ ssize_t snd_pcm_readi(snd_pcm_t *pcm, void *buffer, size_t size)
assert(pcm->valid_setup);
assert(pcm->setup.xfer_mode == SND_PCM_XFER_INTERLEAVED);
assert(!pcm->mmap_data);
return pcm->fast_ops->readi(pcm->fast_op_arg, buffer, size);
return _snd_pcm_readi(pcm, buffer, size);
}
ssize_t snd_pcm_readn(snd_pcm_t *pcm, void **bufs, size_t size)
@ -249,7 +249,7 @@ ssize_t snd_pcm_readn(snd_pcm_t *pcm, void **bufs, size_t size)
assert(pcm->valid_setup);
assert(pcm->setup.xfer_mode == SND_PCM_XFER_NONINTERLEAVED);
assert(!pcm->mmap_data);
return pcm->fast_ops->readn(pcm->fast_op_arg, bufs, size);
return _snd_pcm_readn(pcm, bufs, size);
}
ssize_t snd_pcm_writev(snd_pcm_t *pcm, const struct iovec *vector, int count)

View file

@ -149,3 +149,23 @@ static inline size_t snd_pcm_channel_area_step(snd_pcm_channel_area_t *area)
return area->step / 8;
}
static inline ssize_t _snd_pcm_writei(snd_pcm_t *pcm, const void *buffer, size_t size)
{
return pcm->fast_ops->writei(pcm->fast_op_arg, buffer, size);
}
static inline ssize_t _snd_pcm_writen(snd_pcm_t *pcm, void **bufs, size_t size)
{
return pcm->fast_ops->writen(pcm->fast_op_arg, bufs, size);
}
static inline ssize_t _snd_pcm_readi(snd_pcm_t *pcm, void *buffer, size_t size)
{
return pcm->fast_ops->readi(pcm->fast_op_arg, buffer, size);
}
static inline ssize_t _snd_pcm_readn(snd_pcm_t *pcm, void **bufs, size_t size)
{
return pcm->fast_ops->readn(pcm->fast_op_arg, bufs, size);
}

View file

@ -436,7 +436,7 @@ ssize_t snd_pcm_write_mmap(snd_pcm_t *pcm, size_t size)
snd_pcm_channel_area_t *a = pcm->mmap_areas;
char *buf = snd_pcm_channel_area_addr(a, offset);
assert(pcm->setup.mmap_shape == SND_PCM_MMAP_INTERLEAVED);
err = snd_pcm_writei(pcm, buf, frames);
err = _snd_pcm_writei(pcm, buf, size);
} else {
size_t channels = pcm->setup.format.channels;
unsigned int c;
@ -446,7 +446,7 @@ ssize_t snd_pcm_write_mmap(snd_pcm_t *pcm, size_t size)
snd_pcm_channel_area_t *a = &pcm->mmap_areas[c];
bufs[c] = snd_pcm_channel_area_addr(a, offset);
}
err = snd_pcm_writen(pcm, bufs, frames);
err = _snd_pcm_writen(pcm, bufs, size);
}
if (err < 0)
break;
@ -472,7 +472,7 @@ ssize_t snd_pcm_read_mmap(snd_pcm_t *pcm, size_t size)
snd_pcm_channel_area_t *a = pcm->mmap_areas;
char *buf = snd_pcm_channel_area_addr(a, offset);
assert(pcm->setup.mmap_shape == SND_PCM_MMAP_INTERLEAVED);
err = snd_pcm_readi(pcm, buf, frames);
err = _snd_pcm_readi(pcm, buf, size);
} else {
size_t channels = pcm->setup.format.channels;
unsigned int c;
@ -482,7 +482,7 @@ ssize_t snd_pcm_read_mmap(snd_pcm_t *pcm, size_t size)
snd_pcm_channel_area_t *a = &pcm->mmap_areas[c];
bufs[c] = snd_pcm_channel_area_addr(a, offset);
}
err = snd_pcm_readn(pcm, bufs, frames);
err = _snd_pcm_readn(pcm->fast_op_arg, bufs, size);
}
if (err < 0)
break;