diff options
author | Jari Vetoniemi <mailroxas@gmail.com> | 2018-10-31 18:56:06 +0200 |
---|---|---|
committer | Jari Vetoniemi <mailroxas@gmail.com> | 2018-10-31 18:56:06 +0200 |
commit | 3140ec2a62534b048b60ec91211f4dee73c18a4e (patch) | |
tree | 6e915a7b22ff49fe3a971f51e94c831f50b7f71a | |
parent | 33edea6d32b45e845f38c44d92b81e69bd1737c7 (diff) |
loop through all configs for min/max functions
-rw-r--r-- | src/pcm.c | 44 |
1 files changed, 27 insertions, 17 deletions
@@ -735,10 +735,13 @@ snd_pcm_hw_params_get_channels_min(const snd_pcm_hw_params_t *params, unsigned i { const bool pb = (params->stream == SND_PCM_STREAM_PLAYBACK); unsigned int min = (unsigned int)~0; - for (int i = 0; i < SIO_NCHAN; ++i) { - if (!((pb ? params->cap.confs[0].pchan : params->cap.confs[0].rchan) & (1 << i))) - continue; - min = ((pb ? params->cap.pchan[i] : params->cap.rchan[i]) < min ? (pb ? params->cap.pchan[i] : params->cap.rchan[i]) : min); + for (unsigned int c = 0; c < params->cap.nconf; ++c) { + const unsigned int cconf = (pb ? params->cap.confs[c].pchan : params->cap.confs[c].rchan); + for (unsigned int i = 0; i < SIO_NCHAN; ++i) { + if (!(cconf & (1 << i))) + continue; + min = ((pb ? params->cap.pchan[i] : params->cap.rchan[i]) < min ? (pb ? params->cap.pchan[i] : params->cap.rchan[i]) : min); + } } if (val) *val = min; return 0; @@ -748,11 +751,14 @@ int snd_pcm_hw_params_get_channels_max(const snd_pcm_hw_params_t *params, unsigned int *val) { const bool pb = (params->stream == SND_PCM_STREAM_PLAYBACK); - unsigned int max = 0; - for (int i = 0; i < SIO_NCHAN; ++i) { - if (!((pb ? params->cap.confs[0].pchan : params->cap.confs[0].rchan) & (1 << i))) - continue; - max = ((pb ? params->cap.pchan[i] : params->cap.rchan[i]) > max ? (pb ? params->cap.pchan[i] : params->cap.rchan[i]) : max); + unsigned int max = 2; + for (unsigned int c = 0; c < params->cap.nconf; ++c) { + const unsigned int cconf = (pb ? params->cap.confs[c].pchan : params->cap.confs[c].rchan); + for (unsigned int i = 0; i < SIO_NCHAN; ++i) { + if (!(cconf & (1 << i))) + continue; + max = ((pb ? params->cap.pchan[i] : params->cap.rchan[i]) > max ? (pb ? params->cap.pchan[i] : params->cap.rchan[i]) : max); + } } if (val) *val = max; return 0; @@ -784,10 +790,12 @@ int snd_pcm_hw_params_get_rate_min(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir) { unsigned int min = (unsigned int)~0; - for (int i = 0; i < SIO_NRATE; ++i) { - if (!(params->cap.confs[0].rate & (1 << i))) - continue; - min = (params->cap.rate[i] < min ? params->cap.rate[i] : min); + for (unsigned int c = 0; c < params->cap.nconf; ++c) { + for (int i = 0; i < SIO_NRATE; ++i) { + if (!(params->cap.confs[c].rate & (1 << i))) + continue; + min = (params->cap.rate[i] < min ? params->cap.rate[i] : min); + } } if (dir) *dir = 0; if (val) *val = min; @@ -798,10 +806,12 @@ int snd_pcm_hw_params_get_rate_max(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir) { unsigned int max = 0; - for (int i = 0; i < SIO_NRATE; ++i) { - if (!(params->cap.confs[0].rate & (1 << i))) - continue; - max = (params->cap.rate[i] > max ? params->cap.rate[i] : max); + for (unsigned int c = 0; c < params->cap.nconf; ++c) { + for (int i = 0; i < SIO_NRATE; ++i) { + if (!(params->cap.confs[c].rate & (1 << i))) + continue; + max = (params->cap.rate[i] > max ? params->cap.rate[i] : max); + } } if (dir) *dir = 0; if (val) *val = max; |