[pulseaudio-discuss] [PATCH] card: Only set active_profile with available profile

Luiz Augusto von Dentz luiz.dentz at gmail.com
Fri Nov 1 11:24:38 CET 2013


Hi David,

On Fri, Nov 1, 2013 at 11:31 AM, David Henningsson
<david.henningsson at canonical.com> wrote:
> On 11/01/2013 10:18 AM, Luiz Augusto von Dentz wrote:
>> Hi David,
>>
>> On Thu, Oct 31, 2013 at 11:22 AM, David Henningsson
>> <david.henningsson at canonical.com> wrote:
>>> On 10/30/2013 11:58 AM, Luiz Augusto von Dentz wrote:
>>>> From: Luiz Augusto von Dentz <luiz.von.dentz at intel.com>
>>>>
>>>> If the profile available flag is set to PA_AVAILABLE_NO it means the
>>>> profile shall not be use.
>>>
>>> Please add to the comment that this only happens when the card is
>>> created, and only if the active profile has not been specified earlier.
>>
>> Sure will add it np.
>>
>>>
>>>> ---
>>>>  src/pulsecore/card.c | 6 +++++-
>>>>  1 file changed, 5 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/src/pulsecore/card.c b/src/pulsecore/card.c
>>>> index e6e0836..ba2222e 100644
>>>> --- a/src/pulsecore/card.c
>>>> +++ b/src/pulsecore/card.c
>>>> @@ -195,9 +195,13 @@ pa_card *pa_card_new(pa_core *core, pa_card_new_data *data) {
>>>>              c->save_profile = data->save_profile;
>>>>
>>>>      if (!c->active_profile) {
>>>> -        PA_HASHMAP_FOREACH(profile, c->profiles, state)
>>>> +        PA_HASHMAP_FOREACH(profile, c->profiles, state) {
>>>> +            if (profile->available == PA_AVAILABLE_NO)
>>>> +                continue;
>>>> +
>>>>              if (!c->active_profile || profile->priority > c->active_profile->priority)
>>>>                  c->active_profile = profile;
>>>> +        }
>>>
>>> Maybe also add a safeguard if all profiles are unavailable, e g like below:
>>>
>>>         if (!c->active_profile) {
>>>                c->active_profile = /* The first, or random, profile,
>>> just something */;
>>>                 pa_log_warn("No available profiles, selecting
>>> unavailable profile %s", c->active_profile->name);
>>>         }
>>
>> What about assert if there is no profile that can be used? It already
>> asserts if the profile hash table is empty which is kind similar
>> situation here when no profile is available so perhaps we should
>> assert?
>>
>
> Hmm. I'm thinking of HDMI only cards which at PA start time are
> unconnected, and then later connected to an HDMI monitor. What will your
> code do in this use case?
>
> But maybe an unconnected HDMI card leads to unavailable ports, but not
> unavailable profiles...

In Bluetooth case there is the 'off' profile which has no sinks or
sources but it is always available, perhaps HDMI can use the same
concept?


-- 
Luiz Augusto von Dentz


More information about the pulseaudio-discuss mailing list