[alsa-devel] SEGFAULT : snd_pcm_mmap_begin/commit
David Henningsson
david.henningsson at canonical.com
Tue Nov 16 09:59:09 CET 2010
On 2010-11-16 09:44, Irfan Shaikh wrote:
> Hello All,
>
> I have been facing dificulty in using snd_pcm_mmap_begin and snd_pcm_mmap_commit.
> Shows Seg fault as pointed by comment in code below.
> Please tell me what wrong i am doing and how do i correct.
>
> /###################################################################################/
> unsigned int count = (alsaParams->frames/(((alsaParams->bit_per_sample)*(alsaParams->num_channel)) / 8));
> unsigned char *data = alsaParams->data;https://owa.sasken.com/owa/?ae=Item&t=IPM.Note&a=New#
> snd_pcm_sframes_t frames_available, frames_transmit;
> const snd_pcm_channel_area_t *area;
> snd_pcm_uframes_t offset;
> char *outbuffer;
> int result;
>
> /*available space in audio-buffer to write to*/
> frames_available = snd_pcm_avail_update(alsaParams->pcm_handle);
>
> /*
> * prepare the areas
> * and get back area, offset and frames_transmit
> * frames_transmit gives back the REAL value of available frames which could be written to in the mmaped-area
> * frames_transmit are less than frames_available
> */
> frames_transmit = frames_available;
>
> snd_pcm_mmap_begin(alsaParams->pcm_handle,&area,&offset,&frames_transmit);
>
> /*calculates the mmaped-buffer which could be written to*/
> outbuffer = ((char *) area->addr + (area->first + area->step * offset)/ 8); // ****** SEGFAULT *******
Well, the only pointer dereference is to area, so area has an invalid
pointer. Please check the return value of snd_pcm_mmap_begin to see why.
>
> /*gives back the virtually written (writable) frames which should be always == frames_transmit*/
> result = snd_pcm_mmap_commit(alsaParams->pcm_handle, offset, frames_transmit);
>
> memcpy(outbuffer, data, count); //data is actual data
Hmm, I've haven't used snd_pcm_mmap_* in a long time, but shouldn't the
memcpy be above snd_pcm_mmap_commit? Second, if you're using memcpy, why
don't settle with snd_pcm_writei in the first place?
--
David Henningsson, Canonical Ltd.
http://launchpad.net/~diwic
More information about the Alsa-devel
mailing list