Qemu support for S32 and U32 alsa output, by Vassili Karpov.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2427 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
ths 2007-02-17 22:19:29 +00:00
parent b93aebecb0
commit f941aa256f
9 changed files with 215 additions and 49 deletions

View file

@ -82,6 +82,7 @@
#undef IN_T
#undef SHIFT
/* Unsigned 16 bit */
#define IN_T uint16_t
#define IN_MIN 0
#define IN_MAX USHRT_MAX
@ -101,26 +102,72 @@
#undef IN_T
#undef SHIFT
t_sample *mixeng_conv[2][2][2][2] = {
/* Signed 32 bit */
#define IN_T int32_t
#define IN_MIN INT32_MIN
#define IN_MAX INT32_MAX
#define SIGNED
#define SHIFT 32
#define ENDIAN_CONVERSION natural
#define ENDIAN_CONVERT(v) (v)
#include "mixeng_template.h"
#undef ENDIAN_CONVERT
#undef ENDIAN_CONVERSION
#define ENDIAN_CONVERSION swap
#define ENDIAN_CONVERT(v) bswap32 (v)
#include "mixeng_template.h"
#undef ENDIAN_CONVERT
#undef ENDIAN_CONVERSION
#undef SIGNED
#undef IN_MAX
#undef IN_MIN
#undef IN_T
#undef SHIFT
/* Unsigned 16 bit */
#define IN_T uint32_t
#define IN_MIN 0
#define IN_MAX UINT32_MAX
#define SHIFT 32
#define ENDIAN_CONVERSION natural
#define ENDIAN_CONVERT(v) (v)
#include "mixeng_template.h"
#undef ENDIAN_CONVERT
#undef ENDIAN_CONVERSION
#define ENDIAN_CONVERSION swap
#define ENDIAN_CONVERT(v) bswap32 (v)
#include "mixeng_template.h"
#undef ENDIAN_CONVERT
#undef ENDIAN_CONVERSION
#undef IN_MAX
#undef IN_MIN
#undef IN_T
#undef SHIFT
t_sample *mixeng_conv[2][2][2][3] = {
{
{
{
conv_natural_uint8_t_to_mono,
conv_natural_uint16_t_to_mono
conv_natural_uint16_t_to_mono,
conv_natural_uint32_t_to_mono
},
{
conv_natural_uint8_t_to_mono,
conv_swap_uint16_t_to_mono
conv_swap_uint16_t_to_mono,
conv_swap_uint32_t_to_mono,
}
},
{
{
conv_natural_int8_t_to_mono,
conv_natural_int16_t_to_mono
conv_natural_int16_t_to_mono,
conv_natural_int32_t_to_mono
},
{
conv_natural_int8_t_to_mono,
conv_swap_int16_t_to_mono
conv_swap_int16_t_to_mono,
conv_swap_int32_t_to_mono
}
}
},
@ -128,46 +175,54 @@ t_sample *mixeng_conv[2][2][2][2] = {
{
{
conv_natural_uint8_t_to_stereo,
conv_natural_uint16_t_to_stereo
conv_natural_uint16_t_to_stereo,
conv_natural_uint32_t_to_stereo
},
{
conv_natural_uint8_t_to_stereo,
conv_swap_uint16_t_to_stereo
conv_swap_uint16_t_to_stereo,
conv_swap_uint32_t_to_stereo
}
},
{
{
conv_natural_int8_t_to_stereo,
conv_natural_int16_t_to_stereo
conv_natural_int16_t_to_stereo,
conv_natural_int32_t_to_stereo
},
{
conv_natural_int8_t_to_stereo,
conv_swap_int16_t_to_stereo
conv_swap_int16_t_to_stereo,
conv_swap_int32_t_to_stereo,
}
}
}
};
f_sample *mixeng_clip[2][2][2][2] = {
f_sample *mixeng_clip[2][2][2][3] = {
{
{
{
clip_natural_uint8_t_from_mono,
clip_natural_uint16_t_from_mono
clip_natural_uint16_t_from_mono,
clip_natural_uint32_t_from_mono
},
{
clip_natural_uint8_t_from_mono,
clip_swap_uint16_t_from_mono
clip_swap_uint16_t_from_mono,
clip_swap_uint32_t_from_mono
}
},
{
{
clip_natural_int8_t_from_mono,
clip_natural_int16_t_from_mono
clip_natural_int16_t_from_mono,
clip_natural_int32_t_from_mono
},
{
clip_natural_int8_t_from_mono,
clip_swap_int16_t_from_mono
clip_swap_int16_t_from_mono,
clip_swap_int32_t_from_mono
}
}
},
@ -175,21 +230,25 @@ f_sample *mixeng_clip[2][2][2][2] = {
{
{
clip_natural_uint8_t_from_stereo,
clip_natural_uint16_t_from_stereo
clip_natural_uint16_t_from_stereo,
clip_natural_uint32_t_from_stereo
},
{
clip_natural_uint8_t_from_stereo,
clip_swap_uint16_t_from_stereo
clip_swap_uint16_t_from_stereo,
clip_swap_uint32_t_from_stereo
}
},
{
{
clip_natural_int8_t_from_stereo,
clip_natural_int16_t_from_stereo
clip_natural_int16_t_from_stereo,
clip_natural_int32_t_from_stereo
},
{
clip_natural_int8_t_from_stereo,
clip_swap_int16_t_from_stereo
clip_swap_int16_t_from_stereo,
clip_swap_int32_t_from_stereo
}
}
}