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@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