On 03.05.2017 12:51, Tanu Kaskinen wrote:
On Wed, 2017-05-03 at 11:23 +0800, Hui Wang wrote:
Today I tested the latest master branch (already including your two
patches), seems it did not fix the problem. Below is my testing detail:

Install ubuntu 16.04 on my laptop.
clone the latest pulseaudio source code, checkout master branch
build the source code: ./autogen.sh;make
kill the existing pulseaudio and run the latest pulseaudio: pulseaudio
--kill && ./src/pulseaudio -vvvnF ./src/default.pa -p $(pwd)/src

On this machine, we have sound cards, sinks and ports like below:

Card#0(HDA INTEL HDMI)-> Sink#0(hdmi-stereo)->hdmi-output(priority: 5900)
Card#1(HDA INTEL PCH)->Sink#1(analog-stereo)->headphones(priority: 9000)
No speaker port at all on the PCH card?

with the new pulseaudio, I can only see one sink (analog-stereo)
through pactl list sinks at the beginning.

After I plug the HDMI cable (headphone is not plugged), I can see two
sinks via pactl list sinks, but the default sink is still the analog-
stereo, here I expect the default sink is hdmi-stereo since the
headphone is not plugged yet.
That's what I'd expect too. Is the headphone port marked as unavailable
as it should?

Then I plug the headphone, and I select the hdmi (hdmi is also
plugged in) as the default sink, after a while I unplug the hdmi
cable, here I expect the default sink is back to analog-stereo since
headphone is still plugged, but the default sink did not switch to
analog-stereo. BTW after I unplug the hdmi cable, I can still see two
sinks.
The default sink is set in pa_core_update_default_sink() in
src/pulsecore/core.c. That function uses the compare_sinks() function,
and the first thing compare_sinks() does is to check if one of the
compared sinks has an unavailable port active. Can you figure out what
goes wrong? Is pa_core_update_default_sink() not called when you plug
in or unplug things, or does pa_core_update_default_sink() really
choose a sink whose active port is unavailable?

Looking through the patch it seems to me that availability changes of a port
do not trigger a recalculation of the default sink. Or am I missing something?

Another similar point, while reading the code of module-switch-on-connect, i
found a possible issue:
When a new sink turns up, pa_core_update_default_sink() is called from
sink_put(). After that, PA_CORE_HOOK_SINK_PUT is fired. Within the hook
in module switch-on-connect, it is checked, if the new sink is the default
sink. If yes, the hook does nothing. Doesn't that mean that if the new
sink has highest priority (and no user default is set), the streams will
not be moved away from the old default sink, because the old default
is lost when pa_core_update_default_sink() is called before the hook?

The same has already been the case before the recent changes, so again
I'm not sure if I am missing something ...

_______________________________________________
pulseaudio-discuss mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to