[alsa-devel] Accessing alsa user space buffer from external io type plugin

sandeep lahane sandeep.lahane at gmail.com
Tue Mar 25 02:43:31 CET 2008


On Mon, Mar 24, 2008 at 6:41 PM, sandeep lahane <sandeep.lahane at gmail.com>
wrote:

>
>
> On Mon, Mar 24, 2008 at 4:17 PM, Pharaoh . <pharaoh137 at gmail.com> wrote:
>
> >
> >
> > On Mon, Mar 24, 2008 at 4:13 PM, sandeep lahane <
> > sandeep.lahane at gmail.com> wrote:
> >
> > > Hello,
> > >
> > > I am debugging an userspace external io type plugin, written for an
> > > ARM
> > > based board where the plugin
> > > interacts with DSP directly using shared memory.
> > >
> > > Every time I have to send period_size data to the DSP, I have my own
> > > write/read methods to do so.
> > >
> > > I am having a problem accessing the alsa ring buffer, my transfer
> > > function
> > > looks like following.
> > >
> > >
> > > static   char * temp;
> > > static snd_pcm_sframes_t alsa_transfer(snd_pcm_ioplug_t *io,
> > >                   const snd_pcm_channel_area_t *areas,
> > >                   snd_pcm_uframes_t offset,
> > >                   snd_pcm_uframes_t size)
> > > {
> > >
> > >           ......
> > >
> > >         temp = malloc(period_size);
> > >         memcpy(temp,  unsigned char *)areas->addr + (areas->first +
> > > areas->step * offset) / 8, period_size);
> > >          write_to_dsp(temp, period_size);
> > >          .......
> > > }
> > >
> > > All the book keeping is done properly, the first chunk of data is sent
> > > properly to DSP and pointer() returns correct value,
> > > next time when transfer is called, the memcpy gives segfault. ALSA
> > > buffer is
> > > an interleaved buffer and I am not using mmap
> > > mode. Any idea what might be wrong?
> > >
> > > When I do something like this:
> > >        memcpy(temp,  "test data test data", period_size);
> > > the data is sent properly to DSP, but alsa buffer data is not getting
> > > accessed properly.
> > >
> > >
> > >
> > >
> > >
> > >
> > > Regards,
> > > Sandeep.
> > > _______________________________________________
> > > Alsa-devel mailing list
> > > Alsa-devel at alsa-project.org
> > > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> > >
> >
> >
> >
> > temp is actually malloc'd in hw_params and freed properly, so please
> > ignore the details like whether it is freed etc or not.
> >
>
>
>
> If I change the optimization level to O3, all the values passed from alsa
> upper layer to my plugin are wrong. The reason I tried changing optimization
> levels is that I have faced problems with ARM gcc 4.1.1. before when
> compiled at O levels more than zero.  Are there any known problems with ARM
> gcc 4.1.1 and alsa-lib 1.0.13?
>
> --
>
> Regards,
> Sandeep.


Following values are wrong in transfer callback,
                  const snd_pcm_channel_area_t *areas,
                  snd_pcm_uframes_t offset,
                  snd_pcm_uframes_t size


-- 

Regards,
Sandeep.


More information about the Alsa-devel mailing list