Hi Colin<br><br>I did further debugging for the use-case, music over phone i.e<br><br>1. &quot;phone&quot; stream is ongoing<br>2. &quot;music&quot; stream arrives,<br><br>I observed that the music stream is never corked , I assumed that it was working sometimes but actually the music stream gets &quot;muted&quot; just before call to cork, as seen in this code from module-cork-music-on-phone.c in apply_cork() function:<br>
<br>                    if (cork &amp;&amp; !corked) {<br>                        pa_hashmap_put(u-&gt;cork_state, ignore, PA_INT_TO_PTR(1));<br>                        pa_sink_input_set_mute(ignore, TRUE, FALSE);<br>                        pa_sink_input_send_event(ignore, PA_STREAM_EVENT_REQUEST_CORK, NULL);<br>
                        return;<br>                    }<br><br>when I commented pa_sink_input_set_mute() , stream got mixed with phone !!! and I assumed that the use-case is working fine sometimes!!! sad!<br><br>which means that as you mention for &quot;PA_STREAM_START_CORKED flag... streams, when connecting can say &quot;Please start me corked&quot;<br>
have this problem always and this is a bug in the code. ?? which might needs to be handle somehow..gracefully.<br><br>any comments are welcome?<br><br>Best Regards,<br>Himanshu<br><br><br><br><div class="gmail_quote">On Fri, Jun 17, 2011 at 2:28 PM, Colin Guthrie <span dir="ltr">&lt;<a href="mailto:gmane@colin.guthr.ie">gmane@colin.guthr.ie</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">&#39;Twas brillig, and Himanshu Chug at 16/06/11 10:39 did gyre and gimble:<br>
<div class="im">&gt; Thanks Tanu for the clarifications.<br>
&gt;<br>
&gt; But the doubt is still , who is actually sending the pause(cork) event<br>
&gt; to pulsesink or gst, either or both of these:<br>
&gt; 1. module-x11-cork-request with X11 keyboard events<br>
&gt; 2. src/pulsecore/protocol-native.has sink_input_send_event_cb(),<br>
<br>
</div>The latter. Both former is listening for the cork requests on streams.<br>
<br>
e.g. in module-x11-cork-request (which I very much think you should<br>
ignore completely and disable in any install as it just gets in the way<br>
and results in very strange behaviour due to non-stateful tracking of<br>
the current state... e.g. by default if a Skype call comes in when you<br>
have e.g. Amarok paused, then Amarok will unpause for you when the call<br>
starts and pause again then it ends... the exact opposite of what you<br>
want!), there is this hook:<br>
<br>
    u-&gt;hook_slot = pa_hook_connect(<br>
            &amp;m-&gt;core-&gt;hooks[PA_CORE_HOOK_SINK_INPUT_SEND_EVENT],<br>
            PA_HOOK_NORMAL,<br>
            (pa_hook_cb_t) sink_input_send_event_hook_cb, u);<br>
