set reserve interface application device name

This commit is contained in:
Lennart Poettering 2009-02-24 11:29:35 +01:00
parent 03ac71bcad
commit 8314858183
5 changed files with 48 additions and 1 deletions

View 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) { static int reserve_init(struct userdata *u, const char *dname) {
char *rname; char *rname;
@ -153,6 +164,8 @@ static int reserve_init(struct userdata *u, const char *dname) {
if (!(u->reserve)) if (!(u->reserve))
return -1; return -1;
reserve_update(u);
pa_assert(!u->reserve_slot); 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); 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", pa_log_info("Time scheduling watermark is %0.2fms",
(double) pa_bytes_to_usec(u->tsched_watermark, &ss) / PA_USEC_PER_MSEC); (double) pa_bytes_to_usec(u->tsched_watermark, &ss) / PA_USEC_PER_MSEC);
reserve_update(u);
if (update_sw_params(u) < 0) if (update_sw_params(u) < 0)
goto fail; goto fail;

View 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) { static int reserve_init(struct userdata *u, const char *dname) {
char *rname; char *rname;
@ -151,6 +162,8 @@ static int reserve_init(struct userdata *u, const char *dname) {
if (!(u->reserve)) if (!(u->reserve))
return -1; return -1;
reserve_update(u);
pa_assert(!u->reserve_slot); 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); 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", pa_log_info("Time scheduling watermark is %0.2fms",
(double) pa_bytes_to_usec(u->tsched_watermark, &ss) / PA_USEC_PER_MSEC); (double) pa_bytes_to_usec(u->tsched_watermark, &ss) / PA_USEC_PER_MSEC);
reserve_update(u);
if (update_sw_params(u) < 0) if (update_sw_params(u) < 0)
goto fail; goto fail;

View file

@ -282,6 +282,7 @@ int pa__init(pa_module *m) {
struct userdata *u; struct userdata *u;
char rname[32]; char rname[32];
pa_reserve_wrapper *reserve = NULL; pa_reserve_wrapper *reserve = NULL;
const char *description;
pa_alsa_redirect_errors_inc(); pa_alsa_redirect_errors_inc();
snd_config_update_free_global(); 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); pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, u->device_id);
set_card_name(&data, ma, 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); 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) { if (pa_alsa_probe_profiles(u->device_id, &m->core->default_sample_spec, enumerate_cb, u) < 0) {
pa_card_new_data_done(&data); pa_card_new_data_done(&data);

View file

@ -123,7 +123,7 @@ pa_reserve_wrapper* pa_reserve_wrapper_get(pa_core *c, const char *device_name)
_("PulseAudio Sound Server"), _("PulseAudio Sound Server"),
0, 0,
request_cb, request_cb,
&error)) < 0) { NULL)) < 0) {
pa_log_error("Failed to acquire reservation lock on device '%s': %s", device_name, pa_cstrerror(-k)); pa_log_error("Failed to acquire reservation lock on device '%s': %s", device_name, pa_cstrerror(-k));
goto fail; goto fail;
@ -136,7 +136,10 @@ pa_reserve_wrapper* pa_reserve_wrapper_get(pa_core *c, const char *device_name)
return r; return r;
fail: fail:
dbus_error_free(&error);
reserve_wrapper_free(r); reserve_wrapper_free(r);
return NULL; return NULL;
} }
@ -156,3 +159,10 @@ pa_hook* pa_reserve_wrapper_hook(pa_reserve_wrapper *r) {
return &r->hook; 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);
}

View file

@ -33,4 +33,6 @@ void pa_reserve_wrapper_unref(pa_reserve_wrapper *r);
pa_hook* pa_reserve_wrapper_hook(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 #endif