From acb25b35102dfca08f66e155560f6c99cb8fa841 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 23 Jun 2004 23:17:30 +0000 Subject: main part of the native protocol git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@31 fefdeb5f-60dc-0310-8127-8f9354f1896f --- src/module-oss-mmap.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) (limited to 'src/module-oss-mmap.c') diff --git a/src/module-oss-mmap.c b/src/module-oss-mmap.c index bfc3a6fa..b70ea6bd 100644 --- a/src/module-oss-mmap.c +++ b/src/module-oss-mmap.c @@ -16,15 +16,15 @@ #include "source.h" #include "module.h" #include "oss.h" +#include "sample-util.h" struct userdata { struct sink *sink; struct source *source; struct core *core; - struct sample_spec sample_spec; + struct pa_sample_spec sample_spec; - size_t in_fragment_size, out_fragment_size, in_fragments, out_fragments, sample_size, out_fill; - uint32_t sample_usec; + size_t in_fragment_size, out_fragment_size, in_fragments, out_fragments, out_fill; int fd; @@ -161,12 +161,14 @@ static void do_read(struct userdata *u) { in_clear_memblocks(u, u->in_fragments/2); }; -static void io_callback(struct mainloop_source*s, int fd, enum mainloop_io_event event, void *userdata) { +static void io_callback(struct pa_mainloop_api *m, void *id, int fd, enum pa_mainloop_api_io_events events, void *userdata) { struct userdata *u = userdata; - if (event & MAINLOOP_IO_EVENT_IN) + assert (u && u->core->mainloop == m && u->mainloop_source == id); + + if (events & PA_MAINLOOP_API_IO_EVENT_INPUT) do_read(u); - if (event & MAINLOOP_IO_EVENT_OUT) + if (events & PA_MAINLOOP_API_IO_EVENT_OUTPUT) do_write(u); } @@ -175,7 +177,7 @@ static uint32_t sink_get_latency_cb(struct sink *s) { assert(s && u); do_write(u); - return u->out_fill/u->sample_size*u->sample_usec; + return pa_samples_usec(u->out_fill, &s->sample_spec); } int module_init(struct core *c, struct module*m) { @@ -316,10 +318,7 @@ int module_init(struct core *c, struct module*m) { assert(u->source || u->sink); - u->sample_size = sample_size(&u->sample_spec); - u->sample_usec = 1000000/u->sample_spec.rate; - - u->mainloop_source = mainloop_source_new_io(c->mainloop, u->fd, (u->source ? MAINLOOP_IO_EVENT_IN : 0) | (u->sink ? MAINLOOP_IO_EVENT_OUT : 0), io_callback, u); + u->mainloop_source = c->mainloop->source_io(c->mainloop, u->fd, (u->source ? PA_MAINLOOP_API_IO_EVENT_INPUT : 0) | (u->sink ? PA_MAINLOOP_API_IO_EVENT_OUTPUT : 0), io_callback, u); assert(u->mainloop_source); return 0; @@ -360,7 +359,7 @@ void module_done(struct core *c, struct module*m) { source_free(u->source); if (u->mainloop_source) - mainloop_source_free(u->mainloop_source); + u->core->mainloop->cancel_io(u->core->mainloop, u->mainloop_source); if (u->fd >= 0) close(u->fd); -- cgit