<br>
<br>
So the function sink_input_send_event_hook_cb(), is what listens for<br>
corks and then takes appropriate action (sending synthesised keystrokes).<br>
<br>
<br>
Now the &quot;event&quot; sending stuff is quite generic, with cork and uncork<br>
just examples of the kind of events we currently support. Other events<br>
may include &quot;supported formats changed&quot; (e.g. if you move an mp3<br>
passthrough stream to a sink that does not support mp3 passthrough - the<br>
client has to be informed so they can take appropriate action to do the<br>
decode themselves and start delivering PCM data instead).<br>
<br>
<br>
So this is the call but it needs to be triggered by something e.g. in<br>
module-cork-music-on-phone:<br>
<br>
pa_sink_input_send_event(j, PA_STREAM_EVENT_REQUEST_CORK, NULL);<br>
<br>
Here it&#39;s ultimately using the protocol native<br>
sink_input_send_event_cb() function to send the request to the client,<br>
but the trigger starts with the above call.<br>
<div class="im"><br>
&gt; and where these event is handled in pulsesink (and gst)?  as<br>
&gt; gst_pulsering_stream_event_cb( ) is disabled with flag<br>
&gt; HAVE_PULSE_0_9_15, So I guess<br>
&gt; this event is handled somewhere else,but not sure where?<br>
<br>
</div>We covered this in my last reply. HAVE_PULSE_0_9_15 is defined :)<br>
<div class="im"><br>
&gt; I am getting one bug, where pulse-audio daemon is terminated, the<br>
&gt; usecase is:<br>
&gt;<br>
&gt; 1. &quot;phone&quot; stream is ongoing<br>
&gt; 2. &quot;music&quot; stream arrives,<br>
&gt;<br>
&gt; so expected behavior is music should get corked while phone is active,<br>
&gt; eventually its getting corked sometimes and working fine but not always!<br>
<br>
<br>
</div>Ahh, interesting... yeah, this is perhaps due to the START_CORKED<br>
flag... streams, when connecting can say &quot;Please start me corked&quot; in<br>
this case, the client will specifically uncork the music stream at the<br>
beginning of playback... Hmm, not quite sure how to deal with this.....<br>
<div class="im"><br>
<br>
&gt; and sometimes PA daemon gets terminated saying Failed to handle SIGBUS,<br>
&gt; here are few gst logs when starting &quot;music&quot; stream from gst-launch:<br>
&gt;<br>
&gt; ERROR: from element<br>
&gt; /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstBin:bin0/GstPulseSink:pulsesink0:<br>
&gt; pa_stream_write() failed: Connection terminated<br>
&gt; Additional debug info:<br>
&gt; pulsesink.c(1587): gst_pulseringbuffer_commit ():<br>
&gt; /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstBin:bin0/GstPulseSink:pulsesink0<br>
&gt; Execution ended after 75439452 ns.<br>
&gt; Setting pipeline to PAUSED ...<br>
&gt; Setting pipeline to READY ...<br>
&gt; /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstBin:bin0/GstPulseSink:pulsesink0.GstPad:sink:<br>
&gt; caps = NULL<br>
&gt; Assertion &#39;pa_atomic_load(&amp;(b)-&gt;_ref) &gt; 0&#39; failed at<br>
&gt; pulsecore/memblock.c:590, function pa_memblock_unref(). Aborting.<br>
&gt; Aborted<br>
<br>
</div>Ouch. Not sure how best to debug that one.<br>
<div class="im"><br>
&gt; I doubt this issue is related to my earlier question, as you mentioned<br>
&gt; &quot;module-x11-cork-request is a workaround for clients that don&#39;t handle<br>
&gt; stream events (a workaround that isn&#39;t working very well, I&#39;ve heard) &quot;?<br>
<br>
</div>Yeah, I&#39;ve disabled x11-cork-request in my packages for a long time and<br>
generally recommend others to do the same.<br>
<br>
In fact I thought I had disabled it in git master&#39;s<br>
start-pulseaudio-x11, but it seems I didn&#39;t. I remember asking about<br>
this to gauge a consensus... but can&#39;t find anything on the list... I&#39;ll<br>
ask again.<br>
<div class="im"><br>
Col<br>
<br>
<br>
--<br>
<br>
Colin Guthrie<br>
gmane(at)<a href="http://colin.guthr.ie" target="_blank">colin.guthr.ie</a><br>
<a href="http://colin.guthr.ie/" target="_blank">http://colin.guthr.ie/</a><br>
<br>
Day Job:<br>
  Tribalogic Limited [<a href="http://www.tribalogic.net/" target="_blank">http://www.tribalogic.net/</a>]<br>
Open Source:<br>
  Mageia Contributor [<a href="http://www.mageia.org/" target="_blank">http://www.mageia.org/</a>]<br>
  PulseAudio Hacker [<a href="http://www.pulseaudio.org/" target="_blank">http://www.pulseaudio.org/</a>]<br>
  Trac Hacker [<a href="http://trac.edgewall.org/" target="_blank">http://trac.edgewall.org/</a>]<br>
<br>
_______________________________________________<br>
</div><div><div></div><div class="h5">pulseaudio-discuss mailing list<br>
<a href="mailto:pulseaudio-discuss@lists.freedesktop.org">pulseaudio-discuss@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss" target="_blank">http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss</a><br>
</div></div></blockquote></div><br>