summaryrefslogtreecommitdiff
path: root/src/modules/alsa
diff options
context:
space:
mode:
authorPeter Meerwald <pmeerw@pmeerw.net>2014-11-15 13:33:19 +0100
committerDavid Henningsson <david.henningsson@canonical.com>2015-02-16 10:35:45 +0100
commit55a25246ee80aa950bf27f811c0cc176d0821a4e (patch)
tree6f7dfbfca38a54de3177f37f93c91f50f80675cc /src/modules/alsa
parent62dc0ad6c33ce2be6b36dcdfc0bfef21f7681960 (diff)
downloadpulseaudio-55a25246ee80aa950bf27f811c0cc176d0821a4e.tar.gz
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 <pmeerw@pmeerw.net>
Diffstat (limited to 'src/modules/alsa')
-rw-r--r--src/modules/alsa/alsa-util.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 46990fed3..d62234c00 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -181,6 +181,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. */
@@ -227,6 +240,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;
}
@@ -235,6 +249,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;
}