]> git.alsa-project.org Git - alsa-lib.git/commitdiff
Fixed right access use for pcm_plug
authorAbramo Bagnara <abramo@alsa-project.org>
Mon, 15 Jan 2001 13:36:14 +0000 (13:36 +0000)
committerAbramo Bagnara <abramo@alsa-project.org>
Mon, 15 Jan 2001 13:36:14 +0000 (13:36 +0000)
include/pcm.h
src/pcm/pcm_params.c
src/pcm/pcm_plug.c

index cd138ba5ff0b6f73d4c2384e3778de9d4c1e2a17..6b958a47055b66cf7fc2ed1e106ee03dfaeecbf8 100644 (file)
@@ -106,6 +106,8 @@ int mask_single(const mask_t *mask);
 int snd_pcm_hw_params_any(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
 int snd_pcm_hw_param_any(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
                         snd_pcm_hw_param_t var);
+int snd_pcm_hw_param_test(const snd_pcm_hw_params_t *params,
+                         snd_pcm_hw_param_t var, unsigned int val);
 int snd_pcm_hw_param_setinteger(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
                                snd_pcm_hw_param_t var);
 int snd_pcm_hw_param_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
index 154a53aa1071022b7434915acc8e677a11a0efb8..336e45f13027f9462d3ddc580017f3be7728d347 100644 (file)
@@ -1051,7 +1051,7 @@ typedef struct _snd_pcm_hw_strategy_simple_choices {
 } snd_pcm_hw_strategy_simple_choices_t;
 
 int snd_pcm_hw_param_test(const snd_pcm_hw_params_t *params,
-                          snd_pcm_hw_param_t var, unsigned int val)
+                         snd_pcm_hw_param_t var, unsigned int val)
 {
        if (hw_is_mask(var)) {
                const mask_t *mask = hw_param_mask_c(params, var);
index 9f7ba854987e0235ea5c12d1e973bed1a9331f41..87b31112b0067c6cb04c30541de865dd9e484ead 100644 (file)
@@ -199,8 +199,8 @@ static int snd_pcm_plug_hw_link(snd_pcm_hw_params_t *params,
                                snd_pcm_t *slave,
                                unsigned long private ATTRIBUTE_UNUSED)
 {
-       int rate_always, channels_always, format_always, access_always;
-       int rate_never, channels_never, format_never, access_never;
+       int rate_always, channels_always, format_always;
+       int rate_never, channels_never, format_never;
        unsigned int links = (SND_PCM_HW_PARBIT_PERIOD_TIME |
                              SND_PCM_HW_PARBIT_TICK_TIME);
        const mask_t *format_mask, *sformat_mask;
@@ -268,13 +268,6 @@ static int snd_pcm_plug_hw_link(snd_pcm_hw_params_t *params,
                      snd_pcm_hw_param_never_eq(params,
                                                SND_PCM_HW_PARAM_RATE,
                                                sparams));
-       access_always = snd_pcm_hw_param_always_eq(params,
-                                                  SND_PCM_HW_PARAM_ACCESS,
-                                                  sparams);
-       access_never = (!access_always &&
-                       snd_pcm_hw_param_never_eq(params,
-                                                 SND_PCM_HW_PARAM_ACCESS,
-                                                 sparams));
 
        if (rate_always)
                links |= (SND_PCM_HW_PARBIT_RATE |
@@ -610,7 +603,10 @@ static int snd_pcm_plug_hw_params(snd_pcm_t *pcm, snd_pcm_hw_params_t *params)
        clt_params.channels = snd_pcm_hw_param_value(params, SND_PCM_HW_PARAM_CHANNELS, 0);
        clt_params.rate = snd_pcm_hw_param_value(params, SND_PCM_HW_PARAM_RATE, 0);
 
-       slv_params.access = snd_pcm_hw_param_first(slave, &sparams, SND_PCM_HW_PARAM_ACCESS, 0);
+       if (snd_pcm_hw_param_test(params, SND_PCM_HW_PARAM_ACCESS, clt_params.access))
+               slv_params.access = clt_params.access;
+       else
+               slv_params.access = snd_pcm_hw_param_first(slave, &sparams, SND_PCM_HW_PARAM_ACCESS, 0);
        slv_params.format = snd_pcm_hw_param_value(&sparams, SND_PCM_HW_PARAM_FORMAT, 0);
        slv_params.channels = snd_pcm_hw_param_value(&sparams, SND_PCM_HW_PARAM_CHANNELS, 0);
        slv_params.rate = snd_pcm_hw_param_value(&sparams, SND_PCM_HW_PARAM_RATE, 0);