From 72547f4722b4c28bd7f1462cdb31128af97c72cc Mon Sep 17 00:00:00 2001 From: Peter Meerwald Date: Sat, 15 Nov 2014 13:33:19 +0100 Subject: [PATCH] alsa-util: No logging when sound card only supports non-interleaved sample format as suggested by https://bugs.freedesktop.org/show_bug.cgi?id=84804 Signed-off-by: Peter Meerwald --- src/modules/alsa/alsa-util.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c index 4131cff..e382d4f 100644 --- a/src/modules/alsa/alsa-util.c +++ b/src/modules/alsa/alsa-util.c @@ -183,6 +183,19 @@ static int set_buffer_size(snd_pcm_t *pcm_handle, snd_pcm_hw_params_t *hwparams, return 0; } +static void check_access(snd_pcm_t *pcm_handle, snd_pcm_hw_params_t *hwparams, bool use_mmap) { + if ((use_mmap && !snd_pcm_hw_params_test_access(pcm_handle, hwparams, SND_PCM_ACCESS_MMAP_INTERLEAVED)) || + !snd_pcm_hw_params_test_access(pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED)) + pa_log_error("Weird, PCM claims to support interleaved access, but snd_pcm_hw_params_set_access() failed."); + + if ((use_mmap && !snd_pcm_hw_params_test_access(pcm_handle, hwparams, SND_PCM_ACCESS_MMAP_NONINTERLEAVED)) || + !snd_pcm_hw_params_test_access(pcm_handle, hwparams, SND_PCM_ACCESS_RW_NONINTERLEAVED)) + pa_log_error("PCM seems to support non-interleaved access, but PA doesn't."); + else if (use_mmap && !snd_pcm_hw_params_test_access(pcm_handle, hwparams, SND_PCM_ACCESS_MMAP_COMPLEX)) { + pa_log_error("PCM seems to support mmapped complex access, but PA doesn't."); + } +} + /* Set the hardware parameters of the given ALSA device. Returns the * selected fragment settings in *buffer_size and *period_size. Determine * whether mmap and tsched mode can be enabled. */ @@ -229,6 +242,7 @@ int pa_alsa_set_hw_params( if ((ret = snd_pcm_hw_params_set_access(pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) { pa_log_debug("snd_pcm_hw_params_set_access() failed: %s", pa_alsa_strerror(ret)); + check_access(pcm_handle, hwparams, true); goto finish; } @@ -237,6 +251,7 @@ int pa_alsa_set_hw_params( } else if ((ret = snd_pcm_hw_params_set_access(pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) { pa_log_debug("snd_pcm_hw_params_set_access() failed: %s", pa_alsa_strerror(ret)); + check_access(pcm_handle, hwparams, false); goto finish; } -- 1.9.1