]> code.delx.au - pulseaudio/commitdiff
set reserve interface application device name
authorLennart Poettering <lennart@poettering.net>
Tue, 24 Feb 2009 10:29:35 +0000 (11:29 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 24 Feb 2009 10:29:35 +0000 (11:29 +0100)
src/modules/alsa/alsa-sink.c
src/modules/alsa/alsa-source.c
src/modules/alsa/module-alsa-card.c
src/modules/reserve-wrap.c
src/modules/reserve-wrap.h

index 83fc9e1e875d177d3ffb72cf079933604d6387be..dbd95b637e7345d90374bbb59491af2c05289e31 100644 (file)
@@ -134,6 +134,17 @@ static void reserve_done(struct userdata *u) {
     }
 }
 
+static void reserve_update(struct userdata *u) {
+    const char *description;
+    pa_assert(u);
+
+    if (!u->sink)
+        return;
+
+    if ((description = pa_proplist_gets(u->sink->proplist, PA_PROP_DEVICE_DESCRIPTION)))
+        pa_reserve_wrapper_set_application_device_name(u->reserve, description);
+}
+
 static int reserve_init(struct userdata *u, const char *dname) {
     char *rname;
 
@@ -153,6 +164,8 @@ static int reserve_init(struct userdata *u, const char *dname) {
     if (!(u->reserve))
         return -1;
 
+    reserve_update(u);
+
     pa_assert(!u->reserve_slot);
     u->reserve_slot = pa_hook_connect(pa_reserve_wrapper_hook(u->reserve), PA_HOOK_NORMAL, (pa_hook_cb_t) reserve_cb, u);
 
@@ -1684,6 +1697,8 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
         pa_log_info("Time scheduling watermark is %0.2fms",
                     (double) pa_bytes_to_usec(u->tsched_watermark, &ss) / PA_USEC_PER_MSEC);
 
+    reserve_update(u);
+
     if (update_sw_params(u) < 0)
         goto fail;
 
index 2f0e94cf3837f9bb33a2a4682865f347cc8b56c9..39df4a917ab0e7eeecf417890f3051d85434fb93 100644 (file)
@@ -132,6 +132,17 @@ static void reserve_done(struct userdata *u) {
     }
 }
 
+static void reserve_update(struct userdata *u) {
+    const char *description;
+    pa_assert(u);
+
+    if (!u->source)
+        return;
+
+    if ((description = pa_proplist_gets(u->source->proplist, PA_PROP_DEVICE_DESCRIPTION)))
+        pa_reserve_wrapper_set_application_device_name(u->reserve, description);
+}
+
 static int reserve_init(struct userdata *u, const char *dname) {
     char *rname;
 
@@ -151,6 +162,8 @@ static int reserve_init(struct userdata *u, const char *dname) {
     if (!(u->reserve))
         return -1;
 
+    reserve_update(u);
+
     pa_assert(!u->reserve_slot);
     u->reserve_slot = pa_hook_connect(pa_reserve_wrapper_hook(u->reserve), PA_HOOK_NORMAL, (pa_hook_cb_t) reserve_cb, u);
 
@@ -1522,6 +1535,8 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
         pa_log_info("Time scheduling watermark is %0.2fms",
                     (double) pa_bytes_to_usec(u->tsched_watermark, &ss) / PA_USEC_PER_MSEC);
 
+    reserve_update(u);
+
     if (update_sw_params(u) < 0)
         goto fail;
 
index 52e64ead2529f7bfa9fa0a8cb8042e9b9d532ebc..fc6b886b9d80143fbd224fc5b61b0ecd30e4aaf3 100644 (file)
@@ -282,6 +282,7 @@ int pa__init(pa_module *m) {
     struct userdata *u;
     char rname[32];
     pa_reserve_wrapper *reserve = NULL;
+    const char *description;
 
     pa_alsa_redirect_errors_inc();
     snd_config_update_free_global();
@@ -319,6 +320,10 @@ int pa__init(pa_module *m) {
     pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, u->device_id);
     set_card_name(&data, ma, u->device_id);
 
+    if (reserve)
+        if ((description = pa_proplist_gets(data.proplist, PA_PROP_DEVICE_DESCRIPTION)))
+            pa_reserve_wrapper_set_application_device_name(reserve, description);
+
     u->profiles = data.profiles = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
     if (pa_alsa_probe_profiles(u->device_id, &m->core->default_sample_spec, enumerate_cb, u) < 0) {
         pa_card_new_data_done(&data);
index df2861f56f2b7cffb98714914e0d9d4be3fc7239..709cb0603bc1a2c07f52a325a67ba90a9a041511 100644 (file)
@@ -123,7 +123,7 @@ pa_reserve_wrapper* pa_reserve_wrapper_get(pa_core *c, const char *device_name)
                  _("PulseAudio Sound Server"),
                  0,
                  request_cb,
-                 &error)) < 0) {
+                 NULL)) < 0) {
 
         pa_log_error("Failed to acquire reservation lock on device '%s': %s", device_name, pa_cstrerror(-k));
         goto fail;
@@ -136,7 +136,10 @@ pa_reserve_wrapper* pa_reserve_wrapper_get(pa_core *c, const char *device_name)
     return r;
 
 fail:
+    dbus_error_free(&error);
+
     reserve_wrapper_free(r);
+
     return NULL;
 }
 
@@ -156,3 +159,10 @@ pa_hook* pa_reserve_wrapper_hook(pa_reserve_wrapper *r) {
 
     return &r->hook;
 }
+
+void pa_reserve_wrapper_set_application_device_name(pa_reserve_wrapper *r, const char *name) {
+    pa_assert(r);
+    pa_assert(PA_REFCNT_VALUE(r) >= 1);
+
+    rd_set_application_device_name(r->device, name);
+}
index 7afc511950410e0a1adab08aabe7324dcb95136e..4625fe68d70d123094823681375f759f3c243eaa 100644 (file)
@@ -33,4 +33,6 @@ void pa_reserve_wrapper_unref(pa_reserve_wrapper *r);
 
 pa_hook* pa_reserve_wrapper_hook(pa_reserve_wrapper *r);
 
+void pa_reserve_wrapper_set_application_device_name(pa_reserve_wrapper *r, const char *name);
+
 #endif