mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
added readv/writev support
This commit is contained in:
parent
c808ac0806
commit
fc69109d69
2 changed files with 48 additions and 0 deletions
|
|
@ -42,6 +42,8 @@ int snd_pcm_playback_pause(snd_pcm_t *handle, int enable);
|
|||
ssize_t snd_pcm_transfer_size(snd_pcm_t *handle, int channel);
|
||||
ssize_t snd_pcm_write(snd_pcm_t *handle, const void *buffer, size_t size);
|
||||
ssize_t snd_pcm_read(snd_pcm_t *handle, void *buffer, size_t size);
|
||||
ssize_t snd_pcm_writev(snd_pcm_t *pcm, const struct iovec *vector, int count);
|
||||
ssize_t snd_pcm_readv(snd_pcm_t *pcm, const struct iovec *vector, int count);
|
||||
int snd_pcm_mmap(snd_pcm_t *handle, int channel, snd_pcm_mmap_control_t **control, void **buffer);
|
||||
int snd_pcm_munmap(snd_pcm_t *handle, int channel);
|
||||
|
||||
|
|
|
|||
|
|
@ -448,6 +448,29 @@ ssize_t snd_pcm_write(snd_pcm_t *pcm, const void *buffer, size_t size)
|
|||
return result;
|
||||
}
|
||||
|
||||
ssize_t snd_pcm_writev(snd_pcm_t *pcm, const struct iovec *vector, int count)
|
||||
{
|
||||
ssize_t result;
|
||||
|
||||
if (!pcm || (!vector && count > 0) || count < 0)
|
||||
return -EINVAL;
|
||||
if (pcm->fd[SND_PCM_CHANNEL_PLAYBACK] < 0)
|
||||
return -EINVAL;
|
||||
#if 0
|
||||
result = writev(pcm->fd[SND_PCM_CHANNEL_PLAYBACK], vector, count);
|
||||
#else
|
||||
{
|
||||
snd_v_args_t args;
|
||||
args.vector = vector;
|
||||
args.count = count;
|
||||
result = ioctl(pcm->fd[SND_PCM_CHANNEL_PLAYBACK], SND_IOCTL_WRITEV, &args);
|
||||
}
|
||||
#endif
|
||||
if (result < 0)
|
||||
return -errno;
|
||||
return result;
|
||||
}
|
||||
|
||||
ssize_t snd_pcm_read(snd_pcm_t *pcm, void *buffer, size_t size)
|
||||
{
|
||||
ssize_t result;
|
||||
|
|
@ -462,6 +485,29 @@ ssize_t snd_pcm_read(snd_pcm_t *pcm, void *buffer, size_t size)
|
|||
return result;
|
||||
}
|
||||
|
||||
ssize_t snd_pcm_readv(snd_pcm_t *pcm, const struct iovec *vector, int count)
|
||||
{
|
||||
ssize_t result;
|
||||
|
||||
if (!pcm || (!vector && count > 0) || count < 0)
|
||||
return -EINVAL;
|
||||
if (pcm->fd[SND_PCM_CHANNEL_CAPTURE] < 0)
|
||||
return -EINVAL;
|
||||
#if 0
|
||||
result = readv(pcm->fd[SND_PCM_CHANNEL_CAPTURE], vector, count);
|
||||
#else
|
||||
{
|
||||
snd_v_args_t args;
|
||||
args.vector = vector;
|
||||
args.count = count;
|
||||
result = ioctl(pcm->fd[SND_PCM_CHANNEL_CAPTURE], SND_IOCTL_READV, &args);
|
||||
}
|
||||
#endif
|
||||
if (result < 0)
|
||||
return -errno;
|
||||
return result;
|
||||
}
|
||||
|
||||
int snd_pcm_mmap(snd_pcm_t *pcm, int channel, snd_pcm_mmap_control_t **control, void **buffer)
|
||||
{
|
||||
snd_pcm_channel_info_t info;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue