diff options
author | waker <wakeroid@gmail.com> | 2011-03-30 20:47:59 +0200 |
---|---|---|
committer | waker <wakeroid@gmail.com> | 2011-03-30 20:47:59 +0200 |
commit | 8fdbe02975e7b7b8176e538c113a6c58db71624b (patch) | |
tree | 0231f45da113765771f860dd3787de0f6130ffec /plugins/alsa | |
parent | e7f991fb31ddeba9877e34855e2020947c826d34 (diff) |
improved alsa samplerate selection
Diffstat (limited to 'plugins/alsa')
-rw-r--r-- | plugins/alsa/alsa.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/plugins/alsa/alsa.c b/plugins/alsa/alsa.c index fa08fcdb..ed4ed014 100644 --- a/plugins/alsa/alsa.c +++ b/plugins/alsa/alsa.c @@ -192,14 +192,27 @@ retry: #else int fmt[] = { SND_PCM_FORMAT_S16_LE, SND_PCM_FORMAT_S24_3LE, SND_PCM_FORMAT_S32_LE, SND_PCM_FORMAT_FLOAT_LE, SND_PCM_FORMAT_S8, -1 }; #endif + + // 1st try formats with higher bps int i = 0; for (i = 0; fmt[i] != -1; i++) { - if (fmt[i] != sample_fmt) { + if (fmt[i] != sample_fmt && fmt[i] > sample_fmt) { if (snd_pcm_hw_params_set_format (audio, hw_params, fmt[i]) >= 0) { break; } } } + if (fmt[i] == -1) { + // next try formats with lower bps + i = 0; + for (i = 0; fmt[i] != -1; i++) { + if (fmt[i] != sample_fmt && fmt[i] < sample_fmt) { + if (snd_pcm_hw_params_set_format (audio, hw_params, fmt[i]) >= 0) { + break; + } + } + } + } if (fmt[i] == -1) { goto error; |