0bc13a5b9a8a77671fa6ce7f0e335b0517cca3ba
[profile/ivi/pulseaudio.git] / src / core.c
1 #include <stdlib.h>
2 #include <assert.h>
3 #include <stdio.h>
4
5 #include "core.h"
6 #include "module.h"
7 #include "sink.h"
8 #include "source.h"
9
10 struct core* core_new(struct mainloop *m) {
11     struct core* c;
12     c = malloc(sizeof(struct core));
13     assert(c);
14
15     c->mainloop = m;
16     c->clients = idxset_new(NULL, NULL);
17     c->sinks = idxset_new(NULL, NULL);
18     c->sources = idxset_new(NULL, NULL);
19     c->source_outputs = idxset_new(NULL, NULL);
20     c->sink_inputs = idxset_new(NULL, NULL);
21
22     c->default_source_index = c->default_sink_index = IDXSET_INVALID;
23
24     c->modules = NULL;
25     
26     return c;
27 };
28
29 void core_free(struct core *c) {
30     assert(c);
31
32     module_unload_all(c);
33     assert(!c->modules);
34     
35     assert(idxset_isempty(c->clients));
36     idxset_free(c->clients, NULL, NULL);
37     
38     assert(idxset_isempty(c->sinks));
39     idxset_free(c->sinks, NULL, NULL);
40
41     assert(idxset_isempty(c->sources));
42     idxset_free(c->sources, NULL, NULL);
43     
44     assert(idxset_isempty(c->source_outputs));
45     idxset_free(c->source_outputs, NULL, NULL);
46     
47     assert(idxset_isempty(c->sink_inputs));
48     idxset_free(c->sink_inputs, NULL, NULL);
49
50     free(c);    
51 };
52
53 struct sink* core_get_default_sink(struct core *c) {
54     struct sink *sink;
55     assert(c);
56
57     if ((sink = idxset_get_by_index(c->sinks, c->default_sink_index)))
58         return sink;
59
60     if (!(sink = idxset_first(c->sinks, &c->default_sink_index)))
61         return NULL;
62
63     fprintf(stderr, "core: default sink vanished, setting to %u.\n", sink->index);
64     return sink;
65 }
66
67 struct source* core_get_default_source(struct core *c) {
68     struct source *source;
69     assert(c);
70
71     if ((source = idxset_get_by_index(c->sources, c->default_source_index)))
72         return source;
73
74     if (!(source = idxset_first(c->sources, &c->default_source_index)))
75         return NULL;
76
77     fprintf(stderr, "core: default source vanished, setting to %u.\n", source->index);
78     return source;
79 }