mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-02 09:01:48 -05:00
- fixed the type punning (compilation warnings with the recent GCC).
This commit is contained in:
parent
7a5a9f018c
commit
08874160c8
3 changed files with 37 additions and 28 deletions
|
|
@ -110,8 +110,8 @@ void snd_pcm_lfloat_convert_integer_float(const snd_pcm_channel_area_t *dst_area
|
||||||
int src_step, dst_step;
|
int src_step, dst_step;
|
||||||
snd_pcm_uframes_t frames1;
|
snd_pcm_uframes_t frames1;
|
||||||
int32_t sample = 0;
|
int32_t sample = 0;
|
||||||
float tmp_float;
|
snd_tmp_float_t tmp_float;
|
||||||
double tmp_double;
|
snd_tmp_double_t tmp_double;
|
||||||
const snd_pcm_channel_area_t *src_area = &src_areas[channel];
|
const snd_pcm_channel_area_t *src_area = &src_areas[channel];
|
||||||
const snd_pcm_channel_area_t *dst_area = &dst_areas[channel];
|
const snd_pcm_channel_area_t *dst_area = &dst_areas[channel];
|
||||||
src = snd_pcm_channel_area_addr(src_area, src_offset);
|
src = snd_pcm_channel_area_addr(src_area, src_offset);
|
||||||
|
|
@ -154,10 +154,9 @@ void snd_pcm_lfloat_convert_float_integer(const snd_pcm_channel_area_t *dst_area
|
||||||
char *dst;
|
char *dst;
|
||||||
int src_step, dst_step;
|
int src_step, dst_step;
|
||||||
snd_pcm_uframes_t frames1;
|
snd_pcm_uframes_t frames1;
|
||||||
int32_t sample;
|
int32_t sample = 0;
|
||||||
int64_t sample64;
|
snd_tmp_float_t tmp_float;
|
||||||
float tmp_float;
|
snd_tmp_double_t tmp_double;
|
||||||
double tmp_double;
|
|
||||||
const snd_pcm_channel_area_t *src_area = &src_areas[channel];
|
const snd_pcm_channel_area_t *src_area = &src_areas[channel];
|
||||||
const snd_pcm_channel_area_t *dst_area = &dst_areas[channel];
|
const snd_pcm_channel_area_t *dst_area = &dst_areas[channel];
|
||||||
src = snd_pcm_channel_area_addr(src_area, src_offset);
|
src = snd_pcm_channel_area_addr(src_area, src_offset);
|
||||||
|
|
|
||||||
|
|
@ -787,3 +787,15 @@ int snd_pcm_hw_open_fd(snd_pcm_t **pcmp, const char *name, int fd, int mmap_emul
|
||||||
(1U << SND_PCM_FORMAT_FLOAT_BE) | \
|
(1U << SND_PCM_FORMAT_FLOAT_BE) | \
|
||||||
(1U << SND_PCM_FORMAT_FLOAT64_LE) | \
|
(1U << SND_PCM_FORMAT_FLOAT64_LE) | \
|
||||||
(1U << SND_PCM_FORMAT_FLOAT64_BE)) }
|
(1U << SND_PCM_FORMAT_FLOAT64_BE)) }
|
||||||
|
|
||||||
|
|
||||||
|
typedef union snd_tmp_float {
|
||||||
|
float f;
|
||||||
|
int32_t i;
|
||||||
|
} snd_tmp_float_t;
|
||||||
|
|
||||||
|
typedef union snd_tmp_double {
|
||||||
|
double d;
|
||||||
|
int64_t l;
|
||||||
|
} snd_tmp_double_t;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -720,11 +720,11 @@ static void *put32float_labels[2 * 2] = {
|
||||||
|
|
||||||
#ifdef PUT32F_END
|
#ifdef PUT32F_END
|
||||||
put32f_1234_1234F: as_float(dst) = (float_t)((int32_t)sample) / (float_t)0x80000000UL; goto PUT32F_END;
|
put32f_1234_1234F: as_float(dst) = (float_t)((int32_t)sample) / (float_t)0x80000000UL; goto PUT32F_END;
|
||||||
put32f_1234_4321F: tmp_float = (float_t)((int32_t)sample) / (float_t)0x80000000UL;
|
put32f_1234_4321F: tmp_float.f = (float_t)((int32_t)sample) / (float_t)0x80000000UL;
|
||||||
as_u32(dst) = bswap_32(as_u32c(&tmp_float)); goto PUT32F_END;
|
as_u32(dst) = bswap_32(tmp_float.i); goto PUT32F_END;
|
||||||
put32f_1234_1234D: as_double(dst) = (double_t)((int32_t)sample) / (double_t)0x80000000UL; goto PUT32F_END;
|
put32f_1234_1234D: as_double(dst) = (double_t)((int32_t)sample) / (double_t)0x80000000UL; goto PUT32F_END;
|
||||||
put32f_1234_4321D: tmp_double = (double_t)((int32_t)sample) / (double_t)0x80000000UL;
|
put32f_1234_4321D: tmp_double.d = (double_t)((int32_t)sample) / (double_t)0x80000000UL;
|
||||||
as_u64(dst) = bswap_64(as_u64c(&tmp_double)); goto PUT32F_END;
|
as_u64(dst) = bswap_64(tmp_double.l); goto PUT32F_END;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef GET32F_LABELS
|
#ifdef GET32F_LABELS
|
||||||
|
|
@ -738,39 +738,37 @@ static void *get32float_labels[2 * 2] = {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef GET32F_END
|
#ifdef GET32F_END
|
||||||
get32f_1234F_1234: tmp_float = as_floatc(src);
|
get32f_1234F_1234: tmp_float.f = as_floatc(src);
|
||||||
if (tmp_float >= 1.0)
|
if (tmp_float.f >= 1.0)
|
||||||
sample = 0x7fffffff;
|
sample = 0x7fffffff;
|
||||||
else if (tmp_float <= -1.0)
|
else if (tmp_float.f <= -1.0)
|
||||||
sample = 0x80000000;
|
sample = 0x80000000;
|
||||||
else
|
else
|
||||||
sample = (int32_t)(tmp_float * (float_t)0x80000000UL);
|
sample = (int32_t)(tmp_float.f * (float_t)0x80000000UL);
|
||||||
goto GET32F_END;
|
goto GET32F_END;
|
||||||
get32f_4321F_1234: sample = bswap_32(as_u32c(src));
|
get32f_4321F_1234: tmp_float.i = bswap_32(as_u32c(src));
|
||||||
tmp_float = as_floatc(&sample);
|
if (tmp_float.f >= 1.0)
|
||||||
if (tmp_float >= 1.0)
|
|
||||||
sample = 0x7fffffff;
|
sample = 0x7fffffff;
|
||||||
else if (tmp_float <= -1.0)
|
else if (tmp_float.f <= -1.0)
|
||||||
sample = 0x80000000;
|
sample = 0x80000000;
|
||||||
else
|
else
|
||||||
sample = (int32_t)(tmp_float * (float_t)0x80000000UL);
|
sample = (int32_t)(tmp_float.f * (float_t)0x80000000UL);
|
||||||
goto GET32F_END;
|
goto GET32F_END;
|
||||||
get32f_1234D_1234: tmp_double = as_doublec(src);
|
get32f_1234D_1234: tmp_double.d = as_doublec(src);
|
||||||
if (tmp_double >= 1.0)
|
if (tmp_double.d >= 1.0)
|
||||||
sample = 0x7fffffff;
|
sample = 0x7fffffff;
|
||||||
else if (tmp_double <= -1.0)
|
else if (tmp_double.d <= -1.0)
|
||||||
sample = 0x80000000;
|
sample = 0x80000000;
|
||||||
else
|
else
|
||||||
sample = (int32_t)(tmp_double * (double_t)0x80000000UL);
|
sample = (int32_t)(tmp_double.d * (double_t)0x80000000UL);
|
||||||
goto GET32F_END;
|
goto GET32F_END;
|
||||||
get32f_4321D_1234: sample64 = bswap_64(as_u64c(src));
|
get32f_4321D_1234: tmp_double.l = bswap_64(as_u64c(src));
|
||||||
tmp_double = as_doublec(&sample);
|
if (tmp_double.d >= 1.0)
|
||||||
if (tmp_double >= 1.0)
|
|
||||||
sample = 0x7fffffff;
|
sample = 0x7fffffff;
|
||||||
else if (tmp_double <= -1.0)
|
else if (tmp_double.d <= -1.0)
|
||||||
sample = 0x80000000;
|
sample = 0x80000000;
|
||||||
else
|
else
|
||||||
sample = (int32_t)(tmp_double * (double_t)0x80000000UL);
|
sample = (int32_t)(tmp_double.d * (double_t)0x80000000UL);
|
||||||
goto GET32F_END;
|
goto GET32F_END;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue