Track and export current state
Addresses #11 (closed)
Needed for https://gitlab.gnome.org/GNOME/calls/-/issues/392
There are a few things though that could use some feedback:
-
Bikeshed territory: Naming of properties and public API functions It could very well be argued that instead of f.e.went withEnabledSpeaker
(based on theEnableSpeaker
method) the property should rather be calledSpeakerEnabled
which would lead tocall_audio_get_speaker_enabled
or potentially even bettercall_audio_is_speaker_enabled
. The same would hold true for for the microphone mute state, but on the other hand I prefer*_get_selected_mode()
instead of*_get_mode_selected()
AudioMode
,SpeakerState
andMicState
as suggested by @agx1 - I've noticed that cad-pulse.c unmutes the mic when we're setting the audio mode to
0
, but it doesn't do the same in the speaker case. Either we leave this behaviour as desired, keep track of speaker state changes in the context of audio mode changes, i.e. only reset the speaker if it was enabled while we were in call mode - this does have one caveat in that Calls will not want to switch audio profiles when doing VoIP calls which leaves us the option -
For this MR to be actually correct, we would need to query the state from PA when the daemon starts because a crash would leave the state inconsistent. I don't think this should be a huge problem though as long as callaudio doesn't crash, so if this is alright I would leave this for a follow up MR. Additionally: I don't know if this querying would need to be audio backend specific a.k.a pulse vs pipewire. Not really having dug into pipewire I would naively expect there to be some compatibility layers handling PA->pipewire transparently.Handled by having an "unknown" state. -
More even: We currently would (probably? didn't check the code nor tested it) not notice if any of the state changes outside of callaudiod, say the user mutes the mic inHandled by having an "unknown" state.pactl
,pavucontrol
or similar
Edited by Evangelos Ribeiro Tzaras