summaryrefslogtreecommitdiff
path: root/src/pulsecore/card.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pulsecore/card.c')
-rw-r--r--src/pulsecore/card.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/pulsecore/card.c b/src/pulsecore/card.c
index b6cbbf7cf..0eaccff10 100644
--- a/src/pulsecore/card.c
+++ b/src/pulsecore/card.c
@@ -103,6 +103,15 @@ void pa_card_new_data_set_profile(pa_card_new_data *data, const char *profile) {
data->active_profile = pa_xstrdup(profile);
}
+void pa_card_new_data_set_preferred_port(pa_card_new_data *data, pa_direction_t direction, pa_device_port *port) {
+ pa_assert(data);
+
+ if (direction == PA_DIRECTION_INPUT)
+ data->preferred_input_port = port;
+ else
+ data->preferred_output_port = port;
+}
+
void pa_card_new_data_done(pa_card_new_data *data) {
pa_assert(data);
@@ -169,6 +178,9 @@ pa_card *pa_card_new(pa_core *core, pa_card_new_data *data) {
PA_HASHMAP_FOREACH(port, c->ports, state)
port->card = c;
+ c->preferred_input_port = data->preferred_input_port;
+ c->preferred_output_port = data->preferred_output_port;
+
if (data->active_profile)
if ((c->active_profile = pa_hashmap_get(c->profiles, data->active_profile)))
c->save_profile = data->save_profile;
@@ -309,6 +321,40 @@ int pa_card_set_profile(pa_card *c, pa_card_profile *profile, bool save) {
return 0;
}
+void pa_card_set_preferred_port(pa_card *c, pa_direction_t direction, pa_device_port *port) {
+ pa_device_port *old_port;
+ const char *old_port_str;
+ const char *new_port_str;
+ pa_card_preferred_port_changed_hook_data data;
+
+ pa_assert(c);
+
+ if (direction == PA_DIRECTION_INPUT) {
+ old_port = c->preferred_input_port;
+ old_port_str = c->preferred_input_port ? c->preferred_input_port->name : "(unset)";
+ } else {
+ old_port = c->preferred_output_port;
+ old_port_str = c->preferred_output_port ? c->preferred_output_port->name : "(unset)";
+ }
+
+ if (port == old_port)
+ return;
+
+ new_port_str = port ? port->name : "(unset)";
+
+ if (direction == PA_DIRECTION_INPUT) {
+ c->preferred_input_port = port;
+ pa_log_debug("%s: preferred_input_port: %s -> %s", c->name, old_port_str, new_port_str);
+ } else {
+ c->preferred_output_port = port;
+ pa_log_debug("%s: preferred_output_port: %s -> %s", c->name, old_port_str, new_port_str);
+ }
+
+ data.card = c;
+ data.direction = direction;
+ pa_hook_fire(&c->core->hooks[PA_CORE_HOOK_CARD_PREFERRED_PORT_CHANGED], &data);
+}
+
int pa_card_suspend(pa_card *c, bool suspend, pa_suspend_cause_t cause) {
pa_sink *sink;
pa_source *source;