[alsa-devel] Accessing alsa user space buffer from external io type plugin
sandeep lahane
sandeep.lahane at gmail.com
Thu Mar 27 22:52:28 CET 2008
On Mon, Mar 24, 2008 at 6:43 PM, sandeep lahane <sandeep.lahane at gmail.com>
wrote:
>
>
> 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.
Sorted out. Return value of transfer was wrong. Thanks.
--
Regards,
Sandeep.
More information about the Alsa-devel
mailing list