[pulseaudio-discuss] [PATCH v2 3/8] sink-input: clear the preferred_sink if it is default_sink

Hui Wang hui.wang at canonical.com
Tue Jul 2 12:37:18 UTC 2019


On 2019/6/30 下午6:47, Georg Chini wrote:
> On 17.01.19 07:53, Hui Wang wrote:
>> When the user moves a stream to the current default sink, the
>> preferred_sink should be set to NULL and module-stream-restore
>> should clear the routing for that stream in the stream database. From
>> that point on the stream will be always routed to the default sink.
>>
>> Signed-off-by: Hui Wang <hui.wang at canonical.com>
>> ---
>>   src/modules/module-stream-restore.c | 19 ++++++++++++++-----
>>   src/pulsecore/sink-input.c          |  6 +++++-
>>   2 files changed, 19 insertions(+), 6 deletions(-)
>>
>> diff --git a/src/modules/module-stream-restore.c 
>> b/src/modules/module-stream-restore.c
>> index 366f1a5a8..142d1e3b4 100644
>> --- a/src/modules/module-stream-restore.c
>> +++ b/src/modules/module-stream-restore.c
>> @@ -1311,13 +1311,22 @@ static void subscribe_callback(pa_core *c, 
>> pa_subscription_event_type_t t, uint3
>>               mute_updated = !created_new_entry && (!old->muted_valid 
>> || entry->muted != old->muted);
>>           }
>>   -        if (sink_input->preferred_sink != NULL) {
>> +        if (sink_input->preferred_sink != NULL || !created_new_entry) {
>>               pa_xfree(entry->device);
>> -            entry->device = pa_xstrdup(sink_input->preferred_sink);
>> -            entry->device_valid = true;
>> +            if (sink_input->preferred_sink != NULL) {
>> +                entry->device = pa_xstrdup(sink_input->preferred_sink);
>> +                entry->device_valid = true;
>> +            } else {
>> +                entry->device = NULL;
>> +                entry->device_valid = false;
>> +            }
>>   -            device_updated = !created_new_entry && 
>> (!old->device_valid || !pa_streq(entry->device, old->device));
>> -            if (sink_input->sink->card) {
>> +            device_updated = !created_new_entry && 
>> !pa_safe_streq(entry->device, old->device);
>> +            if (entry->device_valid == false) {
>> +                pa_xfree(entry->card);
>> +                entry->card = NULL;
>> +                entry->card_valid = false;
>> +            } else {
>>                   pa_xfree(entry->card);
>>                   entry->card = 
>> pa_xstrdup(sink_input->sink->card->name);
>>                   entry->card_valid = true;
> You still need to check sink_input->sink->card. The virtual sinks 
> don't have a card,
> so it may well be that the device is valid but there is no card.
>
Ok, will add it.

Thanks.



More information about the pulseaudio-discuss mailing list