At Thu, 20 Sep 2007 10:14:27 -0400, J. Scott Merritt wrote:
On Wed, 19 Sep 2007 16:17:55 -0700 "Sheng (Sean) Liu" shengl@uci.edu wrote:
- The control point here the start threshold, which defines the number of
frames of space/data necessary to start the device automatically. If set to some value other than zero for playback, it is necessary to prefill the playback buffer before the device will start. If set to zero, the first data written to the device (or first attempt to read from a capture stream) will start the device.
My question: what does he means on " If set to zero"? Does anyone know which parameter of which API should be set to zero?
I believe this would be snd_pcm_sw_params_set_start_threshold.
- You can also start the device explicitly using snd_pcm_start, but this
requires buffer prefilling in the case of the playback stream. If you attempt to start the stream without doing this, you will get -EPIPE as a return code, indicating that there is no data waiting to deliver to the playback hardware buffer.
My question: Is there anything to be done before calling snd_pcm_start in the case of capturing stream? If there is, what are they?
I use: snd_pcm_open SetUpHwParams () ... /* lots of snd_pcm_hw_params_set ... calls */ SetUpSwParams () ... /* lots of snd_pcm_sw_params_set ... calls */ snd_pcm_prepare snd_pcm_start
snd_pcm_prepare() can be omitted in this case. After snd_pcm_hw_params(), the stream is set to PREPARED state. This isn't changed after snd_pcm_sw_params(), too.
snd_pcm_prepare() is required to recover the stream from XRUN or any other errors. But, for the recovery purpose, we have now snd_pcm_recover() as a generic solution, too.
Takashi