}
}
+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;
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);
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;
}
}
+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;
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);
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;
struct userdata *u;
char rname[32];
pa_reserve_wrapper *reserve = NULL;
+ const char *description;
pa_alsa_redirect_errors_inc();
snd_config_update_free_global();
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);
_("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;
return r;
fail:
+ dbus_error_free(&error);
+
reserve_wrapper_free(r);
+
return NULL;
}
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);
+}
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