[alsa-devel] XRUN happens too often.
Rong-Jhe
r93922118 at ntu.edu.tw
Tue Apr 8 13:40:54 CEST 2008
> A sample in 16-bit, two channels is 4 bytes.
> I allocate a audio data of 9408x4=37632 bytes.
>
> audio_data=malloc(buffer_size*4);
>
> This audio_data buffer will receive audio data from the network.
> If this buffer is full, I use snd_pcm_writei( ) to put the buffer into the
pcm.
>
> snd_pcm_sframes_t frames;
> snd_pcm_t *handle;
>
> while((frame=snd_pcm_writei(handle, audio_data, buffer_size))<0)
> {
> if(frames==-EPIPE)
> snd_pcm_prepare(handle);
> else
> printf("snd_pcm_writei error %d\n", frames);
> }
>
> The codes states that I put the entire buffer into the pcm at each time. The
> pcm use 10 periods to perform this buffer. The program can work normally.
>
> If the sampling rate is changed, the program will encounter XRUN frequently.
>
> The follows are the parameters that I read from the pcm after setting
sampling
> rate to 48000.
> sampling rate = 48000 bps
> period time = 21333 us
> period size = 1024 frames
> buffer time = 213330 us
> buffer size = 10240 frames
> audio_data=malloc(buffer_size*4); //10240x4=40960
>
> I also put the entire buffer into the pcm at each time, but snd_pcm_writei( )
> will return -PIPE frequently.
>
> What is the problem?
>
----------------------------------------------------------
I use snd_pcm_avail_update( ) to show the number of frames that can write into
the pcm before using snd_pcm_writei( ).
I found that sometimes snd_pcm_avail_update( ) will return more than buffer
size.
EX. buffer size = 10240, sometimes snd_pcm_avail_update( ) 10274 > 10240.
Dose this cause XRUN?
How to improve it ?
More information about the Alsa-devel
mailing list