]> code.delx.au - pulseaudio/commitdiff
prop: introduce new PA_PROP_DEVICE_INTENDED_ROLES property
authorLennart Poettering <lennart@poettering.net>
Mon, 8 Jun 2009 14:58:45 +0000 (16:58 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 8 Jun 2009 14:58:45 +0000 (16:58 +0200)
src/modules/bluetooth/module-bluetooth-device.c
src/modules/module-raop-sink.c
src/pulse/proplist.h
src/pulsecore/card.c
src/pulsecore/sink.c
src/pulsecore/sink.h
src/pulsecore/source.c

index dbec00d4658c06d04151d5dbaef241323cefe47b..40093cf2e798482eec50b610df7efbfcfc83ad7c 100644 (file)
@@ -1622,6 +1622,8 @@ static int add_sink(struct userdata *u) {
         data.module = u->module;
         pa_sink_new_data_set_sample_spec(&data, &u->sample_spec);
         pa_proplist_sets(data.proplist, "bluetooth.protocol", u->profile == PROFILE_A2DP ? "a2dp" : "sco");
+        if (u->profile == PROFILE_HSP)
+            pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "phone");
         data.card = u->card;
         data.name = get_name("sink", u->modargs, u->address, &b);
         data.namereg_fail = b;
@@ -1680,6 +1682,8 @@ static int add_source(struct userdata *u) {
         data.module = u->module;
         pa_source_new_data_set_sample_spec(&data, &u->sample_spec);
         pa_proplist_sets(data.proplist, "bluetooth.protocol", u->profile == PROFILE_A2DP ? "a2dp" : "hsp");
+        if (u->profile == PROFILE_HSP)
+            pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "phone");
         data.card = u->card;
         data.name = get_name("source", u->modargs, u->address, &b);
         data.namereg_fail = b;
index 052a3a5ec03555748c1249419a3755469e80cf4b..54de42c2bd564fb9cc2bdd9fc1834629b661798b 100644 (file)
@@ -583,6 +583,7 @@ int pa__init(pa_module*m) {
     pa_sink_new_data_set_name(&data, pa_modargs_get_value(ma, "sink_name", DEFAULT_SINK_NAME));
     pa_sink_new_data_set_sample_spec(&data, &ss);
     pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, server);
+    pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "music");
     if ((desc = pa_modargs_get_value(ma, "description", NULL)))
         pa_proplist_sets(data.proplist, PA_PROP_DEVICE_DESCRIPTION, desc);
     else
index 4c791dce1bd2c0fcdc701955329204084dc700e8..bc4dbd8aede14a2e7f634d27ed1e16efc165bbb7 100644 (file)
@@ -206,6 +206,9 @@ PA_C_DECL_BEGIN
 /** For devices: profile identifier for the profile this devices is in. e.g. "analog-stereo", "analog-surround-40", "iec958-stereo", ...*/
 #define PA_PROP_DEVICE_PROFILE_NAME            "device.profile.name"
 
+/** For devices: intended use. A comma seperated list of roles (see PA_PROP_MEDIA_ROLE) this device is particularly well suited for, due to latency, quality or form factor. \since 0.9.16 */
+#define PA_PROP_DEVICE_INTENDED_ROLES          "device.intended_roles"
+
 /** For devices: human readable one-line description of the profile this device is in. e.g. "Analog Stereo", ... */
 #define PA_PROP_DEVICE_PROFILE_DESCRIPTION     "device.profile.description"
 
index 59b8cda6c0060fba7811efcfb307ec475c571d5e..9c16ef2dee4c5046a33d2789563a39c096a39a9d 100644 (file)
@@ -164,6 +164,7 @@ pa_card *pa_card_new(pa_core *core, pa_card_new_data *data) {
 
     pa_device_init_description(c->proplist);
     pa_device_init_icon(c->proplist, TRUE);
+    pa_device_init_intended_roles(c->proplist);
 
     pa_assert_se(pa_idxset_put(core->cards, c, &c->index) >= 0);
 
index 13f0e11e5043016fdc8165b1d26d4b6874dcbc64..1da094afaf6d66c1251243dacbc3fc4d7461c09d 100644 (file)
@@ -177,6 +177,7 @@ pa_sink* pa_sink_new(
 
     pa_device_init_description(data->proplist);
     pa_device_init_icon(data->proplist, TRUE);
+    pa_device_init_intended_roles(data->proplist);
 
     if (pa_hook_fire(&core->hooks[PA_CORE_HOOK_SINK_FIXATE], data) < 0) {
         pa_xfree(s);
@@ -2287,3 +2288,19 @@ pa_bool_t pa_device_init_description(pa_proplist *p) {
 
     return FALSE;
 }
+
+pa_bool_t pa_device_init_intended_roles(pa_proplist *p) {
+    const char *s;
+    pa_assert(p);
+
+    if (pa_proplist_contains(p, PA_PROP_DEVICE_INTENDED_ROLES))
+        return TRUE;
+
+    if ((s = pa_proplist_gets(p, PA_PROP_DEVICE_FORM_FACTOR)))
+        if (pa_streq(s, "handset") || pa_streq(s, "hands-free")) {
+            pa_proplist_sets(p, PA_PROP_DEVICE_INTENDED_ROLES, "phone");
+            return TRUE;
+        }
+
+    return FALSE;
+}
index 4dce3f930cf13d25b0a9466237b8e5f39d725d76..0f32d1630f4d6da6560d848bcd441224cf510703 100644 (file)
@@ -241,6 +241,7 @@ void pa_sink_mute_changed(pa_sink *s, pa_bool_t new_muted);
 
 pa_bool_t pa_device_init_description(pa_proplist *p);
 pa_bool_t pa_device_init_icon(pa_proplist *p, pa_bool_t is_sink);
+pa_bool_t pa_device_init_intended_roles(pa_proplist *p);
 
 /**** May be called by everyone, from main context */
 
index 53697c57d393b9d81d76b8de0ef2d8c3f5709a58..d35c85234864e78c673050a667c701b3a4fea9af 100644 (file)
@@ -167,6 +167,7 @@ pa_source* pa_source_new(
 
     pa_device_init_description(data->proplist);
     pa_device_init_icon(data->proplist, FALSE);
+    pa_device_init_intended_roles(data->proplist);
 
     if (pa_hook_fire(&core->hooks[PA_CORE_HOOK_SOURCE_FIXATE], data) < 0) {
         pa_xfree(s);