11 #include <sys/types.h>
12 #include <sys/socket.h>
14 #include <pulsecore/pulsecore-config.h>
16 #include <pulsecore/card.h>
17 #include <pulsecore/sink.h>
18 #include <pulsecore/source.h>
19 #include <pulsecore/sink-input.h>
24 #ifndef DEFAULT_CONFIG_DIR
25 #define DEFAULT_CONFIG_DIR "/etc/pulse"
28 #define DEFAULT_NULL_SINK_NAME "null.mir"
32 uint32_t module_index;
37 static uint32_t stamp;
39 static char *sink_input_name(pa_proplist *);
42 pa_null_sink *pa_utils_create_null_sink(struct userdata *u, const char *name)
53 pa_assert_se((core = u->core));
57 name = DEFAULT_NULL_SINK_NAME;
60 snprintf(args, sizeof(args), "sink_name=\"%s\" channels=2", name);
61 module = pa_module_load(core, "module-null-sink", args);
65 pa_log("failed to load null sink '%s'", name);
67 PA_IDXSET_FOREACH(s, core->sinks, idx) {
68 if (s->module && s->module == module) {
70 pa_log_info("mir null sink is '%s'", name);
76 ns = pa_xnew0(pa_null_sink, 1);
77 ns->name = pa_xstrdup(name);
78 ns->module_index = module ? module->index : PA_IDXSET_INVALID;
79 ns->sink_index = sink ? sink->index : PA_IDXSET_INVALID;
84 void pa_utils_destroy_null_sink(struct userdata *u)
90 if (u && (ns = u->nullsink) && (core = u->core)) {
91 if ((module = pa_idxset_get_by_index(core->modules,ns->module_index))){
92 pa_log_info("unloading null sink '%s'", ns->name);
93 pa_module_unload(core, module, FALSE);
101 pa_sink *pa_utils_get_null_sink(struct userdata *u)
107 pa_assert_se((core = u->core));
108 pa_assert_se((ns = u->nullsink));
110 return pa_idxset_get_by_index(core->sinks, ns->sink_index);
115 char *pa_utils_get_card_name(pa_card *card)
117 return (card && card->name) ? card->name : "<unknown>";
120 char *pa_utils_get_sink_name(pa_sink *sink)
122 return (sink && sink->name) ? sink->name : "<unknown>";
125 char *pa_utils_get_source_name(pa_source *source)
127 return (source && source->name) ? source->name : "<unknown>";
130 char *pa_utils_get_sink_input_name(pa_sink_input *sinp)
134 if (sinp && (name = sink_input_name(sinp->proplist)))
140 char *pa_utils_get_sink_input_name_from_data(pa_sink_input_new_data *data)
144 if (data && (name = sink_input_name(data->proplist)))
150 static char *sink_input_name(pa_proplist *pl)
155 if ((appnam = pa_proplist_gets(pl, PA_PROP_APPLICATION_NAME)))
156 return (char *)appnam;
158 if ((binnam = pa_proplist_gets(pl, PA_PROP_APPLICATION_PROCESS_BINARY)))
159 return (char *)binnam;
165 const char *pa_utils_file_path(const char *file, char *buf, size_t len)
173 snprintf(buf, len, "%s/%s", DEFAULT_CONFIG_DIR, file);
179 const uint32_t pa_utils_new_stamp(void)
184 const uint32_t pa_utils_get_stamp(void)
195 * indent-tabs-mode: nil