[alsa-devel] error in recovery from buffer under-run.

Ashlesha Shintre ashlesha.shintre at gmail.com
Wed May 2 17:26:01 CEST 2007


Hi,

Thanks for the link you emailed earlier.  I tried writing my own code, based
on the how to in the alsa wiki.  I have attached that code with this email.


The problem it faces is a buffer underrun every alternate time, i try
writing to the device.

In my code, to take care of underruns, I do the following:

period_size=64;
buffer is a short int array which is 16000 in length.
every alternate call to snd_pcm_writei is successful but only write in the
vicinity of 1350 frames, instead of size which is initialised to length of
buffer.

Now, in the code below, the snd_pcm_recover function prints a message
indicating a buffer under-run has occured, however, it returns a 0,
indicating success in recovery from the error!

I am not sure how to deal with this -- is there a problem with my ALSA
libraries?
Sorry about the length of this email and thanks again,

Ashlesha.

while(size>(2*period_size))
> {
> frames = snd_pcm_writei (pcm_handle, buffer, size);
> printf("frames returned is %d\n",frames);
> if (frames>0)
>     temp=frames;
> if (frames ==  -32){
>           frames = snd_pcm_recover(pcm_handle, frames, 0);
>           printf("recover returned %d\n",frames);
>           }
> if (frames < 0){
>           printf("snd_pcm_writei failed: %s\n", snd_strerror(frames));
>           return -1;
>           }
> printf("%d frames written\n",frames);
> if(temp>0)
>     size=size-temp;
> }
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: async_ash.c
Type: text/x-csrc
Size: 2764 bytes
Desc: not available
Url : http://mailman.alsa-project.org/pipermail/alsa-devel/attachments/20070502/d73839e0/attachment-0001.c 


More information about the Alsa-devel mailing list