From 0dced7f2758970b672b8f0d0409c57cddaaaca43 Mon Sep 17 00:00:00 2001 From: David Henningsson Date: Fri, 25 Nov 2011 15:17:13 +0100 Subject: [PATCH] Cards now has ports directly, and device port has list of profiles This forms the base for being able to expose all ports of all profiles (even inactive ones) to clients. Signed-off-by: David Henningsson --- src/pulsecore/card.c | 10 +++++++++- src/pulsecore/card.h | 4 ++++ src/pulsecore/device-port.c | 5 +++++ src/pulsecore/device-port.h | 4 ++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/pulsecore/card.c b/src/pulsecore/card.c index feaa4440d..1f12aefe5 100644 --- a/src/pulsecore/card.c +++ b/src/pulsecore/card.c @@ -34,6 +34,7 @@ #include #include #include +#include #include "card.h" @@ -66,7 +67,7 @@ pa_card_new_data* pa_card_new_data_init(pa_card_new_data *data) { memset(data, 0, sizeof(*data)); data->proplist = pa_proplist_new(); - + data->ports = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func); return data; } @@ -99,6 +100,9 @@ void pa_card_new_data_done(pa_card_new_data *data) { pa_hashmap_free(data->profiles, NULL, NULL); } + if (data->ports) + pa_device_port_hashmap_free(data->ports); + pa_xfree(data->name); pa_xfree(data->active_profile); } @@ -139,6 +143,8 @@ pa_card *pa_card_new(pa_core *core, pa_card_new_data *data) { * copying it here */ c->profiles = data->profiles; data->profiles = NULL; + c->ports = data->ports; + data->ports = NULL; c->active_profile = NULL; c->save_profile = FALSE; @@ -195,6 +201,8 @@ void pa_card_free(pa_card *c) { pa_assert(pa_idxset_isempty(c->sources)); pa_idxset_free(c->sources, NULL, NULL); + pa_device_port_hashmap_free(c->ports); + if (c->profiles) { pa_card_profile *p; diff --git a/src/pulsecore/card.h b/src/pulsecore/card.h index 2d691b679..6f942e80b 100644 --- a/src/pulsecore/card.h +++ b/src/pulsecore/card.h @@ -63,6 +63,8 @@ struct pa_card { pa_hashmap *profiles; pa_card_profile *active_profile; + pa_hashmap *ports; + pa_bool_t save_profile:1; void *userdata; @@ -80,6 +82,8 @@ typedef struct pa_card_new_data { pa_hashmap *profiles; char *active_profile; + pa_hashmap *ports; + pa_bool_t namereg_fail:1; pa_bool_t save_profile:1; diff --git a/src/pulsecore/device-port.c b/src/pulsecore/device-port.c index 09646ee8f..8aeb173c0 100644 --- a/src/pulsecore/device-port.c +++ b/src/pulsecore/device-port.c @@ -32,6 +32,8 @@ static void device_port_free(pa_object *o) { pa_assert(p); pa_assert(pa_device_port_refcnt(p) == 0); + if (p->profiles) + pa_hashmap_free(p->profiles, NULL, NULL); pa_xfree(p->name); pa_xfree(p->description); pa_xfree(p); @@ -50,6 +52,9 @@ pa_device_port *pa_device_port_new(const char *name, const char *description, si p->description = pa_xstrdup(description); p->priority = 0; p->available = PA_PORT_AVAILABLE_UNKNOWN; + p->profiles = NULL; + p->is_input = FALSE; + p->is_output = FALSE; return p; } diff --git a/src/pulsecore/device-port.h b/src/pulsecore/device-port.h index dfe3fc11f..f997c771e 100644 --- a/src/pulsecore/device-port.h +++ b/src/pulsecore/device-port.h @@ -46,6 +46,10 @@ struct pa_device_port { unsigned priority; pa_port_available_t available; /* PA_PORT_AVAILABLE_UNKNOWN, PA_PORT_AVAILABLE_NO or PA_PORT_AVAILABLE_YES */ + pa_hashmap *profiles; /* Can be NULL. Does not own the profiles */ + pa_bool_t is_input:1; + pa_bool_t is_output:1; + /* .. followed by some implementation specific data */ };