size_t old_hw_ptr;
unsigned int mmap:1,
disabled:1;
+ size_t mmap_size;
} oss_dsp_stream_t;
typedef struct {
if (!pcm)
continue;
snd_pcm_hw_params_any(pcm, &hw);
- if (str->mmap)
+ if (str->mmap) {
+ err = snd_pcm_hw_params_max(pcm, &hw, SND_PCM_HW_PARAM_BUFFER_BYTES, str->mmap_size);
+ if (err < 0)
+ return err;
err = snd_pcm_hw_params_set(pcm, &hw, SND_PCM_HW_PARAM_ACCESS, SND_PCM_ACCESS_MMAP_INTERLEAVED);
- else
+ } else
err = snd_pcm_hw_params_set(pcm, &hw, SND_PCM_HW_PARAM_ACCESS, SND_PCM_ACCESS_RW_INTERLEAVED);
if (err < 0)
return err;
if (!str->pcm)
str = &dsp->streams[SND_PCM_STREAM_CAPTURE];
str->mmap = 1;
+ str->mmap_size = len;
err = oss_dsp_params(dsp);
if (err < 0) {
errno = -err;
if (!str->pcm)
str = &dsp->streams[SND_PCM_STREAM_CAPTURE];
str->mmap = 0;
+ str->mmap_size = 0;
err = oss_dsp_params(dsp);
if (err < 0) {
errno = -err;