Page MenuHomeFreeBSD

D45664.id140341.diff
No OneTemporary

D45664.id140341.diff

diff --git a/sys/dev/sound/pcm/vchan.c b/sys/dev/sound/pcm/vchan.c
--- a/sys/dev/sound/pcm/vchan.c
+++ b/sys/dev/sound/pcm/vchan.c
@@ -192,14 +192,14 @@
vchan_getcaps(kobj_t obj, void *data)
{
struct vchan_info *info;
- struct pcm_channel *c;
- uint32_t pformat, pspeed, pflags, i;
+ struct pcm_channel *c, *p;
+ uint32_t pformat, pflags, i;
info = data;
c = info->channel;
- pformat = c->parentchannel->format;
- pspeed = c->parentchannel->speed;
- pflags = c->parentchannel->flags;
+ p = c->parentchannel;
+ pformat = p->format;
+ pflags = p->flags;
CHN_LOCKASSERT(c);
@@ -213,11 +213,6 @@
}
info->caps.fmtlist[i] = pformat;
}
- if (c->format & AFMT_PASSTHROUGH)
- info->caps.minspeed = c->speed;
- else
- info->caps.minspeed = pspeed;
- info->caps.maxspeed = info->caps.minspeed;
} else {
info->caps.fmtlist = info->fmtlist + FMTLIST_OFFSET;
if (pformat & AFMT_VCHAN)
@@ -228,8 +223,18 @@
__func__, pformat);
info->caps.fmtlist[0] = VCHAN_DEFAULT_FORMAT;
}
- info->caps.minspeed = pspeed;
- info->caps.maxspeed = info->caps.minspeed;
+ }
+ if (feeder_rate_round || CHN_BITPERFECT(c) ||
+ (c->format & AFMT_PASSTHROUGH)) {
+ CHN_UNLOCK(c);
+ CHN_LOCK(p);
+ info->caps.minspeed = chn_getcaps(p)->minspeed;
+ info->caps.maxspeed = chn_getcaps(p)->maxspeed;
+ CHN_UNLOCK(p);
+ CHN_LOCK(c);
+ } else {
+ info->caps.minspeed = feeder_rate_min;
+ info->caps.maxspeed = feeder_rate_max;
}
return (&info->caps);

File Metadata

Mime Type
text/plain
Expires
Sun, Dec 21, 12:40 PM (1 h, 31 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27113145
Default Alt Text
D45664.id140341.diff (1 KB)

Event Timeline