From 3b912ac41f5406b5f7b02c718bb87cb19965843c Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 13 Jul 2007 12:14:30 +0000 Subject: [PATCH] Port module-sine to the new lock-free core git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1517 fefdeb5f-60dc-0310-8127-8f9354f1896f --- src/modules/module-sine.c | 57 +++++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/src/modules/module-sine.c b/src/modules/module-sine.c index baf3734..b5b7e60 100644 --- a/src/modules/module-sine.c +++ b/src/modules/module-sine.c @@ -58,34 +58,42 @@ static const char* const valid_modargs[] = { NULL, }; -static int sink_input_peek(pa_sink_input *i, pa_memchunk *chunk) { +static int sink_input_peek_cb(pa_sink_input *i, pa_memchunk *chunk) { struct userdata *u; - assert(i && chunk && i->userdata); + + pa_assert(i); u = i->userdata; + pa_assert(u); + pa_assert(chunk); chunk->memblock = pa_memblock_ref(u->memblock); chunk->index = u->peek_index; chunk->length = pa_memblock_get_length(u->memblock) - u->peek_index; + return 0; } -static void sink_input_drop(pa_sink_input *i, const pa_memchunk *chunk, size_t length) { +static void sink_input_drop_cb(pa_sink_input *i, const pa_memchunk *chunk, size_t length) { struct userdata *u; - assert(i && chunk && length && i->userdata); + size_t l; + + pa_assert(i); u = i->userdata; - - assert(chunk->memblock == u->memblock); - assert(length <= pa_memblock_get_length(u->memblock)-u->peek_index); + pa_assert(u); + pa_assert(chunk); + pa_assert(length > 0); u->peek_index += length; - if (u->peek_index >= pa_memblock_get_length(u->memblock)) - u->peek_index = 0; + l = pa_memblock_get_length(u->memblock); + + while (u->peek_index >= l) + u->peek_index -= l; } -static void sink_input_kill(pa_sink_input *i) { +static void sink_input_kill_cb(pa_sink_input *i) { struct userdata *u; - assert(i && i->userdata); + pa_assert(i && i->userdata); u = i->userdata; pa_sink_input_disconnect(u->sink_input); @@ -108,7 +116,6 @@ int pa__init(pa_core *c, pa_module*m) { pa_modargs *ma = NULL; struct userdata *u; pa_sink *sink; - const char *sink_name; pa_sample_spec ss; uint32_t frequency; char t[256]; @@ -120,15 +127,14 @@ int pa__init(pa_core *c, pa_module*m) { goto fail; } - m->userdata = u = pa_xmalloc(sizeof(struct userdata)); + m->userdata = u = pa_xnew0(struct userdata, 1); u->core = c; u->module = m; u->sink_input = NULL; u->memblock = NULL; + u->peek_index = 0; - sink_name = pa_modargs_get_value(ma, "sink", NULL); - - if (!(sink = pa_namereg_get(c, sink_name, PA_NAMEREG_SINK, 1))) { + if (!(sink = pa_namereg_get(c, pa_modargs_get_value(ma, "sink", NULL), PA_NAMEREG_SINK, 1))) { pa_log("No such sink."); goto fail; } @@ -160,13 +166,13 @@ int pa__init(pa_core *c, pa_module*m) { if (!(u->sink_input = pa_sink_input_new(c, &data, 0))) goto fail; - u->sink_input->peek = sink_input_peek; - u->sink_input->drop = sink_input_drop; - u->sink_input->kill = sink_input_kill; + u->sink_input->peek = sink_input_peek_cb; + u->sink_input->drop = sink_input_drop_cb; + u->sink_input->kill = sink_input_kill_cb; u->sink_input->userdata = u; - u->peek_index = 0; - + pa_sink_input_put(u->sink_input); + pa_modargs_free(ma); return 0; @@ -179,10 +185,12 @@ fail: } void pa__done(pa_core *c, pa_module*m) { - struct userdata *u = m->userdata; - assert(c && m); + struct userdata *u; + + pa_assert(c); + pa_assert(m); - if (!u) + if (!(u = m->userdata)) return; if (u->sink_input) { @@ -192,6 +200,7 @@ void pa__done(pa_core *c, pa_module*m) { if (u->memblock) pa_memblock_unref(u->memblock); + pa_xfree(u); } -- 2.7.4