summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2011-09-21 08:30:20 +0200
committerClemens Ladisch <clemens@ladisch.de>2011-09-21 08:30:20 +0200
commit6dab1a91cbbd40d2f52a0c5a1bd961a1db7bb319 (patch)
tree99f03573b102ed4e832b7c99b8a2b84b32a8a4e2
parent7924500688fdfeac71e5968e5f5875726a8dce14 (diff)
downloadalsa-lib-6dab1a91cbbd40d2f52a0c5a1bd961a1db7bb319.tar.gz
pcm: recalculate all rules after changing hw_params flags
The rules engine avoids recalculating rules that do not depend on any changed parameter, but there is no mechanism to record changed flags. So when we change a flag, we have to ensure that all rules depending on that flag are recalculated; the only method to do this is to force recalculation of all rules. So far, there have been no kernel drivers with rules depending on flags, but rules to disable hardware SRCs by setting SND_PCM_HW_PARAMS_NORESAMPLE are being introduced now. Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
-rw-r--r--src/pcm/pcm.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c
index 12f8cd0d..bc5c6e4a 100644
--- a/src/pcm/pcm.c
+++ b/src/pcm/pcm.c
@@ -4200,6 +4200,7 @@ int snd_pcm_hw_params_set_rate_resample(snd_pcm_t *pcm, snd_pcm_hw_params_t *par
params->flags |= SND_PCM_HW_PARAMS_NORESAMPLE;
else
params->flags &= ~SND_PCM_HW_PARAMS_NORESAMPLE;
+ params->rmask = ~0;
return snd_pcm_hw_refine(pcm, params);
}
@@ -4231,6 +4232,7 @@ int snd_pcm_hw_params_set_export_buffer(snd_pcm_t *pcm, snd_pcm_hw_params_t *par
params->flags |= SND_PCM_HW_PARAMS_EXPORT_BUFFER;
else
params->flags &= ~SND_PCM_HW_PARAMS_EXPORT_BUFFER;
+ params->rmask = ~0;
return snd_pcm_hw_refine(pcm, params);
}
@@ -4280,6 +4282,7 @@ int snd_pcm_hw_params_set_period_wakeup(snd_pcm_t *pcm, snd_pcm_hw_params_t *par
params->flags |= SND_PCM_HW_PARAMS_NO_PERIOD_WAKEUP;
} else
params->flags &= ~SND_PCM_HW_PARAMS_NO_PERIOD_WAKEUP;
+ params->rmask = ~0;
return snd_pcm_hw_refine(pcm, params);
}