diff options
author | cg <cg@FreeBSD.org> | 2000-10-26 01:34:54 +0000 |
---|---|---|
committer | cg <cg@FreeBSD.org> | 2000-10-26 01:34:54 +0000 |
commit | faddab638dfbab0c80d33099925fe84532d44ee9 (patch) | |
tree | b439109e0661481cc32185ee1bd9279020d83b76 /sys | |
parent | 066ba04e21867adcf864439a389b585cddd619c9 (diff) | |
download | FreeBSD-src-faddab638dfbab0c80d33099925fe84532d44ee9.zip FreeBSD-src-faddab638dfbab0c80d33099925fe84532d44ee9.tar.gz |
handle AFMT_QUERY right
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/sound/pcm/dsp.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c index 9bd8bc5..ae8ed0b 100644 --- a/sys/dev/sound/pcm/dsp.c +++ b/sys/dev/sound/pcm/dsp.c @@ -141,7 +141,7 @@ dsp_close(snddev_info *d, int chan, int devtype) { pcm_channel *rdch, *wrch; - d->ref[chan]--; + d->ref[chan] = 0; #if 0 /* enable this if/when every close() is propagated here */ if (d->ref[chan]) return 0; @@ -411,10 +411,12 @@ dsp_ioctl(snddev_info *d, int chan, u_long cmd, caddr_t arg) case SNDCTL_DSP_SETFMT: /* sets _one_ format */ splx(s); - if (wrch) - ret = chn_setformat(wrch, (*arg_i) | (wrch->format & AFMT_STEREO)); - if (rdch && ret == 0) - ret = chn_setformat(rdch, (*arg_i) | (rdch->format & AFMT_STEREO)); + if ((*arg_i != AFMT_QUERY)) { + if (wrch) + ret = chn_setformat(wrch, (*arg_i) | (wrch->format & AFMT_STEREO)); + if (rdch && ret == 0) + ret = chn_setformat(rdch, (*arg_i) | (rdch->format & AFMT_STEREO)); + } *arg_i = (wrch? wrch->format: rdch->format) & ~AFMT_STEREO; break; @@ -597,7 +599,14 @@ dsp_ioctl(snddev_info *d, int chan, u_long cmd, caddr_t arg) } else ret = EINVAL; break; - +/* + case SNDCTL_DSP_POST: + if (wrch) { + wrch->flags &= ~CHN_F_NOTRIGGER; + chn_start(wrch, 1); + } + break; +*/ case SNDCTL_DSP_MAPINBUF: case SNDCTL_DSP_MAPOUTBUF: case SNDCTL_DSP_SETSYNCRO: |