diff options
author | Miller Puckette <millerpuckette@users.sourceforge.net> | 2005-05-18 04:28:51 +0000 |
---|---|---|
committer | Miller Puckette <millerpuckette@users.sourceforge.net> | 2005-05-18 04:28:51 +0000 |
commit | 388f7a1df37afeed0dd120f8091614a7f6dd91ab (patch) | |
tree | 8a439951a1c190b1fc786abc4f69b23181c54168 /pd/src/s_audio_alsa.c | |
parent | bb13717ae41bfa317e7b84625201279a5a2a09d9 (diff) |
Damn, edited this before and lost the update. More data features.
Took about 12 patches.
svn path=/trunk/; revision=3006
Diffstat (limited to 'pd/src/s_audio_alsa.c')
-rw-r--r-- | pd/src/s_audio_alsa.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/pd/src/s_audio_alsa.c b/pd/src/s_audio_alsa.c index 27188a72..eb9bdc10 100644 --- a/pd/src/s_audio_alsa.c +++ b/pd/src/s_audio_alsa.c @@ -63,19 +63,28 @@ static void check_error(int err, const char *why) static int alsaio_canmmap(t_alsa_dev *dev) { snd_pcm_hw_params_t *hw_params; - int err; + int err1, err2; snd_pcm_hw_params_alloca(&hw_params); - err = snd_pcm_hw_params_any(dev->a_handle, hw_params); - if (err < 0) { - check_error(err,"Broken configuration: no configurations available"); + err1 = snd_pcm_hw_params_any(dev->a_handle, hw_params); + if (err1 < 0) { + check_error(err1,"Broken configuration: no configurations available"); return (0); } - - err = snd_pcm_hw_params_set_access(dev->a_handle, - hw_params, SND_PCM_ACCESS_MMAP_NONINTERLEAVED); - return (err >= 0); + err1 = snd_pcm_hw_params_set_access(dev->a_handle, + hw_params, SND_PCM_ACCESS_RW_INTERLEAVED); + if (err1 < 0) + { + err2 = snd_pcm_hw_params_set_access(dev->a_handle, + hw_params, SND_PCM_ACCESS_MMAP_NONINTERLEAVED); + } + else err2 = -1; +#if 0 + post("err 1 %d (%s), err2 %d (%s)", err1, snd_strerror(err1), + err2, snd_strerror(err2)); +#endif + return ((err1 < 0) && (err2 >= 0)); } static int alsaio_setup(t_alsa_dev *dev, int out, int *channels, int *rate, |