summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-06-14 17:01:01 +0000
committerLennart Poettering <lennart@poettering.net>2007-06-14 17:01:01 +0000
commit1b99fd2fc4c80ab581b08e1fb03ed8543dc763ec (patch)
tree6ade54a6e2a18ccb05bc6d600f4a728fe49cd19d /src
parent111dcd5e34434324adafd9f43c656592f3a02d60 (diff)
Move a few things between the threads
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1476 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'src')
-rw-r--r--src/pulsecore/protocol-simple.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/pulsecore/protocol-simple.c b/src/pulsecore/protocol-simple.c
index 67741bde..288c1c03 100644
--- a/src/pulsecore/protocol-simple.c
+++ b/src/pulsecore/protocol-simple.c
@@ -88,6 +88,7 @@ struct pa_protocol_simple {
enum {
SINK_INPUT_MESSAGE_POST_DATA = PA_SINK_INPUT_MESSAGE_MAX, /* data from main loop to sink input */
+ SINK_INPUT_MESSAGE_DISABLE_PREBUF /* disabled prebuf, get playback started. */
};
enum {
@@ -189,7 +190,7 @@ static int do_read(connection *c) {
c->playback.memblock_index += r;
- pa_asyncmsgq_post(c->protocol->core->asyncmsgq, PA_MSGOBJECT(c->sink_input), SINK_INPUT_MESSAGE_POST_DATA, NULL, &chunk, NULL);
+ pa_asyncmsgq_post(c->sink_input->sink->asyncmsgq, PA_MSGOBJECT(c->sink_input), SINK_INPUT_MESSAGE_POST_DATA, NULL, &chunk, NULL);
return 0;
}
@@ -259,7 +260,7 @@ fail:
pa_iochannel_free(c->io);
c->io = NULL;
- pa_memblockq_prebuf_disable(c->input_memblockq);
+ pa_asyncmsgq_post(c->sink_input->sink->asyncmsgq, PA_MSGOBJECT(c->sink_input), SINK_INPUT_MESSAGE_DISABLE_PREBUF, NULL, NULL, NULL);
} else
connection_drop(c);
}
@@ -282,7 +283,6 @@ static int connection_process_msg(pa_msgobject *o, int code, void*userdata, pa_m
case MESSAGE_DROP_CONNECTION:
connection_drop(c);
break;
-
}
return 0;
@@ -307,10 +307,17 @@ static int sink_input_process_msg(pa_msgobject *o, int code, void *userdata, pa_
/* New data from the main loop */
pa_memblockq_push_align(c->input_memblockq, chunk);
pa_atomic_store(&c->playback.missing, pa_memblockq_missing(c->input_memblockq));
+
+/* pa_log("got data, %u", pa_memblockq_get_length(c->input_memblockq)); */
return 0;
}
+ case SINK_INPUT_MESSAGE_DISABLE_PREBUF: {
+ pa_memblockq_prebuf_disable(c->input_memblockq);
+ return 0;
+ }
+
case PA_SINK_INPUT_MESSAGE_GET_LATENCY: {
pa_usec_t *r = userdata;
@@ -337,6 +344,8 @@ static int sink_input_peek_cb(pa_sink_input *i, pa_memchunk *chunk) {
r = pa_memblockq_peek(c->input_memblockq, chunk);
+/* pa_log("peeked %u %i", r >= 0 ? chunk->length: 0, r); */
+
if (c->dead && r < 0)
pa_asyncmsgq_post(c->protocol->core->asyncmsgq, PA_MSGOBJECT(c), MESSAGE_DROP_CONNECTION, c, NULL, NULL);