[pulseaudio-discuss] Should corking be acknowledged by pa_sink_suspend()?
Ville Sundell
ville.sundell at nomovok.com
Mon Nov 10 06:29:13 PST 2014
Hello again!
I've traced the invocation of pa_sink_suspend(), and the erroneous
uncorking seems to lead to module-suspend-on-idle.so. Going to dig more
into that.
However, it seems that PA_SINK_SUSPENDED and PA_SINK_INPUT_CORKED are
accidentally sharing the same enum placement, could it be that situation
where suspending cause (s->suspend_cause) is 0, and sink is already
suspended, should be handled anyway? (just changing PA_SINK_INPUT_CORKED
to PA_SINK_SUSPENDED?)
_Ville
On 07.11.2014 11:10, Ville Sundell wrote:
> Thank you for the pointers, I will check these points and let you guys
> know :)
>
> _Ville
>
> On 07.11.2014 09:13, Arun Raghavan wrote:
>> On 5 November 2014 15:44, Ville Sundell <ville.sundell at nomovok.com>
>> wrote:
>>> On 05.11.2014 11:57, Arun Raghavan wrote:
>>>> On 5 November 2014 15:04, Ville Sundell <ville.sundell at nomovok.com>
>>>> wrote:
>>>>> Greetings everyone!
>>>>> I am having some problems with corking: pulseaudio policy enforcer
>>>>> will
>>>>> cork
>>>>> all the streams which belongs to a corked group. However, despite the
>>>>> fact
>>>>> corking itself happens correctly (via pa_sink_input_cork() at
>>>>> pulseaudio-policy-enforcement:src/policy-group.c) the stream will
>>>>> not end
>>>>> up
>>>>> being corked, instead it will be set to PA_SINK_RUNNING.
>>>> Not sure what code base this is, but this policy enforcement is not
>>>> part of PulseAudio upstream. I guess this comes from Nemo or Tizen?
>>> That is true, policy enforcer is implemented as a PulseAudio module,
>>> and is
>>> used by Nemo and other similar systems.
>>>>
>>>> Either way, there seems to be some confusion between concepts here.
>>>> The idea of corking applies to sink inputs (pa_sink_input on the
>>>> server side, pa_stream on the client side). The idea of being
>>>> suspended applies to sinks (pa_sink). Could you explain your problem
>>>> again, and what the symptoms are, keeping this in mind?
>>> Thank you for clarifying this! The problem is as follows:
>>> 1) Program, which is part of a group which is already corked, opens
>>> a stream
>>> 2) Policy enforcer notices this, and corks the stream right away,
>>> like this:
>>> pa_sink_input_cork(si, group->corked);
>>> 3) PulseAudio corks the stream correctly, up to this point
>>> everything works
>>> as expected
>>> 4) However, pa_sink_suspend() gets called without a cause
>>> (s->suspend_cause), it tries to return it to a normal state
>>> (PA_SINK_RUNNING
>>> or PA_SINK_IDLE), but here the state should be and stay as
>>> SINK_INPUT_CORKED
>> It would be good to see what the call stack leading to
>> pa_sink_suspend() is. Please note again that PA_SINK_INPUT_CORKED is
>> not a state that applies to a sink. The sink would either be in
>> PA_SINK_SUSPENDED or _IDLE or _RUNNING.
>>
>>> 5) This will lead to uncorking of the stream which should be corked
>>> (after
>>> applying the attached patch, this stream stays corked)
>> Changes in sink state should not cause sink inputs to uncork under the
>> normal course of events (I haven't looked at your policy enforcement
>> code, so don't know if that's triggering something).
>>
>> Regards,
>> Arun
>> _______________________________________________
>> pulseaudio-discuss mailing list
>> pulseaudio-discuss at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
>
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
More information about the pulseaudio-discuss
mailing list