[alsa-devel] alsa-lib: Rate conversion broken for non-S16?
Mark Hills
mark at pogo.org.uk
Wed Aug 11 10:04:32 CEST 2010
Hi, does anybody have any thoughts on my email below? The rate conversion
code looks stable and untouched for a while.
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