[pulseaudio-discuss] [PATCH v2 4/8] core: move sink-inputs conditionally when update default_sink

Georg Chini georg at chini.tk
Tue Jul 2 09:23:42 UTC 2019


On 17.01.19 07:53, Hui Wang wrote:
> When the default sink changes, the streams from the old default sink
> should be moved to the new default sink, unless the preferred_sink
> string is set to the old default sink and the active port of the old
> default sink is not unavailable
>
> Signed-off-by: Hui Wang <hui.wang at canonical.com>
> ---
...
> +
> +void pa_sink_move_streams_to_default_sink(pa_core *core, pa_sink *old_sink, bool from_user) {
> +    pa_sink_input *i;
> +    uint32_t idx;
> +    bool old_sink_is_unavailable;
> +
> +    pa_assert(core);
> +    pa_assert(old_sink);
> +
> +    if (old_sink == core->default_sink)
> +        return;
> +
> +    if (old_sink->active_port && old_sink->active_port->available == PA_AVAILABLE_NO)
> +        old_sink_is_unavailable = true;
> +
> +    if (pa_idxset_size(old_sink->inputs) > 0) {
> +        PA_IDXSET_FOREACH(i, old_sink->inputs, idx) {
> +            if (!PA_SINK_INPUT_IS_LINKED(i->state))
> +                continue;
> +
> +            if (pa_safe_streq(old_sink->name, i->preferred_sink) && !old_sink_is_unavailable)
> +                continue;
> +
> +            pa_log_info("The sink input %u \"%s\" is moving to %s due to default_sink is changed.",
> +                        i->index, pa_strnull(pa_proplist_gets(i->proplist, PA_PROP_APPLICATION_NAME)), core->default_sink->name);
> +            pa_sink_input_move_to(i, core->default_sink, from_user);
> +        }
> +    }
> +}

If the last sink is in the process of getting removed,  old_sink would 
be the previous
default sink and core->default_sink would be NULL. Is it possible, that 
in this situation
there are still inputs on the sink? Maybe the function should check if 
core->default_sink
is not NULL, just to make sure.





More information about the pulseaudio-discuss mailing list