mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
buffer_size weak link fixed
This commit is contained in:
parent
d41c210493
commit
199452ae8b
4 changed files with 31 additions and 15 deletions
|
|
@ -34,7 +34,8 @@ int interval_min(const interval_t *i);
|
|||
int interval_max(const interval_t *i);
|
||||
int interval_test(const interval_t *i, unsigned int val);
|
||||
void interval_copy(interval_t *dst, const interval_t *src);
|
||||
void interval_round(interval_t *i);
|
||||
void interval_floor(interval_t *i);
|
||||
void interval_unfloor(interval_t *i);
|
||||
int interval_always_eq(const interval_t *i1, const interval_t *i2);
|
||||
int interval_never_eq(const interval_t *i1, const interval_t *i2);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -97,15 +97,32 @@ INLINE int interval_setinteger(interval_t *i)
|
|||
return 1;
|
||||
}
|
||||
|
||||
INLINE void interval_round(interval_t *i)
|
||||
INLINE void interval_floor(interval_t *i)
|
||||
{
|
||||
if (i->integer || interval_empty(i))
|
||||
return;
|
||||
i->openmin = 0;
|
||||
i->openmax = 0;
|
||||
if (i->openmax) {
|
||||
i->max--;
|
||||
i->openmax = 0;
|
||||
}
|
||||
i->integer = 1;
|
||||
}
|
||||
|
||||
INLINE void interval_unfloor(interval_t *i)
|
||||
{
|
||||
if (interval_empty(i))
|
||||
return;
|
||||
if (i->max == UINT_MAX)
|
||||
return;
|
||||
if (i->openmax)
|
||||
return;
|
||||
i->max++;
|
||||
i->openmax = 1;
|
||||
i->integer = 0;
|
||||
}
|
||||
|
||||
|
||||
INLINE int interval_always_eq(const interval_t *i1, const interval_t *i2)
|
||||
{
|
||||
return interval_single(i1) && interval_single(i2) &&
|
||||
|
|
|
|||
|
|
@ -423,8 +423,7 @@ static int snd_pcm_plug_hw_refine_schange(snd_pcm_t *pcm, snd_pcm_hw_params_t *p
|
|||
mask_t *sfmt_mask = alloca(mask_sizeof());
|
||||
int err;
|
||||
unsigned int format;
|
||||
interval_t t;
|
||||
const interval_t *buffer_size;
|
||||
interval_t t, buffer_size;
|
||||
const interval_t *srate, *crate;
|
||||
snd_pcm_hw_param_refine_near(slave, sparams, SND_PCM_HW_PARAM_RATE,
|
||||
params);
|
||||
|
|
@ -462,11 +461,11 @@ static int snd_pcm_plug_hw_refine_schange(snd_pcm_t *pcm, snd_pcm_hw_params_t *p
|
|||
_snd_pcm_hw_param_mask(sparams, SND_PCM_HW_PARAM_ACCESS,
|
||||
access_mask);
|
||||
}
|
||||
buffer_size = snd_pcm_hw_param_value_interval(params, SND_PCM_HW_PARAM_BUFFER_SIZE);
|
||||
interval_copy(&buffer_size, snd_pcm_hw_param_value_interval(params, SND_PCM_HW_PARAM_BUFFER_SIZE));
|
||||
interval_unfloor(&buffer_size);
|
||||
crate = snd_pcm_hw_param_value_interval(params, SND_PCM_HW_PARAM_RATE);
|
||||
srate = snd_pcm_hw_param_value_interval(sparams, SND_PCM_HW_PARAM_RATE);
|
||||
interval_muldiv(buffer_size, srate, crate, &t);
|
||||
interval_round(&t);
|
||||
interval_muldiv(&buffer_size, srate, crate, &t);
|
||||
err = _snd_pcm_hw_param_refine_interval(sparams, SND_PCM_HW_PARAM_BUFFER_SIZE, &t);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
|
@ -517,7 +516,7 @@ static int snd_pcm_plug_hw_refine_cchange(snd_pcm_t *pcm ATTRIBUTE_UNUSED,
|
|||
crate = snd_pcm_hw_param_value_interval(params, SND_PCM_HW_PARAM_RATE);
|
||||
srate = snd_pcm_hw_param_value_interval(sparams, SND_PCM_HW_PARAM_RATE);
|
||||
interval_muldiv(sbuffer_size, crate, srate, &t);
|
||||
interval_round(&t);
|
||||
interval_floor(&t);
|
||||
err = _snd_pcm_hw_param_refine_interval(params, SND_PCM_HW_PARAM_BUFFER_SIZE, &t);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
|
|
|||
|
|
@ -276,8 +276,7 @@ static int snd_pcm_rate_hw_refine_schange(snd_pcm_t *pcm, snd_pcm_hw_params_t *p
|
|||
snd_pcm_hw_params_t *sparams)
|
||||
{
|
||||
snd_pcm_rate_t *rate = pcm->private;
|
||||
interval_t t;
|
||||
const interval_t *buffer_size;
|
||||
interval_t t, buffer_size;
|
||||
const interval_t *srate, *crate;
|
||||
int err;
|
||||
unsigned int links = (SND_PCM_HW_PARBIT_CHANNELS |
|
||||
|
|
@ -288,11 +287,11 @@ static int snd_pcm_rate_hw_refine_schange(snd_pcm_t *pcm, snd_pcm_hw_params_t *p
|
|||
SND_PCM_HW_PARBIT_SUBFORMAT |
|
||||
SND_PCM_HW_PARBIT_SAMPLE_BITS |
|
||||
SND_PCM_HW_PARBIT_FRAME_BITS);
|
||||
buffer_size = snd_pcm_hw_param_value_interval(params, SND_PCM_HW_PARAM_BUFFER_SIZE);
|
||||
interval_copy(&buffer_size, snd_pcm_hw_param_value_interval(params, SND_PCM_HW_PARAM_BUFFER_SIZE));
|
||||
interval_unfloor(&buffer_size);
|
||||
crate = snd_pcm_hw_param_value_interval(params, SND_PCM_HW_PARAM_RATE);
|
||||
srate = snd_pcm_hw_param_value_interval(sparams, SND_PCM_HW_PARAM_RATE);
|
||||
interval_muldiv(buffer_size, srate, crate, &t);
|
||||
interval_round(&t);
|
||||
interval_muldiv(&buffer_size, srate, crate, &t);
|
||||
err = _snd_pcm_hw_param_refine_interval(sparams, SND_PCM_HW_PARAM_BUFFER_SIZE, &t);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
|
@ -322,7 +321,7 @@ static int snd_pcm_rate_hw_refine_cchange(snd_pcm_t *pcm, snd_pcm_hw_params_t *p
|
|||
crate = snd_pcm_hw_param_value_interval(params, SND_PCM_HW_PARAM_RATE);
|
||||
srate = snd_pcm_hw_param_value_interval(sparams, SND_PCM_HW_PARAM_RATE);
|
||||
interval_muldiv(sbuffer_size, crate, srate, &t);
|
||||
interval_round(&t);
|
||||
interval_floor(&t);
|
||||
err = _snd_pcm_hw_param_refine_interval(params, SND_PCM_HW_PARAM_BUFFER_SIZE, &t);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue