diff options
| author | Cameron Grant <cg@FreeBSD.org> | 2002-01-23 05:49:41 +0000 |
|---|---|---|
| committer | Cameron Grant <cg@FreeBSD.org> | 2002-01-23 05:49:41 +0000 |
| commit | 4e60be34739e644ff788d0882d60efb5f2c8fc61 (patch) | |
| tree | f8e3fae9bef0d458b7de7ce9e63748bdfdb93395 | |
| parent | 23bc171b29eb044612c341fb4bc9db90ee185a64 (diff) | |
Notes
| -rw-r--r-- | sys/dev/sound/pcm/sound.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/sys/dev/sound/pcm/sound.c b/sys/dev/sound/pcm/sound.c index ddbf6625aca8d..215e288430195 100644 --- a/sys/dev/sound/pcm/sound.c +++ b/sys/dev/sound/pcm/sound.c @@ -567,13 +567,27 @@ unsigned int pcm_getbuffersize(device_t dev, unsigned int min, unsigned int deflt, unsigned int max) { struct snddev_info *d = device_get_softc(dev); - int sz; + int sz, x; sz = 0; - if (resource_int_value(device_get_name(dev), device_get_unit(dev), "buffersize", &sz) == 0) + if (resource_int_value(device_get_name(dev), device_get_unit(dev), "buffersize", &sz) == 0) { + x = sz; RANGE(sz, min, max); - else + if (x != sz) + device_printf(dev, "'buffersize=%d' hint is out of range (%d-%d), using %d\n", x, min, max, sz); + x = min; + while (x < sz) + x <<= 1; + if (x > sz) + x >>= 1; + if (x != sz) { + device_printf(dev, "'buffersize=%d' hint is not a power of 2, using %d\n", sz, x); + sz = x; + } + } else { sz = deflt; + } + d->bufsz = sz; return sz; |
