]> git.alsa-project.org Git - alsa-lib.git/commitdiff
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 5d5b0771b9d51572d7f642e032c1a37787524aae..d93f33071728e083ee1a8022541f889a2b424aee 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 b9c32005619f3bad4490bcb6b1cd3c38385eb8a9..12b41c4d125c411cf62552b90760cd9cc1a058ba 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 a76f15acf86326f1e376ed449f7925df6b41bbfc..30f2380b3b352f6f3f1319278d7f1e92cf8d769a 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 64b4557ba4ab42e8a9b9541fb45c41c63c36bd5c..a65f136a7469f15da725e3db3bf7a6ee46d0ed3b 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 3f876088a1040eeee424008557e7b86c4ab650d2..eaf9414a22deee8ce37b2174a8ffd590c89f2d7a 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 7c26f5b4134b4773908d60c1af65a71badf1fc63..ca7da52075129c2e64f35fd0a6d3d5fb57b68b44 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 2d2b052a699066bf541c50e945b05b6d429d8da4..4bcd123eaad55a829923c22bccac253a5862809d 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 608478b5c235e9d3470efa7224c555a8a5a15096..4efeb7fb2828e3169e6f999b4aaa634d4cddd645 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 04ec48c2ba3e00ee5ddd42649ce5511f0318e349..5586753bf68a05da06a14d91726432a4b0b0df6b 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 3452a3b7eb37d79de7f98a3632fbad1340013ecc..74f2762bfbd377441bec4a24542de29ff19f2f81 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 deb58387a0738c02c4dc266bc5dcafa0f979e3c8..bfbf2891f61225299f81f9a746f130e4ff577ca7 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 03739238c7f32c2769015dce51d0973a6c2b283f..e0dd6d4f40fc593777f50ce56c062e52c626b03d 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 948e0f06989f4051827d61847d82adcfa2d965b9..c2a8973764260b216a20880182c41cca914180f1 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 39564a38517666113bbaf5df3504f8f446e61d0a..72a5134cee6e7a590621dbf8bb897e3d059e285e 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 ce3fc5ea50127b6fa4cdd22609386dd50725be34..7847f27f37397e345fd6c38f8b72f4ecf9b5c76e 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 e71102a8272bdda96eed6a5aae4d9e2cbe4e4e4a..53ba4430f20dd88165b44bec81d7f2e259d955c8 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 cb83165420c49379ade51b4bffb8aef083f10026..e36f193f0f60afeac1c45d81a3d5969ea9c7fbb1 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 be612dfc483f87083548394f45a8af790295ca2c..26a3dc6ea8326675b8a919be9530cf9ce6e1103d 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 2b136524f3af0b3b600caa7be49780cdfdb55f87..e7b8776909e6ec9171d22a8dd206198d0007fbcd 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,