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 <david.henningsson@canonical.com>
This commit is contained in:
David Henningsson 2011-11-25 15:17:13 +01:00 committed by Tanu Kaskinen
parent d9685ec85d
commit 0dced7f275
4 changed files with 22 additions and 1 deletions

View file

@ -34,6 +34,7 @@
#include <pulsecore/macro.h> #include <pulsecore/macro.h>
#include <pulsecore/core-util.h> #include <pulsecore/core-util.h>
#include <pulsecore/namereg.h> #include <pulsecore/namereg.h>
#include <pulsecore/device-port.h>
#include "card.h" #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)); memset(data, 0, sizeof(*data));
data->proplist = pa_proplist_new(); data->proplist = pa_proplist_new();
data->ports = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
return data; return data;
} }
@ -99,6 +100,9 @@ void pa_card_new_data_done(pa_card_new_data *data) {
pa_hashmap_free(data->profiles, NULL, NULL); pa_hashmap_free(data->profiles, NULL, NULL);
} }
if (data->ports)
pa_device_port_hashmap_free(data->ports);
pa_xfree(data->name); pa_xfree(data->name);
pa_xfree(data->active_profile); 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 */ * copying it here */
c->profiles = data->profiles; c->profiles = data->profiles;
data->profiles = NULL; data->profiles = NULL;
c->ports = data->ports;
data->ports = NULL;
c->active_profile = NULL; c->active_profile = NULL;
c->save_profile = FALSE; c->save_profile = FALSE;
@ -195,6 +201,8 @@ void pa_card_free(pa_card *c) {
pa_assert(pa_idxset_isempty(c->sources)); pa_assert(pa_idxset_isempty(c->sources));
pa_idxset_free(c->sources, NULL, NULL); pa_idxset_free(c->sources, NULL, NULL);
pa_device_port_hashmap_free(c->ports);
if (c->profiles) { if (c->profiles) {
pa_card_profile *p; pa_card_profile *p;

View file

@ -63,6 +63,8 @@ struct pa_card {
pa_hashmap *profiles; pa_hashmap *profiles;
pa_card_profile *active_profile; pa_card_profile *active_profile;
pa_hashmap *ports;
pa_bool_t save_profile:1; pa_bool_t save_profile:1;
void *userdata; void *userdata;
@ -80,6 +82,8 @@ typedef struct pa_card_new_data {
pa_hashmap *profiles; pa_hashmap *profiles;
char *active_profile; char *active_profile;
pa_hashmap *ports;
pa_bool_t namereg_fail:1; pa_bool_t namereg_fail:1;
pa_bool_t save_profile:1; pa_bool_t save_profile:1;

View file

@ -32,6 +32,8 @@ static void device_port_free(pa_object *o) {
pa_assert(p); pa_assert(p);
pa_assert(pa_device_port_refcnt(p) == 0); 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->name);
pa_xfree(p->description); pa_xfree(p->description);
pa_xfree(p); 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->description = pa_xstrdup(description);
p->priority = 0; p->priority = 0;
p->available = PA_PORT_AVAILABLE_UNKNOWN; p->available = PA_PORT_AVAILABLE_UNKNOWN;
p->profiles = NULL;
p->is_input = FALSE;
p->is_output = FALSE;
return p; return p;
} }

View file

@ -46,6 +46,10 @@ struct pa_device_port {
unsigned priority; unsigned priority;
pa_port_available_t available; /* PA_PORT_AVAILABLE_UNKNOWN, PA_PORT_AVAILABLE_NO or PA_PORT_AVAILABLE_YES */ 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 */ /* .. followed by some implementation specific data */
}; };