<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/3.24.1.1">
</HEAD>
<BODY>
&gt;&gt;The requirement that internal pause an application is a natural to audio manager of embedded system.<BR>
<BR>
That would be what you'd think but you would be surprised what a hack some of these things are. It's what I do for a living. Certainly in the products I work on, that kind of logic is left to the application layer to work out. The audio manager is surprisingly dumb.<BR>
<BR>
I'm not saying that's how Apple do it, but I wouldn't be surprised.<BR>
<BR>
Mark<BR>
<BR>
<BR>
On Wed, 2009-01-21 at 15:55 -0600, pl bossart wrote:
<BLOCKQUOTE TYPE=CITE>
    I don't disagree with technical findings. Still, it would be sad if we have no means to do what the iPhone does today. Cheers. Pierre
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    &nbsp;
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    From the iPhone 'missing manual' book:
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    If a phone call comes in, the music fades, and you hear your chosen ringtone&#8213;<BR>
    through your earbuds, if you're wearing them. Squeeze the clicker on<BR>
    the earbud cord, or tap the Sleep/Wake switch, to answer the call. When the<BR>
    call ends, the music fades back in, right where it had stopped.
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    <BR>
    &nbsp;
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    On Tue, Jan 20, 2009 at 8:51 PM, Zhang, Xing Z &lt;<A HREF="mailto:xing.z.zhang@intel.com">xing.z.zhang@intel.com</A>&gt; wrote:<BR>
    <BLOCKQUOTE>
        Yes, I also agree with Lennart's point.
    </BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    <BLOCKQUOTE>
        &gt;&gt;I agree with you that pausing may create timing havoc on the client; but we are missing a generic protocol to notify the clients and implement this legitimate use case.<BR>
        <BR>
    </BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    <BLOCKQUOTE>
        I am afraid there is no way to notify applications using ALSA due to the PA client is libasound_module_pcm_pulse.so at this time.<BR>
        <BR>
        IMO, PA is for general OS but not for embedded system now. The requirement that internal pause an application is a natural to audio manager of embedded system. I guess we can only cover applications who will response the message &quot;you should do pause now&quot; from audio manager.<BR>
        ________________________________________<BR>
        From: <A HREF="mailto:pulseaudio-discuss-bounces@mail.0pointer.de">pulseaudio-discuss-bounces@mail.0pointer.de</A> [mailto:<A HREF="mailto:pulseaudio-discuss-bounces@mail.0pointer.de">pulseaudio-discuss-bounces@mail.0pointer.de</A>] On Behalf Of pl bossart<BR>
        Sent: 2009&#24180;1&#26376;21&#26085; 0:13<BR>
        To: General PulseAudio Discussion
    </BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    <BLOCKQUOTE>
        Subject: Re: [pulseaudio-discuss] why command_cork_playback_stream() will be invoked many times?<BR>
        <BR>
        <BR>
    </BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    <BLOCKQUOTE>
        <BR>
    </BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    <BLOCKQUOTE>
        Hi Lennart,<BR>
        Here is the use case Xing is referring to: you are listening to music, and a VoIP call starts. The user may not want to mix the music and the speech call.<BR>
        <BR>
        So the idea is to pause the music while the call takes place, and resume the music once the call finishes. PulseAudio receives both streams, and it would seem natural to configure said behavior in a PulseAudio module. So we either need the ability to pause a stream within PulseAudio, or we need a means to inform the client they need to pause.<BR>
        <BR>
        I agree with you that pausing may create timing havoc on the client; but we are missing a generic protocol to notify the clients and implement this legitimate use case.<BR>
        Regards,<BR>
        Pierre Bossart<BR>
        On Sun, Jan 18, 2009 at 11:16 AM, Lennart Poettering &lt;<A HREF="mailto:lennart@poettering.net">lennart@poettering.net</A>&gt; wrote:<BR>
        On Fri, 09.01.09 21:10, Zhang, Xing Z (<A HREF="mailto:xing.z.zhang@intel.com">xing.z.zhang@intel.com</A>) wrote:<BR>
        <BR>
        &gt; Hi experts:<BR>
        <BR>
        &gt; I worked on an audiomanager project based on PulseAudio. Now I am<BR>
        &gt; blocked by a command_cork_playback_stream() issue. &nbsp;In our design,<BR>
        &gt; an application may be corked when connects to pulseaudio if its<BR>
        &gt; priority is low. I set a hook on PA_CORE_HOOK_SINK_INPUT_PUT and<BR>
        &gt; invoke pa_sink_input_cork(..., TRUE). Unfortunately it doesn't<BR>
        &gt; work. By GDB, I found application will call<BR>
        &gt; command_cork_playback_stream() which invokes pa_sink_input_cork(...,<BR>
        &gt; FALSE) several times, this make my hook is of no effect. I don't<BR>
        &gt; look into PA for ALSA plugin, anyone know why<BR>
        &gt; command_cork_playback_stream() need be called so frequently during<BR>
        &gt; app initialization?<BR>
        <BR>
        Hmm, I think you are confusing a few things here.<BR>
        <BR>
        command_cork_playback_stream() is the code that dispatches client<BR>
        requests for corking/uncorking (when done via the native protocol). It<BR>
        is not used when corking something internally as for example by a hook<BR>
        function.<BR>
        <BR>
        Pausing a stream (i.e. corking) should be something that is controlled<BR>
        exclusively by the client. You should not intefere with it from inside<BR>
        the server. There is a state machine in the PA client code that<BR>
        follows the cork state. If you change the state underneath it might<BR>
        become invalid. Also it might confuse client applications due to<BR>
        the paused timing.<BR>
        <BR>
        Lennart<BR>
        <BR>
        --<BR>
        Lennart Poettering &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Red Hat, Inc.<BR>
        lennart [at] poettering [dot] net &nbsp; &nbsp; &nbsp; &nbsp; ICQ# 11060553<BR>
        <A HREF="http://0pointer.net/lennart/">http://0pointer.net/lennart/</A> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GnuPG 0x1A015CC4<BR>
        _______________________________________________<BR>
        pulseaudio-discuss mailing list<BR>
        <A HREF="mailto:pulseaudio-discuss@mail.0pointer.de">pulseaudio-discuss@mail.0pointer.de</A><BR>
        <A HREF="https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss">https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss</A><BR>
        <BR>
        _______________________________________________<BR>
        pulseaudio-discuss mailing list<BR>
        <A HREF="mailto:pulseaudio-discuss@mail.0pointer.de">pulseaudio-discuss@mail.0pointer.de</A><BR>
        <A HREF="https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss">https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss</A><BR>
        <BR>
    </BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    <BR>
<PRE>
_______________________________________________
pulseaudio-discuss mailing list
<A HREF="mailto:pulseaudio-discuss@mail.0pointer.de">pulseaudio-discuss@mail.0pointer.de</A>
<A HREF="https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss">https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss</A>
</PRE>
</BLOCKQUOTE>
</BODY>
</HTML>