[alsa-devel] ALSA throwing buffers away?

Clemens Ladisch clemens at ladisch.de
Tue Nov 23 18:40:06 CET 2010


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