mirror of
https://github.com/opnsense/src.git
synced 2026-06-04 14:26:03 -04:00
sound: Fix OSS API requests for more than 8 channels
Audio devices with more than 8 channels need bitperfect mode to operate,
the vchan processing chain is limited to 8 channels. For these devices,
let applications properly select a certain number of channels supported
by the driver, instead of mapping the request to a vchan format.
Reviewed by: emaste
Pull Request: https://github.com/freebsd/freebsd-src/pull/914
(cherry picked from commit 61c8316796)
This commit is contained in:
parent
49e126a03b
commit
602ea0ced1
1 changed files with 17 additions and 10 deletions
|
|
@ -1502,24 +1502,31 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode,
|
|||
|
||||
case SOUND_PCM_WRITE_CHANNELS:
|
||||
/* case SNDCTL_DSP_CHANNELS: ( == SOUND_PCM_WRITE_CHANNELS) */
|
||||
if (*arg_i < 0) {
|
||||
if (*arg_i < 0 || *arg_i > AFMT_CHANNEL_MAX) {
|
||||
*arg_i = 0;
|
||||
ret = EINVAL;
|
||||
break;
|
||||
}
|
||||
if (*arg_i != 0) {
|
||||
struct pcmchan_matrix *m;
|
||||
uint32_t ext;
|
||||
uint32_t ext = 0;
|
||||
|
||||
tmp = 0;
|
||||
if (*arg_i > SND_CHN_MAX)
|
||||
*arg_i = SND_CHN_MAX;
|
||||
/*
|
||||
* Map channel number to surround sound formats.
|
||||
* Devices that need bitperfect mode to operate
|
||||
* (e.g. more than SND_CHN_MAX channels) are not
|
||||
* subject to any mapping.
|
||||
*/
|
||||
if (!(dsp_get_flags(i_dev) & SD_F_BITPERFECT)) {
|
||||
struct pcmchan_matrix *m;
|
||||
|
||||
m = feeder_matrix_default_channel_map(*arg_i);
|
||||
if (m != NULL)
|
||||
ext = m->ext;
|
||||
else
|
||||
ext = 0;
|
||||
if (*arg_i > SND_CHN_MAX)
|
||||
*arg_i = SND_CHN_MAX;
|
||||
|
||||
m = feeder_matrix_default_channel_map(*arg_i);
|
||||
if (m != NULL)
|
||||
ext = m->ext;
|
||||
}
|
||||
|
||||
PCM_ACQUIRE_QUICK(d);
|
||||
if (wrch) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue