[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