[pulseaudio-discuss] [PATCH v2 03/10] card: Add pa_card_new_data_add_profile()
Tanu Kaskinen
tanu.kaskinen at linux.intel.com
Mon Dec 9 10:31:40 PST 2013
Currently the function doesn't do anything fancy, but I'll need the
function for automatically adding the device prototypes in the card
profile to the card.
---
src/modules/alsa/module-alsa-card.c | 24 +++++++++++++-----------
src/modules/bluetooth/module-bluetooth-device.c | 4 ++--
src/modules/macosx/module-coreaudio-device.c | 2 +-
src/pulsecore/card.c | 7 +++++++
src/pulsecore/card.h | 1 +
5 files changed, 24 insertions(+), 14 deletions(-)
diff --git a/src/modules/alsa/module-alsa-card.c b/src/modules/alsa/module-alsa-card.c
index e6e426e..7934064 100644
--- a/src/modules/alsa/module-alsa-card.c
+++ b/src/modules/alsa/module-alsa-card.c
@@ -137,12 +137,12 @@ struct profile_data {
pa_alsa_profile *profile;
};
-static void add_profiles(struct userdata *u, pa_hashmap *h, pa_hashmap *ports) {
+static void add_profiles(struct userdata *u, pa_card_new_data *data) {
pa_alsa_profile *ap;
void *state;
pa_assert(u);
- pa_assert(h);
+ pa_assert(data);
PA_HASHMAP_FOREACH(ap, u->profile_set->profiles, state) {
struct profile_data *d;
@@ -158,9 +158,9 @@ static void add_profiles(struct userdata *u, pa_hashmap *h, pa_hashmap *ports) {
PA_IDXSET_FOREACH(m, ap->output_mappings, idx) {
if (u->use_ucm)
- pa_alsa_ucm_add_ports_combination(NULL, &m->ucm_context, true, ports, cp, u->core);
+ pa_alsa_ucm_add_ports_combination(NULL, &m->ucm_context, true, data->ports, cp, u->core);
else
- pa_alsa_path_set_add_ports(m->output_path_set, cp, ports, NULL, u->core);
+ pa_alsa_path_set_add_ports(m->output_path_set, cp, data->ports, NULL, u->core);
if (m->channel_map.channels > cp->max_sink_channels)
cp->max_sink_channels = m->channel_map.channels;
}
@@ -171,9 +171,9 @@ static void add_profiles(struct userdata *u, pa_hashmap *h, pa_hashmap *ports) {
PA_IDXSET_FOREACH(m, ap->input_mappings, idx) {
if (u->use_ucm)
- pa_alsa_ucm_add_ports_combination(NULL, &m->ucm_context, false, ports, cp, u->core);
+ pa_alsa_ucm_add_ports_combination(NULL, &m->ucm_context, false, data->ports, cp, u->core);
else
- pa_alsa_path_set_add_ports(m->input_path_set, cp, ports, NULL, u->core);
+ pa_alsa_path_set_add_ports(m->input_path_set, cp, data->ports, NULL, u->core);
if (m->channel_map.channels > cp->max_source_channels)
cp->max_source_channels = m->channel_map.channels;
}
@@ -182,20 +182,22 @@ static void add_profiles(struct userdata *u, pa_hashmap *h, pa_hashmap *ports) {
d = PA_CARD_PROFILE_DATA(cp);
d->profile = ap;
- pa_hashmap_put(h, cp->name, cp);
+ pa_card_new_data_add_profile(data, cp);
}
}
-static void add_disabled_profile(pa_hashmap *profiles) {
+static void add_disabled_profile(pa_card_new_data *data) {
pa_card_profile *p;
struct profile_data *d;
+ pa_assert(data);
+
p = pa_card_profile_new("off", _("Off"), sizeof(struct profile_data));
d = PA_CARD_PROFILE_DATA(p);
d->profile = NULL;
- pa_hashmap_put(profiles, p->name, p);
+ pa_card_new_data_add_profile(data, p);
}
static int card_set_profile(pa_card *c, pa_card_profile *new_profile) {
@@ -721,7 +723,7 @@ int pa__init(pa_module *m) {
if ((description = pa_proplist_gets(data.proplist, PA_PROP_DEVICE_DESCRIPTION)))
pa_reserve_wrapper_set_application_device_name(reserve, description);
- add_profiles(u, data.profiles, data.ports);
+ add_profiles(u, &data);
if (pa_hashmap_isempty(data.profiles)) {
pa_log("Failed to find a working profile.");
@@ -729,7 +731,7 @@ int pa__init(pa_module *m) {
goto fail;
}
- add_disabled_profile(data.profiles);
+ add_disabled_profile(&data);
if (pa_modargs_get_proplist(ma, "card_properties", data.proplist, PA_UPDATE_REPLACE) < 0) {
pa_log("Invalid properties");
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index e51da4d..77826d0 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -2309,7 +2309,7 @@ static int add_card(struct userdata *u) {
continue;
}
- pa_hashmap_put(data.profiles, p->name, p);
+ pa_card_new_data_add_profile(&data, p);
}
pa_assert(!pa_hashmap_isempty(data.profiles));
@@ -2318,7 +2318,7 @@ static int add_card(struct userdata *u) {
p->available = PA_AVAILABLE_YES;
d = PA_CARD_PROFILE_DATA(p);
*d = PROFILE_OFF;
- pa_hashmap_put(data.profiles, p->name, p);
+ pa_card_new_data_add_profile(&data, p);
if ((default_profile = pa_modargs_get_value(u->modargs, "profile", NULL))) {
if (pa_hashmap_get(data.profiles, default_profile))
diff --git a/src/modules/macosx/module-coreaudio-device.c b/src/modules/macosx/module-coreaudio-device.c
index 7b3a002..da730eb 100644
--- a/src/modules/macosx/module-coreaudio-device.c
+++ b/src/modules/macosx/module-coreaudio-device.c
@@ -754,7 +754,7 @@ int pa__init(pa_module *m) {
/* add on profile */
p = pa_card_profile_new("on", _("On"), 0);
- pa_hashmap_put(card_new_data.profiles, p->name, p);
+ pa_card_new_data_add_profile(&card_new_data, p);
/* create the card object */
u->card = pa_card_new(m->core, &card_new_data);
diff --git a/src/pulsecore/card.c b/src/pulsecore/card.c
index fb28ff9..92804d0 100644
--- a/src/pulsecore/card.c
+++ b/src/pulsecore/card.c
@@ -102,6 +102,13 @@ void pa_card_new_data_set_name(pa_card_new_data *data, const char *name) {
data->name = pa_xstrdup(name);
}
+void pa_card_new_data_add_profile(pa_card_new_data *data, pa_card_profile *profile) {
+ pa_assert(data);
+ pa_assert(profile);
+
+ pa_assert_se(pa_hashmap_put(data->profiles, profile->name, profile) >= 0);
+}
+
void pa_card_new_data_set_profile(pa_card_new_data *data, const char *profile) {
pa_assert(data);
diff --git a/src/pulsecore/card.h b/src/pulsecore/card.h
index 950fe68..8fa0623 100644
--- a/src/pulsecore/card.h
+++ b/src/pulsecore/card.h
@@ -124,6 +124,7 @@ void pa_card_profile_set_available(pa_card_profile *c, pa_available_t available)
pa_card_new_data *pa_card_new_data_init(pa_card_new_data *data);
void pa_card_new_data_set_name(pa_card_new_data *data, const char *name);
+void pa_card_new_data_add_profile(pa_card_new_data *data, pa_card_profile *profile);
void pa_card_new_data_set_profile(pa_card_new_data *data, const char *profile);
void pa_card_new_data_set_recreate_devices_on_profile_switch(pa_card_new_data *data, bool recreate);
void pa_card_new_data_done(pa_card_new_data *data);
--
1.8.3.1
More information about the pulseaudio-discuss
mailing list