[alsa-devel] snd_pcm_set_params faild on set_buffer_time_near and set_period_time_near

Martin Geier martin.geier at streamunlimited.com
Tue Jul 21 10:52:01 CEST 2015


Hallo,

I tried to configure alsa device with snd_pcm_set_params function, 
requested
parameters was:
channel 2, rate: 22050, soft_resample: 1, latency: 50000

Function snd_pcm_hw_params_set_buffer_time_near and 
snd_pcm_hw_param_set_near
is called with:
min: 50000, max: 50000, mindir: 0, maxdir: -1

and input params was:

ACCESS:  RW_INTERLEAVED
FORMAT:  S16_LE
SUBFORMAT:  STD
SAMPLE_BITS: 16
FRAME_BITS: 32
CHANNELS: 2
RATE: 22050
PERIOD_TIME: (362 743039)
PERIOD_SIZE: [8 16384]
PERIOD_BYTES: [32 65536]
PERIODS: [2 19]
BUFFER_TIME: (725 1486078)
BUFFER_SIZE: [16 32768]
BUFFER_BYTES: [64 131072]
TICK_TIME: ALL

unfortunately, this function fails, on function snd_pcm_hw_param_set_first:

ALSA ERROR hw_params: set_near (BUFFER_TIME)
            value = 50000 : Invalid argument
ACCESS:  RW_INTERLEAVED
FORMAT:  S16_LE
SUBFORMAT:  STD
SAMPLE_BITS: 16
FRAME_BITS: 32
CHANNELS: 2
RATE: 22050
PERIOD_TIME: (4580 5533)
PERIOD_SIZE: NONE
PERIOD_BYTES: [404 488]
PERIODS: 10
BUFFER_TIME: (50022 50023)
BUFFER_SIZE: 1103
BUFFER_BYTES: 4412
TICK_TIME: ALL

This shouldn't be problem because in snd_pcm_set_params is
snd_pcm_hw_params_set_period_time_near called.
This function should be called with same params as 
snd_pcm_hw_params_set_buffer_time_near
but the input params are:

snd_pcm_hw_param_set_near: min: 12500, max: 12500, mindir: 0, maxdir: -1
hw_params: snd_pcm_hw_param_set_near (PERIOD_TIME)
ACCESS:  RW_INTERLEAVED
FORMAT:  S16_LE
SUBFORMAT:  STD
SAMPLE_BITS: 16
FRAME_BITS: 32
CHANNELS: 2
RATE: 22050
PERIOD_TIME: (4580 5533)
PERIOD_SIZE: NONE
PERIOD_BYTES: [404 488]
PERIODS: 10
BUFFER_TIME: (50022 50023)
BUFFER_SIZE: 1103
BUFFER_BYTES: 4412
TICK_TIME: ALL

because in snd_pcm_hw_param_set_near is

if (last)
     err = snd_pcm_hw_param_set_last(pcm, params, var, val, dir);
else
     err = snd_pcm_hw_param_set_first(pcm, params, var, val, dir);
if (err < 0)
     dump_hw_params(params, "set_near", var, *val, err);
return err;

and in error part is only debug output and not restore original parameters.

Environment:
alsa-lib 1.0.27.1
TI AM335x soc

Simple fix is attached, but I am not sure if it is correct.

BR
Martin Geier
-- 
*StreamUnlimited*
High Tech Campus Vienna, Gutheil-Schoder-Gasse 10, A-1102 Vienna, Austria
Levocska 9, 851 01 Bratislava, Slovakia
Email: martin.geier at streamunlimited.com
www.streamunlimited.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-patch-restore-params-if-snd_pcm_hw_param_set_near-met.patch
Type: text/x-patch
Size: 892 bytes
Desc: not available
URL: <http://mailman.alsa-project.org/pipermail/alsa-devel/attachments/20150721/0c4fed28/attachment.bin>


More information about the Alsa-devel mailing list