<p><br>
> ><br>
> > For those creative sound cards (e.g. emu10k1, ca0106) which use multi<br>
> > plugin for surround playback<br>
> ><br>
> > It seem that set start_threshold to -1 has no effect on some devices (e.g.<br>
> > multi plugin) , the device seem  automatically started and pulseaudio does<br>
> > not check pcm state when calling snd_pcm_start<br>
> ><br>
> > (alsa-lib)pcm_hw.c: SNDRV_PCM_IOCTL_START failed (-77)<br>
> ><br>
> > Does it mean bug of multi plugin or start_threshold.have no effect on some<br>
> > devices/plugin ?<br>
><br>
> I'm not sure whether the value -1 is valid for start_threshold at<br>
> all.  Usually it's set between 1 and boundary.<br>
><br>
><br>
If zero is not valid stop threshold, I suggest to return error when application set start threshold to zero</p>
<p>Do all sound cards behave the same way when start threshold is set to 1  or any value below period size / buffer size?</p>
<p>Most sound cards have FIFO and  DMA brust size is usually more than 1 frame,  this mean those data in second write won't used by the sound card if the first write and start threshold is less than FIFO threshold or DMA brust size</p>
<p>int snd_pcm_sw_params_set_start_threshold ( snd_pcm_t * pcm,<br>
snd_pcm_sw_params_t * params,<br>
snd_pcm_uframes_t val<br>
)</p>
<p>Set start threshold inside a software configuration container.<br>
Parameters:pcm PCM handle<br>
params Software configuration container<br>
val Start threshold in frames</p>
<p>Returns:<br>
0 otherwise a negative error code</p>
<p>PCM is automatically started when playback frames available to PCM are >= threshold or when requested capture frames are >= threshold</p>
<p>val is snd_pcm_uframes_t which is unsigned and pulseaudio set start threshold to (snd_pcm_uframes_t) -1</p>
<p>if ((err = snd_pcm_sw_params_set_start_threshold(pcm, swparams, (snd_pcm_uframes_t) -1)) < 0) {<br>
        pa_log_warn("Unable to set start threshold: %s\n", pa_alsa_strerror(err));<br>
        return err;<br>
    }</p>
<p>> On the other hand, I have suspicion that it is an ALSA bug that you are possibly trying to work around. Is it that no other plugins end up in the already-running state, or that all other plugins ignore snd_pcm_start() when they are already started?</p>
<p>the error occur becauser snd_pcm_start() is called after the stream has been started, </p>
<p>SNDRV_PCM_IOCTL_START failed (-77)</p>
<p>The error can be reproduced using snd-dummy to enumerate emu10k1</p>
<p>1) sudo insmod snd-dummy.ko index=2 model=emu10k1</p>
<p>2) add the following entry to /usr/share/alsa/cards/aliases.conf</p>
<p>Dummy cards.EMU10K1</p>
<p>aplay -L should list  front, rear,clfe, ..surround40,. surround71 devices of card 2</p>
<p>speaker-test -c4 -t wav -d -D surround40:2</p>
<p>3)restart pulseaudio in verbose mode and select card 2 Dummy in sound preference and surround40 profile</p>
<p>The enumerated emu10k1 still support 44100Hz but does not have all controls of emu10k1</p>