* how is 'dir' in snd_pcm_hw_params_set_periods_near() supposed to work?
@ 2008-09-08 20:28 Lennart Poettering
2008-09-09 8:02 ` Clemens Ladisch
0 siblings, 1 reply; 2+ messages in thread
From: Lennart Poettering @ 2008-09-08 20:28 UTC (permalink / raw)
To: ALSA Development Mailing List
Heya!
How is the 'dir' argument in snd_pcm_hw_params_set_periods_near()
supposed to work?
I'd assume that passing dir=1 would mean that it is looked for a
number of periods that is greater *or equal* to what we request. If we
pass dir=-1 we'd be looking for a number of periods that is smaller
*or equal* to what we request.
However, what I am experiencing is that there is no "or equal". On my
softvol on hda setup here if I ask for 5 periods I will always get 6
if I pass dir=1 -- even if the could give me 5 and will give me five
if I pass dir=0.
The docs don't really elaborate on this much.
I'd certainly think that having ">=" and "<=" here is much more useful
and natural than ">" and "<", and hence I was wondering: is this just
a bug in the software or is it really intended to be this way?
Lennart
--
Lennart Poettering Red Hat, Inc.
lennart [at] poettering [dot] net ICQ# 11060553
http://0pointer.net/lennart/ GnuPG 0x1A015CC4
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: how is 'dir' in snd_pcm_hw_params_set_periods_near() supposed to work?
2008-09-08 20:28 how is 'dir' in snd_pcm_hw_params_set_periods_near() supposed to work? Lennart Poettering
@ 2008-09-09 8:02 ` Clemens Ladisch
0 siblings, 0 replies; 2+ messages in thread
From: Clemens Ladisch @ 2008-09-09 8:02 UTC (permalink / raw)
To: Lennart Poettering; +Cc: alsa-devel
Lennart Poettering wrote:
> How is the 'dir' argument in snd_pcm_hw_params_set_periods_near()
> supposed to work?
Short answer: use NULL.
Long answer: Before calling the function, -1 means that the number of
periods must be less than 'val', 1 means greater. After calling the
function, 'dir' is set to -1 to indicate that the actual number of
periods is less than 'val', etc.
> I'd assume that passing dir=1 would mean that it is looked for a
> number of periods that is greater *or equal* to what we request. [...]
> The docs don't really elaborate on this much.
While the docs don't really elaborate on anything, for any ALSA
function, in this case they actually say "<" and not "<=".
> I'd certainly think that having ">=" and "<=" here is much more useful
> and natural than ">" and "<", and hence I was wondering: is this just
> a bug in the software or is it really intended to be this way?
It's intended.
In the configuration space, parameters like the number of periods are
represented as an interval, i.e., as a minimum and a maximum value.
Since it is possible to have values that are not integers (e.g., buffer
size = 1000, period size = 400 => number of periods = 2.5), both bounds
of the interval can be 'open', i.e., the respective boundary value does
not belong the the interval. In the above example, the minimum would be
2 and the maximum 3, with both values themselves excluded.
It is not very useful to set the 'dir' parameter before calling
snd_pcm_hw_params_set_periods_near(); if you don't want an exact value,
you're more likely to set an interval with *_set_*_min() and *_max()
anyway.
The 'dir' parameter is useful to determine, after the call, that the
value is not an integer. In this case, <= or >= would not make sense.
Regards,
Clemens
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-09-09 8:02 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-09-08 20:28 how is 'dir' in snd_pcm_hw_params_set_periods_near() supposed to work? Lennart Poettering
2008-09-09 8:02 ` Clemens Ladisch
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.