[alsa-devel] ALSA throwing buffers away?

Radivoje Jovanovic radivojejovanovic at gmail.com
Tue Nov 23 18:51:06 CET 2010


I have changed the pointer callback as you suggest.
Unfortunately, the result is still the same. Still the buffer filling is
skipping to fill all the data correctly. I am using Advanced Linux Sound
Architecture Driver Version 1.0.21.
~cheers,
Ogi

On Tue, Nov 23, 2010 at 9:40 AM, Clemens Ladisch <clemens at ladisch.de> wrote:

> Radivoje Jovanovic wrote:
> > > Radivoje Jovanovic wrote:
> > > > I am developing driver for a really simple hardware. Hardware has
> codec that
> > > > supports mono/stereo and the amplifier that supports only one speaker
> so the
> > > > driver has to be mono driver and the codec is setup to manage mono
> data. I
> > > > have setup ALSA with following parameters:
> > > >
> > > > .info =            (SNDRV_PCM_INFO_NONINTERLEAVED |
> > >
> > > Better use SNDRV_PCM_INFO_INTERLEAVED; this is the format used by
> almost
> > > all (stereo) sound cards, and so it is expected even for mono files
> > > (where there actually isn't any difference).
> >
> > I am worried about this approach since if I want to play stereo sound  I
> > would have to increase .channels_max = 2,
>
> No, ALSA can automatically convert the sample format.
>
> > Here is my pointer callback:
> >
> > offset=READ_REG16(AUDIO_CONFIG_DMA_CUR_ADDR_HIGH))<<16) |
> READ_REG16(AUDIO_CONFIG_DMA_CUR_ADDR_LOW);
> >
> > offset = offset - substream->runtime->dma_addr;
>
> This offset looks as if it is in bytes, but you have to return a value
> measured in frames.  Use bytes_to_frames().
>
> >     if (offset >= runtime->buffer_size)
> >         offset = 0;
>
> Remove this check; the ALSA framework already checks this and outputs
> debugging info if this happens.
>
>
> Regards,
> Clemens
>


More information about the Alsa-devel mailing list