[alsa-devel] alsa-lib: Rate conversion broken for non-S16?

Takashi Iwai tiwai at suse.de
Wed Aug 11 10:59:59 CEST 2010


At Wed, 11 Aug 2010 09:04:32 +0100 (BST),
Mark Hills wrote:
> 
> Hi, does anybody have any thoughts on my email below? The rate conversion 
> code looks stable and untouched for a while.

I guess it's a missing support of 3-byte formats in 16bit conversion,
so not specific to rate plugin.

Adding the support shouldn't be too hard, since it's already found
in 32bit conversion.


thanks,

Takashi

> 
> Thanks
> 
> On Sun, 1 Aug 2010, Mark Hills wrote:
> 
> > I have a device (snd-usb-caiaq) whose native sample format is S24_3BE. 
> > When sample rate conversion is used, the audio becomes near silent, 
> > distorted, and only in the left channel.
> > 
> > It is reproducable with aplay (see example below). Recording is not 
> > affected. Playback is correct if only format conversion is used.
> > 
> > It looks something is causing the incorrect put function to be used by the 
> > rate conversion.
> > 
> > I traced it to linear_expand() and others, alsa-lib-src/pcm_rate_linear.c.
> > 
> > Forcing the function to put S16 format into the destination buffer allows, 
> > suprisingly, the sound to be heard correctly and at full volume from both 
> > aplay and xwax:
> > 
> >   if (rate->put_idx == 10)
> >       rate->put_idx = 6
> > 
> > I suspected that linear_init() is looking in the wrong place to choose the 
> > attributes for the rate conversion. After some time spent I cannot see it.
> > 
> > But is there any reason that the output buffer for the rate conversion 
> > would not be in S24_3BE? And for the rate conversion to be misinformed?
> > 
> > $ uname -s -r -v -p -i -m
> > Linux 2.6.34.1-mh #83 SMP PREEMPT Wed Jul 21 23:25:33 BST 2010 i686 pentium4 i386
> > 
> > $ alsacap
> > Card 0, ID `Audio8DJ', name `Audio 8 DJ'
> >   Device 0, ID `Audio 8 DJ', name `Audio 8 DJ', 4 subdevices (4 available)
> >     2 channels, sampling rate 44100..96000 Hz
> >     Sample formats: S24_3BE
> >       Subdevice 0, name `subdevice #0'
> >       Subdevice 1, name `subdevice #1'
> >       Subdevice 2, name `subdevice #2'
> >       Subdevice 3, name `subdevice #3'
> > 
> > $ aplay -v -D plughw:Audio8DJ,0,0 halcyon-24000.wav 
> > Playing WAVE 'halcyon-24000.wav' : Signed 16 bit Little Endian, Rate 24000 Hz, Stereo
> > Plug PCM: Rate conversion PCM (48000, sformat=S24_3BE)
> > Converter: linear-interpolation
> > Protocol version: 10002
> > Its setup is:
> >   stream       : PLAYBACK
> >   access       : RW_INTERLEAVED
> >   format       : S16_LE
> >   subformat    : STD
> >   channels     : 2
> >   rate         : 24000
> >   exact rate   : 24000 (24000/1)
> >   msbits       : 16
> >   buffer_size  : 10922
> >   period_size  : 2730
> >   period_time  : 113770
> >   tstamp_mode  : NONE
> >   period_step  : 1
> >   avail_min    : 2730
> >   period_event : 0
> >   start_threshold  : 10922
> >   stop_threshold   : 10922
> >   silence_threshold: 0
> >   silence_size : 0
> >   boundary     : 715784192
> > Slave: Hardware PCM card 0 'Audio 8 DJ' device 0 subdevice 0
> > Its setup is:
> >   stream       : PLAYBACK
> >   access       : MMAP_INTERLEAVED
> >   format       : S24_3BE
> >   subformat    : STD
> >   channels     : 2
> >   rate         : 48000
> >   exact rate   : 48000 (48000/1)
> >   msbits       : 24
> >   buffer_size  : 21845
> >   period_size  : 5461
> >   period_time  : 113770
> >   tstamp_mode  : NONE
> >   period_step  : 1
> >   avail_min    : 5461
> >   period_event : 0
> >   start_threshold  : 21844
> >   stop_threshold   : 21845
> >   silence_threshold: 0
> >   silence_size : 0
> >   boundary     : 1431633920
> >   appl_ptr     : 0
> >   hw_ptr       : 0
> > 
> > 
> 
> -- 
> Mark
> 


More information about the Alsa-devel mailing list