mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-29 05:40:23 -04:00
intended-roles: Do not pick monitor sources when doing automatic role-based device selection
This commit is contained in:
parent
f7b262763a
commit
dfcaa9325c
1 changed files with 12 additions and 1 deletions
|
|
@ -123,6 +123,7 @@ static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_n
|
|||
return PA_HOOK_OK;
|
||||
}
|
||||
|
||||
/* @todo: favour the highest priority device, not the first one we find? */
|
||||
PA_IDXSET_FOREACH(s, c->sinks, idx) {
|
||||
if (s == def)
|
||||
continue;
|
||||
|
|
@ -173,12 +174,16 @@ static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_ou
|
|||
}
|
||||
|
||||
PA_IDXSET_FOREACH(s, c->sources, idx) {
|
||||
if (s->monitor_of)
|
||||
continue;
|
||||
|
||||
if (s == def)
|
||||
continue;
|
||||
|
||||
if (!PA_SOURCE_IS_LINKED(pa_source_get_state(s)))
|
||||
continue;
|
||||
|
||||
/* @todo: favour the highest priority device, not the first one we find? */
|
||||
if (role_match(s->proplist, role)) {
|
||||
new_data->source = s;
|
||||
new_data->save_source = FALSE;
|
||||
|
|
@ -242,6 +247,9 @@ static pa_hook_result_t source_put_hook_callback(pa_core *c, pa_source *source,
|
|||
pa_assert(u);
|
||||
pa_assert(u->on_hotplug);
|
||||
|
||||
if (source->monitor_of)
|
||||
return PA_HOOK_OK;
|
||||
|
||||
PA_IDXSET_FOREACH(so, c->source_outputs, idx) {
|
||||
const char *role;
|
||||
|
||||
|
|
@ -315,6 +323,7 @@ static pa_hook_result_t sink_unlink_hook_callback(pa_core *c, pa_sink *sink, str
|
|||
continue;
|
||||
|
||||
/* Try to find some other fitting sink */
|
||||
/* @todo: favour the highest priority device, not the first one we find? */
|
||||
PA_IDXSET_FOREACH(d, c->sinks, jdx) {
|
||||
if (d == def || d == sink)
|
||||
continue;
|
||||
|
|
@ -370,6 +379,7 @@ static pa_hook_result_t source_unlink_hook_callback(pa_core *c, pa_source *sourc
|
|||
}
|
||||
|
||||
/* Try to find some other fitting source */
|
||||
/* @todo: favour the highest priority device, not the first one we find? */
|
||||
PA_IDXSET_FOREACH(d, c->sources, jdx) {
|
||||
if (d == def || d == source)
|
||||
continue;
|
||||
|
|
@ -377,7 +387,8 @@ static pa_hook_result_t source_unlink_hook_callback(pa_core *c, pa_source *sourc
|
|||
if (!PA_SOURCE_IS_LINKED(pa_source_get_state(d)))
|
||||
continue;
|
||||
|
||||
if (role_match(d->proplist, role) && !source->monitor_of == !d->monitor_of) {
|
||||
/* If moving from a monitor, move to another monitor */
|
||||
if (!source->monitor_of == !d->monitor_of && role_match(d->proplist, role)) {
|
||||
pa_source_output_move_to(so, d, FALSE);
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue