mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-01 22:58:49 -04:00
Fixed signess for route conversion
This commit is contained in:
parent
63a11a974c
commit
07c07da44f
1 changed files with 34 additions and 34 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue