mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-05 13:29:57 -05:00
device-manager: Provide a method for prefering/defering a device.
This allows clients to edit the priroity order. What is not yet in place is the initialisation of that priority list when new devices are detected or the cleaning (remove holes) when devices are removed. In order to keep the storage transparent I will likely remove the write functionality and replace it with a simple rename method. I also still need to expose the priority itself when reading the data.
This commit is contained in:
parent
a9bd1ab69c
commit
4981268738
3 changed files with 238 additions and 0 deletions
|
|
@ -42,6 +42,8 @@ enum {
|
|||
SUBCOMMAND_WRITE,
|
||||
SUBCOMMAND_DELETE,
|
||||
SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING,
|
||||
SUBCOMMAND_PREFER_DEVICE,
|
||||
SUBCOMMAND_DEFER_DEVICE,
|
||||
SUBCOMMAND_SUBSCRIBE,
|
||||
SUBCOMMAND_EVENT
|
||||
};
|
||||
|
|
@ -321,6 +323,78 @@ pa_operation *pa_ext_device_manager_enable_role_device_priority_routing(
|
|||
return o;
|
||||
}
|
||||
|
||||
pa_operation *pa_ext_device_manager_prefer_device(
|
||||
pa_context *c,
|
||||
const char* role,
|
||||
const char* device,
|
||||
pa_context_success_cb_t cb,
|
||||
void *userdata) {
|
||||
|
||||
uint32_t tag;
|
||||
pa_operation *o = NULL;
|
||||
pa_tagstruct *t = NULL;
|
||||
|
||||
pa_assert(c);
|
||||
pa_assert(PA_REFCNT_VALUE(c) >= 1);
|
||||
|
||||
PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
|
||||
PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
|
||||
PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
|
||||
|
||||
pa_assert(role);
|
||||
pa_assert(device);
|
||||
|
||||
o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
|
||||
|
||||
t = pa_tagstruct_command(c, PA_COMMAND_EXTENSION, &tag);
|
||||
pa_tagstruct_putu32(t, PA_INVALID_INDEX);
|
||||
pa_tagstruct_puts(t, "module-device-manager");
|
||||
pa_tagstruct_putu32(t, SUBCOMMAND_PREFER_DEVICE);
|
||||
pa_tagstruct_puts(t, role);
|
||||
pa_tagstruct_puts(t, device);
|
||||
|
||||
pa_pstream_send_tagstruct(c->pstream, t);
|
||||
pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, pa_context_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
pa_operation *pa_ext_device_manager_defer_device(
|
||||
pa_context *c,
|
||||
const char* role,
|
||||
const char* device,
|
||||
pa_context_success_cb_t cb,
|
||||
void *userdata) {
|
||||
|
||||
uint32_t tag;
|
||||
pa_operation *o = NULL;
|
||||
pa_tagstruct *t = NULL;
|
||||
|
||||
pa_assert(c);
|
||||
pa_assert(PA_REFCNT_VALUE(c) >= 1);
|
||||
|
||||
PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
|
||||
PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
|
||||
PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
|
||||
|
||||
pa_assert(role);
|
||||
pa_assert(device);
|
||||
|
||||
o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
|
||||
|
||||
t = pa_tagstruct_command(c, PA_COMMAND_EXTENSION, &tag);
|
||||
pa_tagstruct_putu32(t, PA_INVALID_INDEX);
|
||||
pa_tagstruct_puts(t, "module-device-manager");
|
||||
pa_tagstruct_putu32(t, SUBCOMMAND_DEFER_DEVICE);
|
||||
pa_tagstruct_puts(t, role);
|
||||
pa_tagstruct_puts(t, device);
|
||||
|
||||
pa_pstream_send_tagstruct(c->pstream, t);
|
||||
pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, pa_context_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
pa_operation *pa_ext_device_manager_subscribe(
|
||||
pa_context *c,
|
||||
int enable,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue