mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-28 05:40:23 -04:00
Add poll_descriptors and poll_descriptors_count callbacks
Added poll_descriptors and poll_descriptors_count callbacks for multiple poll_fd's.
This commit is contained in:
parent
cf4f4bc9c4
commit
842b573424
19 changed files with 74 additions and 1 deletions
|
|
@ -1273,7 +1273,9 @@ int snd_pcm_unlink(snd_pcm_t *pcm)
|
|||
int snd_pcm_poll_descriptors_count(snd_pcm_t *pcm)
|
||||
{
|
||||
assert(pcm);
|
||||
return 1;
|
||||
if (pcm->ops->poll_descriptors_count)
|
||||
return pcm->ops->poll_descriptors_count(pcm->op_arg);
|
||||
return pcm->poll_fd_count;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1306,6 +1308,8 @@ int snd_pcm_poll_descriptors(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int s
|
|||
int err;
|
||||
|
||||
assert(pcm && pfds);
|
||||
if (pcm->ops->poll_descriptors)
|
||||
return pcm->ops->poll_descriptors(pcm->op_arg, pfds, space);
|
||||
if (pcm->fast_ops->poll_ask) {
|
||||
err = pcm->fast_ops->poll_ask(pcm->fast_op_arg);
|
||||
if (err < 0)
|
||||
|
|
|
|||
|
|
@ -529,6 +529,8 @@ static snd_pcm_ops_t snd_pcm_adpcm_ops = {
|
|||
.dump = snd_pcm_adpcm_dump,
|
||||
.nonblock = snd_pcm_generic_nonblock,
|
||||
.async = snd_pcm_generic_async,
|
||||
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
|
||||
.poll_descriptors = snd_pcm_generic_poll_descriptors,
|
||||
.poll_revents = snd_pcm_generic_poll_revents,
|
||||
.mmap = snd_pcm_generic_mmap,
|
||||
.munmap = snd_pcm_generic_munmap,
|
||||
|
|
|
|||
|
|
@ -400,6 +400,8 @@ static snd_pcm_ops_t snd_pcm_alaw_ops = {
|
|||
.dump = snd_pcm_alaw_dump,
|
||||
.nonblock = snd_pcm_generic_nonblock,
|
||||
.async = snd_pcm_generic_async,
|
||||
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
|
||||
.poll_descriptors = snd_pcm_generic_poll_descriptors,
|
||||
.poll_revents = snd_pcm_generic_poll_revents,
|
||||
.mmap = snd_pcm_generic_mmap,
|
||||
.munmap = snd_pcm_generic_munmap,
|
||||
|
|
|
|||
|
|
@ -163,6 +163,8 @@ static snd_pcm_ops_t snd_pcm_copy_ops = {
|
|||
.dump = snd_pcm_copy_dump,
|
||||
.nonblock = snd_pcm_generic_nonblock,
|
||||
.async = snd_pcm_generic_async,
|
||||
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
|
||||
.poll_descriptors = snd_pcm_generic_poll_descriptors,
|
||||
.poll_revents = snd_pcm_generic_poll_revents,
|
||||
.mmap = snd_pcm_generic_mmap,
|
||||
.munmap = snd_pcm_generic_munmap,
|
||||
|
|
|
|||
|
|
@ -347,6 +347,8 @@ static snd_pcm_ops_t snd_pcm_file_ops = {
|
|||
.dump = snd_pcm_file_dump,
|
||||
.nonblock = snd_pcm_generic_nonblock,
|
||||
.async = snd_pcm_generic_async,
|
||||
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
|
||||
.poll_descriptors = snd_pcm_generic_poll_descriptors,
|
||||
.poll_revents = snd_pcm_generic_poll_revents,
|
||||
.mmap = snd_pcm_file_mmap,
|
||||
.munmap = snd_pcm_file_munmap,
|
||||
|
|
|
|||
|
|
@ -56,6 +56,18 @@ int snd_pcm_generic_async(snd_pcm_t *pcm, int sig, pid_t pid)
|
|||
return snd_pcm_async(generic->slave, sig, pid);
|
||||
}
|
||||
|
||||
int snd_pcm_generic_poll_descriptors_count(snd_pcm_t *pcm)
|
||||
{
|
||||
snd_pcm_generic_t *generic = pcm->private_data;
|
||||
return snd_pcm_poll_descriptors_count(generic->slave);
|
||||
}
|
||||
|
||||
int snd_pcm_generic_poll_descriptors(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int space)
|
||||
{
|
||||
snd_pcm_generic_t *generic = pcm->private_data;
|
||||
return snd_pcm_poll_descriptors(generic->slave, pfds, space);
|
||||
}
|
||||
|
||||
int snd_pcm_generic_poll_revents(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int nfds, unsigned short *revents)
|
||||
{
|
||||
snd_pcm_generic_t *generic = pcm->private_data;
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@ typedef struct {
|
|||
int snd_pcm_generic_close(snd_pcm_t *pcm);
|
||||
int snd_pcm_generic_nonblock(snd_pcm_t *pcm, int nonblock);
|
||||
int snd_pcm_generic_async(snd_pcm_t *pcm, int sig, pid_t pid);
|
||||
int snd_pcm_generic_poll_descriptors_count(snd_pcm_t *pcm);
|
||||
int snd_pcm_generic_poll_descriptors(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int space);
|
||||
int snd_pcm_generic_poll_revents(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int nfds, unsigned short *revents);
|
||||
int snd_pcm_generic_info(snd_pcm_t *pcm, snd_pcm_info_t * info);
|
||||
int snd_pcm_generic_hw_free(snd_pcm_t *pcm);
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@ static snd_pcm_ops_t snd_pcm_hooks_ops = {
|
|||
.dump = snd_pcm_hooks_dump,
|
||||
.nonblock = snd_pcm_generic_nonblock,
|
||||
.async = snd_pcm_generic_async,
|
||||
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
|
||||
.poll_descriptors = snd_pcm_generic_poll_descriptors,
|
||||
.poll_revents = snd_pcm_generic_poll_revents,
|
||||
.mmap = snd_pcm_generic_mmap,
|
||||
.munmap = snd_pcm_generic_munmap,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -423,6 +423,8 @@ static snd_pcm_ops_t snd_pcm_iec958_ops = {
|
|||
.dump = snd_pcm_iec958_dump,
|
||||
.nonblock = snd_pcm_generic_nonblock,
|
||||
.async = snd_pcm_generic_async,
|
||||
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
|
||||
.poll_descriptors = snd_pcm_generic_poll_descriptors,
|
||||
.poll_revents = snd_pcm_generic_poll_revents,
|
||||
.mmap = snd_pcm_generic_mmap,
|
||||
.munmap = snd_pcm_generic_munmap,
|
||||
|
|
|
|||
|
|
@ -707,6 +707,8 @@ static snd_pcm_ops_t snd_pcm_ladspa_ops = {
|
|||
.dump = snd_pcm_ladspa_dump,
|
||||
.nonblock = snd_pcm_generic_nonblock,
|
||||
.async = snd_pcm_generic_async,
|
||||
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
|
||||
.poll_descriptors = snd_pcm_generic_poll_descriptors,
|
||||
.poll_revents = snd_pcm_generic_poll_revents,
|
||||
.mmap = snd_pcm_generic_mmap,
|
||||
.munmap = snd_pcm_generic_munmap,
|
||||
|
|
|
|||
|
|
@ -359,6 +359,8 @@ static snd_pcm_ops_t snd_pcm_lfloat_ops = {
|
|||
.dump = snd_pcm_lfloat_dump,
|
||||
.nonblock = snd_pcm_generic_nonblock,
|
||||
.async = snd_pcm_generic_async,
|
||||
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
|
||||
.poll_descriptors = snd_pcm_generic_poll_descriptors,
|
||||
.poll_revents = snd_pcm_generic_poll_revents,
|
||||
.mmap = snd_pcm_generic_mmap,
|
||||
.munmap = snd_pcm_generic_munmap,
|
||||
|
|
|
|||
|
|
@ -416,6 +416,8 @@ static snd_pcm_ops_t snd_pcm_linear_ops = {
|
|||
.dump = snd_pcm_linear_dump,
|
||||
.nonblock = snd_pcm_generic_nonblock,
|
||||
.async = snd_pcm_generic_async,
|
||||
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
|
||||
.poll_descriptors = snd_pcm_generic_poll_descriptors,
|
||||
.poll_revents = snd_pcm_generic_poll_revents,
|
||||
.mmap = snd_pcm_generic_mmap,
|
||||
.munmap = snd_pcm_generic_munmap,
|
||||
|
|
|
|||
|
|
@ -132,6 +132,8 @@ typedef struct {
|
|||
int (*close)(snd_pcm_t *pcm);
|
||||
int (*nonblock)(snd_pcm_t *pcm, int nonblock);
|
||||
int (*async)(snd_pcm_t *pcm, int sig, pid_t pid);
|
||||
int (*poll_descriptors_count)(snd_pcm_t *pcm);
|
||||
int (*poll_descriptors)(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int space);
|
||||
int (*poll_revents)(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int nfds, unsigned short *revents);
|
||||
int (*info)(snd_pcm_t *pcm, snd_pcm_info_t *info);
|
||||
int (*hw_refine)(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
|
||||
|
|
|
|||
|
|
@ -415,6 +415,8 @@ static snd_pcm_ops_t snd_pcm_mulaw_ops = {
|
|||
.dump = snd_pcm_mulaw_dump,
|
||||
.nonblock = snd_pcm_generic_nonblock,
|
||||
.async = snd_pcm_generic_async,
|
||||
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
|
||||
.poll_descriptors = snd_pcm_generic_poll_descriptors,
|
||||
.poll_revents = snd_pcm_generic_poll_revents,
|
||||
.mmap = snd_pcm_generic_mmap,
|
||||
.munmap = snd_pcm_generic_munmap,
|
||||
|
|
|
|||
|
|
@ -95,6 +95,27 @@ static int snd_pcm_multi_async(snd_pcm_t *pcm, int sig, pid_t pid)
|
|||
return snd_pcm_async(slave_0, sig, pid);
|
||||
}
|
||||
|
||||
static int snd_pcm_multi_poll_descriptors_count(snd_pcm_t *pcm)
|
||||
{
|
||||
snd_pcm_multi_t *multi = pcm->private_data;
|
||||
snd_pcm_t *slave_0 = multi->slaves[multi->master_slave].pcm;
|
||||
return snd_pcm_poll_descriptors_count(slave_0);
|
||||
}
|
||||
|
||||
static int snd_pcm_multi_poll_descriptors(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int space)
|
||||
{
|
||||
snd_pcm_multi_t *multi = pcm->private_data;
|
||||
snd_pcm_t *slave_0 = multi->slaves[multi->master_slave].pcm;
|
||||
return snd_pcm_poll_descriptors(slave_0, pfds, space);
|
||||
}
|
||||
|
||||
static int snd_pcm_multi_poll_revents(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int nfds, unsigned short *revents)
|
||||
{
|
||||
snd_pcm_multi_t *multi = pcm->private_data;
|
||||
snd_pcm_t *slave_0 = multi->slaves[multi->master_slave].pcm;
|
||||
return snd_pcm_poll_descriptors_revents(slave_0, pfds, nfds, revents);
|
||||
}
|
||||
|
||||
static int snd_pcm_multi_info(snd_pcm_t *pcm, snd_pcm_info_t *info)
|
||||
{
|
||||
snd_pcm_multi_t *multi = pcm->private_data;
|
||||
|
|
@ -687,6 +708,9 @@ static snd_pcm_ops_t snd_pcm_multi_ops = {
|
|||
.dump = snd_pcm_multi_dump,
|
||||
.nonblock = snd_pcm_multi_nonblock,
|
||||
.async = snd_pcm_multi_async,
|
||||
.poll_descriptors_count = snd_pcm_multi_poll_descriptors_count,
|
||||
.poll_descriptors = snd_pcm_multi_poll_descriptors,
|
||||
.poll_revents = snd_pcm_multi_poll_revents,
|
||||
.mmap = snd_pcm_multi_mmap,
|
||||
.munmap = snd_pcm_multi_munmap,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -953,6 +953,8 @@ static snd_pcm_ops_t snd_pcm_plug_ops = {
|
|||
.dump = snd_pcm_plug_dump,
|
||||
.nonblock = snd_pcm_generic_nonblock,
|
||||
.async = snd_pcm_generic_async,
|
||||
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
|
||||
.poll_descriptors = snd_pcm_generic_poll_descriptors,
|
||||
.poll_revents = snd_pcm_generic_poll_revents,
|
||||
.mmap = snd_pcm_plug_mmap,
|
||||
.munmap = snd_pcm_plug_munmap,
|
||||
|
|
|
|||
|
|
@ -1377,6 +1377,8 @@ static snd_pcm_ops_t snd_pcm_rate_ops = {
|
|||
.dump = snd_pcm_rate_dump,
|
||||
.nonblock = snd_pcm_generic_nonblock,
|
||||
.async = snd_pcm_generic_async,
|
||||
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
|
||||
.poll_descriptors = snd_pcm_generic_poll_descriptors,
|
||||
.poll_revents = snd_pcm_generic_poll_revents,
|
||||
.mmap = snd_pcm_generic_mmap,
|
||||
.munmap = snd_pcm_generic_munmap,
|
||||
|
|
|
|||
|
|
@ -757,6 +757,8 @@ static snd_pcm_ops_t snd_pcm_route_ops = {
|
|||
.dump = snd_pcm_route_dump,
|
||||
.nonblock = snd_pcm_generic_nonblock,
|
||||
.async = snd_pcm_generic_async,
|
||||
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
|
||||
.poll_descriptors = snd_pcm_generic_poll_descriptors,
|
||||
.poll_revents = snd_pcm_generic_poll_revents,
|
||||
.mmap = snd_pcm_generic_mmap,
|
||||
.munmap = snd_pcm_generic_munmap,
|
||||
|
|
|
|||
|
|
@ -583,6 +583,8 @@ static snd_pcm_ops_t snd_pcm_softvol_ops = {
|
|||
.dump = snd_pcm_softvol_dump,
|
||||
.nonblock = snd_pcm_generic_nonblock,
|
||||
.async = snd_pcm_generic_async,
|
||||
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
|
||||
.poll_descriptors = snd_pcm_generic_poll_descriptors,
|
||||
.poll_revents = snd_pcm_generic_poll_revents,
|
||||
.mmap = snd_pcm_generic_mmap,
|
||||
.munmap = snd_pcm_generic_munmap,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue