]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm: recalculate all rules after changing hw_params flags
authorClemens Ladisch <clemens@ladisch.de>
Wed, 21 Sep 2011 06:30:20 +0000 (08:30 +0200)
committerClemens Ladisch <clemens@ladisch.de>
Wed, 21 Sep 2011 06:30:20 +0000 (08:30 +0200)
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>
src/pcm/pcm.c

index 12f8cd0db315bcea34b0856b9155eb4476d0fe33..bc5c6e4a6895c77d2fe3991d28237e7613793079 100644 (file)
@@ -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);
 }