summaryrefslogtreecommitdiffstats
path: root/polyp
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2004-08-02 19:45:02 +0000
committerLennart Poettering <lennart@poettering.net>2004-08-02 19:45:02 +0000
commite10b918009446186c80584273d2e3f5e84a6670b (patch)
tree4cf88c0b8dcbfd200b02e41f8bf0c2e493487179 /polyp
parent8705af792b0c95ec94822b1727addb54389db674 (diff)
add support for querying sample ist with esound protocol
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@101 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'polyp')
-rwxr-xr-xpolyp/polypaudio.pa13
-rw-r--r--polyp/protocol-esound.c68
-rw-r--r--polyp/scache.c2
-rw-r--r--polyp/scache.h1
4 files changed, 71 insertions, 13 deletions
diff --git a/polyp/polypaudio.pa b/polyp/polypaudio.pa
index 177707ba..79ca83ea 100755
--- a/polyp/polypaudio.pa
+++ b/polyp/polypaudio.pa
@@ -19,9 +19,9 @@
# Load audio drivers
-load module-alsa-sink
-load module-alsa-source device=plughw:1,0
-#load module-oss device="/dev/dsp"
+#load module-alsa-sink
+#load module-alsa-source device=plughw:1,0
+load module-oss device="/dev/dsp"
#load module-oss-mmap device="/dev/dsp"
# Load several protocols
@@ -30,12 +30,15 @@ load module-simple-protocol-tcp
load module-native-protocol-unix
load module-cli-protocol-unix
+# Load X11 bell module
+load module-x11-bell
+
# Load the CLI module
load module-cli
.nofail
# Make some devices default
-sink_default alsa_output
-source_default alsa_input
+sink_default oss_output
+source_default oss_input
diff --git a/polyp/protocol-esound.c b/polyp/protocol-esound.c
index 7a141d3a..5db0442f 100644
--- a/polyp/protocol-esound.c
+++ b/polyp/protocol-esound.c
@@ -53,7 +53,7 @@
#define MAX_CACHE_SAMPLE_SIZE (1024000)
-#define SCACHE_PREFIX "esound~"
+#define SCACHE_PREFIX "esound."
/* This is heavily based on esound's code */
@@ -299,8 +299,10 @@ static int esd_proto_stream_play(struct connection *c, esd_proto_t request, cons
if (!pa_sample_spec_valid(&ss))
return -1;
- if (!(sink = get_output_sink(c->protocol)))
+ if (!(sink = get_output_sink(c->protocol))) {
+ fprintf(stderr, __FILE__": No output sink\n");
return -1;
+ }
strncpy(name, data + sizeof(int)*2, sizeof(name));
name[sizeof(name)-1] = 0;
@@ -438,6 +440,7 @@ static int esd_proto_all_info(struct connection *c, esd_proto_t request, const v
size_t t, k, s;
struct connection *conn;
size_t index = PA_IDXSET_INVALID;
+ unsigned nsamples;
assert(c && data && length == sizeof(int));
if (esd_proto_server_info(c, request, data, length) < 0)
@@ -445,7 +448,8 @@ static int esd_proto_all_info(struct connection *c, esd_proto_t request, const v
k = sizeof(int)*5+ESD_NAME_MAX;
s = sizeof(int)*6+ESD_NAME_MAX;
- response = connection_write(c, (t = s+k*(c->protocol->n_player+1)));
+ nsamples = c->protocol->core->scache_idxset ? pa_idxset_ncontents(c->protocol->core->scache_idxset) : 0;
+ response = connection_write(c, (t = s*(nsamples+1) + k*(c->protocol->n_player+1)));
assert(k);
for (conn = pa_idxset_first(c->protocol->connections, &index); conn; conn = pa_idxset_next(c->protocol->connections, &index)) {
@@ -455,7 +459,7 @@ static int esd_proto_all_info(struct connection *c, esd_proto_t request, const v
continue;
assert(t >= s+k+k);
-
+
if (conn->sink_input) {
rate = conn->sink_input->sample_spec.rate;
volume = (conn->sink_input->volume*0xFF)/0x100;
@@ -463,7 +467,7 @@ static int esd_proto_all_info(struct connection *c, esd_proto_t request, const v
}
/* id */
- *((int*) response) = maybe_swap_endian_32(c->swap_byte_order, (int) conn->index);
+ *((int*) response) = maybe_swap_endian_32(c->swap_byte_order, (int) (conn->index+1));
response += sizeof(int);
/* name */
@@ -490,8 +494,56 @@ static int esd_proto_all_info(struct connection *c, esd_proto_t request, const v
t-= k;
}
- assert(t == s+k);
- memset(response, 0, t);
+ assert(t == s*(nsamples+1)+k);
+ memset(response, 0, k);
+ response += k;
+ t -= k;
+
+ if (nsamples) {
+ struct pa_scache_entry *ce;
+
+ index = PA_IDXSET_INVALID;
+ for (ce = pa_idxset_first(c->protocol->core->scache_idxset, &index); ce; ce = pa_idxset_next(c->protocol->core->scache_idxset, &index)) {
+ assert(t >= s*2);
+
+ /* id */
+ *((int*) response) = maybe_swap_endian_32(c->swap_byte_order, (int) (ce->index+1));
+ response += sizeof(int);
+
+ /* name */
+ if (strncmp(ce->name, SCACHE_PREFIX, sizeof(SCACHE_PREFIX)-1) == 0)
+ strncpy(response, ce->name+sizeof(SCACHE_PREFIX)-1, ESD_NAME_MAX);
+ else
+ snprintf(response, ESD_NAME_MAX, "native.%s", ce->name);
+ response += ESD_NAME_MAX;
+
+ /* rate */
+ *((int*) response) = maybe_swap_endian_32(c->swap_byte_order, ce->sample_spec.rate);
+ response += sizeof(int);
+
+ /* left */
+ *((int*) response) = maybe_swap_endian_32(c->swap_byte_order, (ce->volume*0xFF)/0x100);
+ response += sizeof(int);
+
+ /*right*/
+ *((int*) response) = maybe_swap_endian_32(c->swap_byte_order, (ce->volume*0xFF)/0x100);
+ response += sizeof(int);
+
+ /*format*/
+ *((int*) response) = maybe_swap_endian_32(c->swap_byte_order, format_native2esd(&ce->sample_spec));
+ response += sizeof(int);
+
+ /*length*/
+ *((int*) response) = maybe_swap_endian_32(c->swap_byte_order, (int) ce->memchunk.length);
+ response += sizeof(int);
+
+ t -= s;
+ }
+ }
+
+ assert(t == s);
+ memset(response, 0, s);
+
return 0;
}
@@ -501,7 +553,7 @@ static int esd_proto_stream_pan(struct connection *c, esd_proto_t request, const
struct connection *conn;
assert(c && data && length == sizeof(int)*3);
- index = (uint32_t) maybe_swap_endian_32(c->swap_byte_order, *(int*)data);
+ index = (uint32_t) maybe_swap_endian_32(c->swap_byte_order, *(int*)data)-1;
volume = (uint32_t) maybe_swap_endian_32(c->swap_byte_order, *((int*)data + 1));
volume = (volume*0x100)/0xFF;
diff --git a/polyp/scache.c b/polyp/scache.c
index c1505046..f1f7ec5a 100644
--- a/polyp/scache.c
+++ b/polyp/scache.c
@@ -32,6 +32,8 @@ void pa_scache_add_item(struct pa_core *c, const char *name, struct pa_sample_sp
assert(e->name);
}
+ e->volume = 0x100;
+
if (ss)
e->sample_spec = *ss;
else
diff --git a/polyp/scache.h b/polyp/scache.h
index 73759b81..a1454cea 100644
--- a/polyp/scache.h
+++ b/polyp/scache.h
@@ -8,6 +8,7 @@
struct pa_scache_entry {
uint32_t index;
char *name;
+ uint32_t volume;
struct pa_sample_spec sample_spec;
struct pa_memchunk memchunk;
};