diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c index 18b43b3..2f35ab2 100644 --- a/src/pcm/pcm.c +++ b/src/pcm/pcm.c @@ -7453,18 +7453,8 @@ int snd_pcm_set_params(snd_pcm_t *pcm, SNDERR("Unable to set buffer size %lu %s: %s", buffer_size, s, snd_strerror(err)); return err; } - err = INTERNAL(snd_pcm_hw_params_get_buffer_size)(params, &buffer_size); - if (err < 0) { - SNDERR("Unable to get buffer size for %s: %s", s, snd_strerror(err)); - return err; - } } else { /* standard configuration buffer_time -> periods */ - err = INTERNAL(snd_pcm_hw_params_get_buffer_size)(params, &buffer_size); - if (err < 0) { - SNDERR("Unable to get buffer size for %s: %s", s, snd_strerror(err)); - return err; - } err = INTERNAL(snd_pcm_hw_params_get_buffer_time)(params, &latency, NULL); if (err < 0) { SNDERR("Unable to get buffer time (latency) for %s: %s", s, snd_strerror(err)); @@ -7477,11 +7467,6 @@ int snd_pcm_set_params(snd_pcm_t *pcm, SNDERR("Unable to set period time %i for %s: %s", period_time, s, snd_strerror(err)); return err; } - err = INTERNAL(snd_pcm_hw_params_get_period_size)(params, &period_size, NULL); - if (err < 0) { - SNDERR("Unable to get period size for %s: %s", s, snd_strerror(err)); - return err; - } } /* write the parameters to device */ err = snd_pcm_hw_params(pcm, params); @@ -7490,6 +7475,19 @@ int snd_pcm_set_params(snd_pcm_t *pcm, return err; } + /* Get final buffer and period sizes after hw params have been set */ + err = INTERNAL(snd_pcm_hw_params_get_buffer_size)(params, &buffer_size); + if (err < 0) { + SNDERR("Unable to get buffer size for %s: %s", s, snd_strerror(err)); + return err; + } + + err = INTERNAL(snd_pcm_hw_params_get_period_size)(params, &period_size, NULL); + if (err < 0) { + SNDERR("Unable to get period size for %s: %s", s, snd_strerror(err)); + return err; + } + /* get the current swparams */ err = snd_pcm_sw_params_current(pcm, swparams); if (err < 0) {