[pulseaudio-discuss] understanding PA cork/uncorking scenarios

Colin Guthrie gmane at colin.guthr.ie
Fri Jun 17 01:58:53 PDT 2011


'Twas brillig, and Himanshu Chug at 16/06/11 10:39 did gyre and gimble:
> Thanks Tanu for the clarifications.
> 
> But the doubt is still , who is actually sending the pause(cork) event
> to pulsesink or gst, either or both of these:
> 1. module-x11-cork-request with X11 keyboard events
> 2. src/pulsecore/protocol-native.has sink_input_send_event_cb(),

The latter. Both former is listening for the cork requests on streams.

e.g. in module-x11-cork-request (which I very much think you should
ignore completely and disable in any install as it just gets in the way
and results in very strange behaviour due to non-stateful tracking of
the current state... e.g. by default if a Skype call comes in when you
have e.g. Amarok paused, then Amarok will unpause for you when the call
starts and pause again then it ends... the exact opposite of what you
want!), there is this hook:

    u->hook_slot = pa_hook_connect(
            &m->core->hooks[PA_CORE_HOOK_SINK_INPUT_SEND_EVENT],
            PA_HOOK_NORMAL,
            (pa_hook_cb_t) sink_input_send_event_hook_cb, u);


So the function sink_input_send_event_hook_cb(), is what listens for
corks and then takes appropriate action (sending synthesised keystrokes).


Now the "event" sending stuff is quite generic, with cork and uncork
just examples of the kind of events we currently support. Other events
may include "supported formats changed" (e.g. if you move an mp3
passthrough stream to a sink that does not support mp3 passthrough - the
client has to be informed so they can take appropriate action to do the
decode themselves and start delivering PCM data instead).


So this is the call but it needs to be triggered by something e.g. in
module-cork-music-on-phone:

pa_sink_input_send_event(j, PA_STREAM_EVENT_REQUEST_CORK, NULL);

Here it's ultimately using the protocol native
sink_input_send_event_cb() function to send the request to the client,
but the trigger starts with the above call.

> and where these event is handled in pulsesink (and gst)?  as
> gst_pulsering_stream_event_cb( ) is disabled with flag
> HAVE_PULSE_0_9_15, So I guess
> this event is handled somewhere else,but not sure where?

We covered this in my last reply. HAVE_PULSE_0_9_15 is defined :)

> I am getting one bug, where pulse-audio daemon is terminated, the
> usecase is:
> 
> 1. "phone" stream is ongoing
> 2. "music" stream arrives,
> 
> so expected behavior is music should get corked while phone is active,
> eventually its getting corked sometimes and working fine but not always!


Ahh, interesting... yeah, this is perhaps due to the START_CORKED
flag... streams, when connecting can say "Please start me corked" in
this case, the client will specifically uncork the music stream at the
beginning of playback... Hmm, not quite sure how to deal with this.....


> and sometimes PA daemon gets terminated saying Failed to handle SIGBUS,
> here are few gst logs when starting "music" stream from gst-launch:
> 
> ERROR: from element
> /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstBin:bin0/GstPulseSink:pulsesink0:
> pa_stream_write() failed: Connection terminated
> Additional debug info:
> pulsesink.c(1587): gst_pulseringbuffer_commit ():
> /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstBin:bin0/GstPulseSink:pulsesink0
> Execution ended after 75439452 ns.
> Setting pipeline to PAUSED ...
> Setting pipeline to READY ...
> /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstBin:bin0/GstPulseSink:pulsesink0.GstPad:sink:
> caps = NULL
> Assertion 'pa_atomic_load(&(b)->_ref) > 0' failed at
> pulsecore/memblock.c:590, function pa_memblock_unref(). Aborting.
> Aborted

Ouch. Not sure how best to debug that one.

> I doubt this issue is related to my earlier question, as you mentioned 
> "module-x11-cork-request is a workaround for clients that don't handle
> stream events (a workaround that isn't working very well, I've heard) "?

Yeah, I've disabled x11-cork-request in my packages for a long time and
generally recommend others to do the same.

In fact I thought I had disabled it in git master's
start-pulseaudio-x11, but it seems I didn't. I remember asking about
this to gauge a consensus... but can't find anything on the list... I'll
ask again.

Col


-- 

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
  Tribalogic Limited [http://www.tribalogic.net/]
Open Source:
  Mageia Contributor [http://www.mageia.org/]
  PulseAudio Hacker [http://www.pulseaudio.org/]
  Trac Hacker [http://trac.edgewall.org/]



More information about the pulseaudio-discuss mailing list