[alsa-devel] Buffer size/periods (Layla3G)
Giuliano Pochini
pochini at shiny.it
Sat Mar 22 23:17:18 CET 2008
On Sun, 16 Mar 2008 22:12:39 +0000
Giuliano Pochini <pochini at shiny.it> wrote:
> > Also, there seem to be failures at certain buffer sizes:
> >
> > $ ./test_buffers "hw:Layla3G,0,2" 429
> > buffer_size=18912 period_size=96
> >
> > $ ./test_buffers "hw:Layla3G,0,2" 430
> > set_buffer_time_near: Invalid argument
> >
> > $ ./test_buffers "hw:Layla3G,0,2" 431
> > buffer_size=19008 period_size=96
>
> This shouldn't happen. I'll give it a look.
It seems that ALSA can't manage to find a working hwparams combo. The card
has the following constraints:
buffer size: 64-32768 frames
period size: multiple of 32 frames
periods: 2-220
It happens that ALSA restricts the allowable buffer size range to
18976-18976 which is very close to the requested 430ms. This is bad because
the biggest multiple of 32 divisor of 18976 is 32. 18976/32 = 593 > maximum
number of periods. return -EINVAL.
BUFFER_TIME = (430294 430295) -> (430294 430295)
Rule 8 [e20b3944]: RATE = [44100 44100] -> [44100 44100]
Rule 15 [e20b38d0]: BUFFER_SIZE = [18976 32768] -> [18976 18976]
Rule 17 [e20b38d0]: BUFFER_BYTES = [151808 262144] -> [151808 151808]
Rule 19 [e20b3944]: BUFFER_TIME = (430294 430295) -> (430294 430295)
Note that if you change the order of the hw_params_*() calls the problem
goes away. It might show up again for some other values though.
I don't know how to fix it. Any clue ??
--
Giuliano.
More information about the Alsa-devel
mailing list