]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm_rate fix
authorAbramo Bagnara <abramo@alsa-project.org>
Fri, 19 Jan 2001 09:48:33 +0000 (09:48 +0000)
committerAbramo Bagnara <abramo@alsa-project.org>
Fri, 19 Jan 2001 09:48:33 +0000 (09:48 +0000)
src/pcm/pcm_local.h
src/pcm/pcm_plug.c
src/pcm/pcm_rate.c

index 3a5dfe404f5ee42e673086109e3329f7182579a1..36badaa5add3929f4583fcbd484756be9b91783a 100644 (file)
@@ -342,6 +342,10 @@ int _snd_pcm_hw_param_min(snd_pcm_hw_params_t *params,
                           unsigned int var, unsigned int val, int dir);
 int _snd_pcm_hw_param_max(snd_pcm_hw_params_t *params,
                           unsigned int var, unsigned int val, int dir);
+int _snd_pcm_hw_param_minmax(snd_pcm_hw_params_t *params,
+                            snd_pcm_hw_param_t var,
+                            unsigned int min, int mindir,
+                            unsigned int max, int maxdir);
 int _snd_pcm_hw_param_refine(snd_pcm_hw_params_t *params,
                             snd_pcm_hw_param_t var,
                             const snd_pcm_hw_params_t *src);
index 6ee96445c6fdaa291a17ee959288b6af3a7602c0..acd1f76e47109856ff990a79a8c984d5163f0e42 100644 (file)
@@ -430,9 +430,6 @@ static int snd_pcm_plug_hw_refine_schange(snd_pcm_t *pcm, snd_pcm_hw_params_t *p
        interval_t t;
        const interval_t *buffer_size;
        const interval_t *srate, *crate;
-       err = _snd_pcm_hw_params_refine(sparams, links, params);
-       if (err < 0)
-               return err;
        snd_pcm_hw_param_refine_near(slave, sparams, SND_PCM_HW_PARAM_RATE,
                                     params);
        snd_pcm_hw_param_refine_near(slave, sparams, SND_PCM_HW_PARAM_CHANNELS,
@@ -475,6 +472,9 @@ static int snd_pcm_plug_hw_refine_schange(snd_pcm_t *pcm, snd_pcm_hw_params_t *p
        interval_muldiv(buffer_size, srate, crate, &t);
        interval_round(&t);
        err = _snd_pcm_hw_param_refine_interval(sparams, SND_PCM_HW_PARAM_BUFFER_SIZE, &t);
+       if (err < 0)
+               return err;
+       err = _snd_pcm_hw_params_refine(sparams, links, params);
        if (err < 0)
                return err;
        return 0;
index d793be91b2b27fa9ab17b110105e028d18d0e7b9..780f2b4b0d7f2c3feddff5cb50735c44c2278408 100644 (file)
@@ -279,8 +279,8 @@ static int snd_pcm_rate_hw_refine_sprepare(snd_pcm_t *pcm, snd_pcm_hw_params_t *
                _snd_pcm_hw_param_set(sparams, SND_PCM_HW_PARAM_SUBFORMAT,
                                      SND_PCM_SUBFORMAT_STD, 0);
        }
-       _snd_pcm_hw_param_set(sparams, SND_PCM_HW_PARAM_RATE,
-                             rate->srate, 0);
+       _snd_pcm_hw_param_minmax(sparams, SND_PCM_HW_PARAM_RATE,
+                                rate->srate, 0, rate->srate + 1, -1);
        return 0;
 }