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->valid_setup);
assert(pcm->setup.xfer_mode == SND_PCM_XFER_INTERLEAVED); assert(pcm->setup.xfer_mode == SND_PCM_XFER_INTERLEAVED);
assert(!pcm->mmap_data); 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) 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->valid_setup);
assert(pcm->setup.xfer_mode == SND_PCM_XFER_NONINTERLEAVED); assert(pcm->setup.xfer_mode == SND_PCM_XFER_NONINTERLEAVED);
assert(!pcm->mmap_data); 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) 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->valid_setup);
assert(pcm->setup.xfer_mode == SND_PCM_XFER_INTERLEAVED); assert(pcm->setup.xfer_mode == SND_PCM_XFER_INTERLEAVED);
assert(!pcm->mmap_data); 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) 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->valid_setup);
assert(pcm->setup.xfer_mode == SND_PCM_XFER_NONINTERLEAVED); assert(pcm->setup.xfer_mode == SND_PCM_XFER_NONINTERLEAVED);
assert(!pcm->mmap_data); 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) 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; 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; snd_pcm_channel_area_t *a = pcm->mmap_areas;
char *buf = snd_pcm_channel_area_addr(a, offset); char *buf = snd_pcm_channel_area_addr(a, offset);
assert(pcm->setup.mmap_shape == SND_PCM_MMAP_INTERLEAVED); assert(pcm->setup.mmap_shape == SND_PCM_MMAP_INTERLEAVED);
err = snd_pcm_writei(pcm, buf, frames); err = _snd_pcm_writei(pcm, buf, size);
} else { } else {
size_t channels = pcm->setup.format.channels; size_t channels = pcm->setup.format.channels;
unsigned int c; 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]; snd_pcm_channel_area_t *a = &pcm->mmap_areas[c];
bufs[c] = snd_pcm_channel_area_addr(a, offset); 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) if (err < 0)
break; 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; snd_pcm_channel_area_t *a = pcm->mmap_areas;
char *buf = snd_pcm_channel_area_addr(a, offset); char *buf = snd_pcm_channel_area_addr(a, offset);
assert(pcm->setup.mmap_shape == SND_PCM_MMAP_INTERLEAVED); assert(pcm->setup.mmap_shape == SND_PCM_MMAP_INTERLEAVED);
err = snd_pcm_readi(pcm, buf, frames); err = _snd_pcm_readi(pcm, buf, size);
} else { } else {
size_t channels = pcm->setup.format.channels; size_t channels = pcm->setup.format.channels;
unsigned int c; 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]; snd_pcm_channel_area_t *a = &pcm->mmap_areas[c];
bufs[c] = snd_pcm_channel_area_addr(a, offset); 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) if (err < 0)
break; break;