Fixed signess for route conversion

This commit is contained in:
Jaroslav Kysela 2001-10-25 18:24:22 +00:00
parent 63a11a974c
commit 07c07da44f

View file

@ -76,8 +76,8 @@ struct snd_pcm_route_ttable_dst {
}; };
typedef union { typedef union {
u_int32_t as_uint32; int32_t as_sint32;
u_int64_t as_uint64; int64_t as_sint64;
#if ROUTE_PLUGIN_FLOAT #if ROUTE_PLUGIN_FLOAT
float as_float; float as_float;
#endif #endif
@ -156,10 +156,10 @@ static void snd_pcm_route_convert1_many(const snd_pcm_channel_area_t *dst_area,
const snd_pcm_route_ttable_dst_t* ttable, const snd_pcm_route_ttable_dst_t* ttable,
const snd_pcm_route_params_t *params) const snd_pcm_route_params_t *params)
{ {
#define GETU_LABELS #define GETS_LABELS
#define PUT32_LABELS #define PUT32_LABELS
#include "plugin_ops.h" #include "plugin_ops.h"
#undef GETU_LABELS #undef GETS_LABELS
#undef PUT32_LABELS #undef PUT32_LABELS
static void *zero_labels[3] = { static void *zero_labels[3] = {
&&zero_int32, &&zero_int64, &&zero_int32, &&zero_int64,
@ -211,7 +211,7 @@ static void snd_pcm_route_convert1_many(const snd_pcm_channel_area_t *dst_area,
const char *srcs[nsrcs]; const char *srcs[nsrcs];
int src_steps[nsrcs]; int src_steps[nsrcs];
snd_pcm_route_ttable_src_t src_tt[nsrcs]; snd_pcm_route_ttable_src_t src_tt[nsrcs];
u_int32_t sample = 0; int32_t sample = 0;
int srcidx, srcidx1 = 0; int srcidx, srcidx1 = 0;
for (srcidx = 0; srcidx < nsrcs; ++srcidx) { for (srcidx = 0; srcidx < nsrcs; ++srcidx) {
const snd_pcm_channel_area_t *src_area = &src_areas[ttable->srcs[srcidx].channel]; const snd_pcm_channel_area_t *src_area = &src_areas[ttable->srcs[srcidx].channel];
@ -234,7 +234,7 @@ static void snd_pcm_route_convert1_many(const snd_pcm_channel_area_t *dst_area,
} }
zero = zero_labels[params->sum_idx]; zero = zero_labels[params->sum_idx];
get = getu_labels[params->get_idx]; get = gets_labels[params->get_idx];
add = add_labels[params->sum_idx * 2 + ttable->att]; add = add_labels[params->sum_idx * 2 + ttable->att];
norm = norm_labels[params->sum_idx * 8 + ttable->att * 4 + 4 - params->src_size]; norm = norm_labels[params->sum_idx * 8 + ttable->att * 4 + 4 - params->src_size];
put32 = put32_labels[params->put_idx]; put32 = put32_labels[params->put_idx];
@ -248,10 +248,10 @@ static void snd_pcm_route_convert1_many(const snd_pcm_channel_area_t *dst_area,
/* Zero sum */ /* Zero sum */
goto *zero; goto *zero;
zero_int32: zero_int32:
sum.as_uint32 = 0; sum.as_sint32 = 0;
goto zero_end; goto zero_end;
zero_int64: zero_int64:
sum.as_uint64 = 0; sum.as_sint64 = 0;
goto zero_end; goto zero_end;
#if ROUTE_PLUGIN_FLOAT #if ROUTE_PLUGIN_FLOAT
zero_float: zero_float:
@ -264,26 +264,26 @@ static void snd_pcm_route_convert1_many(const snd_pcm_channel_area_t *dst_area,
/* Get sample */ /* Get sample */
goto *get; goto *get;
#define GETU_END after_get #define GETS_END after_get
#include "plugin_ops.h" #include "plugin_ops.h"
#undef GETU_END #undef GETS_END
after_get: after_get:
/* Sum */ /* Sum */
goto *add; goto *add;
add_int32_att: add_int32_att:
sum.as_uint32 += sample * ttp->as_int; sum.as_sint32 += sample * ttp->as_int;
goto after_sum; goto after_sum;
add_int32_noatt: add_int32_noatt:
if (ttp->as_int) if (ttp->as_int)
sum.as_uint32 += sample; sum.as_sint32 += sample;
goto after_sum; goto after_sum;
add_int64_att: add_int64_att:
sum.as_uint64 += (u_int64_t) sample * ttp->as_int; sum.as_sint64 += (u_int64_t) sample * ttp->as_int;
goto after_sum; goto after_sum;
add_int64_noatt: add_int64_noatt:
if (ttp->as_int) if (ttp->as_int)
sum.as_uint64 += sample; sum.as_sint64 += sample;
goto after_sum; goto after_sum;
#if ROUTE_PLUGIN_FLOAT #if ROUTE_PLUGIN_FLOAT
add_float_att: add_float_att:
@ -302,51 +302,51 @@ static void snd_pcm_route_convert1_many(const snd_pcm_channel_area_t *dst_area,
/* Normalization */ /* Normalization */
goto *norm; goto *norm;
norm_int32_8_att: norm_int32_8_att:
sum.as_uint64 = sum.as_uint32; sum.as_sint64 = sum.as_sint32;
norm_int64_8_att: norm_int64_8_att:
sum.as_uint64 <<= 8; sum.as_sint64 <<= 8;
norm_int64_0_att: norm_int64_0_att:
div(sum.as_uint64); div(sum.as_sint64);
goto norm_int; goto norm_int;
norm_int32_16_att: norm_int32_16_att:
sum.as_uint64 = sum.as_uint32; sum.as_sint64 = sum.as_sint32;
norm_int64_16_att: norm_int64_16_att:
sum.as_uint64 <<= 16; sum.as_sint64 <<= 16;
div(sum.as_uint64); div(sum.as_sint64);
goto norm_int; goto norm_int;
norm_int32_24_att: norm_int32_24_att:
sum.as_uint64 = sum.as_uint32; sum.as_sint64 = sum.as_sint32;
norm_int64_24_att: norm_int64_24_att:
sum.as_uint64 <<= 24; sum.as_sint64 <<= 24;
div(sum.as_uint64); div(sum.as_sint64);
goto norm_int; goto norm_int;
norm_int32_8_noatt: norm_int32_8_noatt:
sum.as_uint64 = sum.as_uint32; sum.as_sint64 = sum.as_sint32;
norm_int64_8_noatt: norm_int64_8_noatt:
sum.as_uint64 <<= 8; sum.as_sint64 <<= 8;
goto norm_int; goto norm_int;
norm_int32_16_noatt: norm_int32_16_noatt:
sum.as_uint64 = sum.as_uint32; sum.as_sint64 = sum.as_sint32;
norm_int64_16_noatt: norm_int64_16_noatt:
sum.as_uint64 <<= 16; sum.as_sint64 <<= 16;
goto norm_int; goto norm_int;
norm_int32_24_noatt: norm_int32_24_noatt:
sum.as_uint64 = sum.as_uint32; sum.as_sint64 = sum.as_sint32;
norm_int64_24_noatt: norm_int64_24_noatt:
sum.as_uint64 <<= 24; sum.as_sint64 <<= 24;
goto norm_int; goto norm_int;
norm_int64_0_noatt: norm_int64_0_noatt:
norm_int: norm_int:
if (sum.as_uint64 > (u_int32_t)0xffffffff) if (sum.as_sint64 > (u_int32_t)0xffffffff)
sample = (u_int32_t)0xffffffff; sample = (u_int32_t)0xffffffff;
else else
sample = sum.as_uint64; sample = sum.as_sint64;
goto after_norm; goto after_norm;
#if ROUTE_PLUGIN_FLOAT #if ROUTE_PLUGIN_FLOAT
@ -547,15 +547,15 @@ static int snd_pcm_route_hw_params(snd_pcm_t *pcm, snd_pcm_hw_params_t * params)
src_format = slave->format; src_format = slave->format;
dst_format = snd_pcm_hw_params_get_format(params); dst_format = snd_pcm_hw_params_get_format(params);
} }
route->params.get_idx = snd_pcm_linear_get_index(src_format, SND_PCM_FORMAT_U16); route->params.get_idx = snd_pcm_linear_get_index(src_format, SND_PCM_FORMAT_S16);
route->params.put_idx = snd_pcm_linear_put_index(SND_PCM_FORMAT_U32, dst_format); route->params.put_idx = snd_pcm_linear_put_index(SND_PCM_FORMAT_S32, dst_format);
route->params.conv_idx = snd_pcm_linear_convert_index(src_format, dst_format); route->params.conv_idx = snd_pcm_linear_convert_index(src_format, dst_format);
route->params.src_size = snd_pcm_format_width(src_format) / 8; route->params.src_size = snd_pcm_format_width(src_format) / 8;
route->params.dst_sfmt = dst_format; route->params.dst_sfmt = dst_format;
#if ROUTE_PLUGIN_FLOAT #if ROUTE_PLUGIN_FLOAT
route->params.sum_idx = FLOAT; route->params.sum_idx = FLOAT;
#else #else
if (src_size == 4) if (snd_pcm_format_width(src_format) == 32)
route->params.sum_idx = UINT64; route->params.sum_idx = UINT64;
else else
route->params.sum_idx = UINT32; route->params.sum_idx = UINT32;