OSDN Git Service

Add poll_descriptors and poll_descriptors_count callbacks
authorTakashi Iwai <tiwai@suse.de>
Wed, 18 May 2005 10:45:06 +0000 (10:45 +0000)
committerTakashi Iwai <tiwai@suse.de>
Wed, 18 May 2005 10:45:06 +0000 (10:45 +0000)
Added poll_descriptors and poll_descriptors_count callbacks for multiple
poll_fd's.

19 files changed:
src/pcm/pcm.c
src/pcm/pcm_adpcm.c
src/pcm/pcm_alaw.c
src/pcm/pcm_copy.c
src/pcm/pcm_file.c
src/pcm/pcm_generic.c
src/pcm/pcm_generic.h
src/pcm/pcm_hooks.c
src/pcm/pcm_iec958.c
src/pcm/pcm_ladspa.c
src/pcm/pcm_lfloat.c
src/pcm/pcm_linear.c
src/pcm/pcm_local.h
src/pcm/pcm_mulaw.c
src/pcm/pcm_multi.c
src/pcm/pcm_plug.c
src/pcm/pcm_rate.c
src/pcm/pcm_route.c
src/pcm/pcm_softvol.c

index 5d5b077..d93f330 100644 (file)
@@ -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)
index b9c3200..12b41c4 100644 (file)
@@ -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,
index a76f15a..30f2380 100644 (file)
@@ -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,
index 64b4557..a65f136 100644 (file)
@@ -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,
index 3f87608..eaf9414 100644 (file)
@@ -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,
index 7c26f5b..ca7da52 100644 (file)
@@ -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;
index 2d2b052..4bcd123 100644 (file)
@@ -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);
index 608478b..4efeb7f 100644 (file)
@@ -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,
 };
index 04ec48c..5586753 100644 (file)
@@ -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,
index 3452a3b..74f2762 100644 (file)
@@ -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,
index deb5838..bfbf289 100644 (file)
@@ -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,
index 0373923..e0dd6d4 100644 (file)
@@ -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,
index 948e0f0..c2a8973 100644 (file)
@@ -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);
index 39564a3..72a5134 100644 (file)
@@ -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,
index ce3fc5e..7847f27 100644 (file)
@@ -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,
 };
index e71102a..53ba443 100644 (file)
@@ -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,
index cb83165..e36f193 100644 (file)
@@ -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,
index be612df..26a3dc6 100644 (file)
@@ -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,
index 2b13652..e7b8776 100644 (file)
@@ -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,