From 9cb0b933e260008c6a03e24a4a149f726b8d86b2 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 8 Jun 2004 23:54:24 +0000 Subject: initial commit git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@3 fefdeb5f-60dc-0310-8127-8f9354f1896f --- src/core.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/core.c (limited to 'src/core.c') diff --git a/src/core.c b/src/core.c new file mode 100644 index 00000000..7cfa66e3 --- /dev/null +++ b/src/core.c @@ -0,0 +1,81 @@ +#include +#include +#include + +#include "core.h" +#include "module.h" +#include "sink.h" +#include "source.h" + +struct core* core_new(struct mainloop *m) { + struct core* c; + c = malloc(sizeof(struct core)); + assert(c); + + c->mainloop = m; + c->clients = idxset_new(NULL, NULL); + c->sinks = idxset_new(NULL, NULL); + c->sources = idxset_new(NULL, NULL); + c->output_streams = idxset_new(NULL, NULL); + c->input_streams = idxset_new(NULL, NULL); + + c->default_source_index = c->default_sink_index = IDXSET_INVALID; + + c->modules = NULL; + + return c; +}; + +void core_free(struct core *c) { + assert(c); + + module_unload_all(c); + assert(!c->modules); + + assert(idxset_isempty(c->clients)); + idxset_free(c->clients, NULL, NULL); + + assert(idxset_isempty(c->sinks)); + idxset_free(c->sinks, NULL, NULL); + + assert(idxset_isempty(c->sources)); + idxset_free(c->sources, NULL, NULL); + + assert(idxset_isempty(c->output_streams)); + idxset_free(c->output_streams, NULL, NULL); + + assert(idxset_isempty(c->input_streams)); + idxset_free(c->input_streams, NULL, NULL); + + free(c); +}; + +struct sink* core_get_default_sink(struct core *c) { + struct sink *sink; + assert(c); + + if ((sink = idxset_get_by_index(c->sinks, c->default_sink_index))) + return sink; + + if (!(sink = idxset_rrobin(c->sinks, NULL))) + return NULL; + + fprintf(stderr, "Default sink vanished, setting to %u\n", sink->index); + c->default_sink_index = sink->index; + return sink; +} + +struct source* core_get_default_source(struct core *c) { + struct source *source; + assert(c); + + if ((source = idxset_get_by_index(c->sources, c->default_source_index))) + return source; + + if (!(source = idxset_rrobin(c->sources, NULL))) + return NULL; + + fprintf(stderr, "Default source vanished, setting to %u\n", source->index); + c->default_source_index = source->index; + return source; +} -- cgit