wasapi:
- fixed int24 Mono to Stereo mixer (affects Mono streams starting in Exclusive mode) pa_converters: - avoid using 64-bit integer math for Int24_To_Float32 and Int24_To_Int32 under x64 Posix platforms (long is 64-bit there), now using explicit PaInt32 type
This commit is contained in:
parent
14a79e0e89
commit
d714962621
2 changed files with 15 additions and 18 deletions
|
|
@ -1073,13 +1073,13 @@ static void Int24_To_Float32(
|
||||||
{
|
{
|
||||||
|
|
||||||
#if defined(PA_LITTLE_ENDIAN)
|
#if defined(PA_LITTLE_ENDIAN)
|
||||||
temp = (((long)src[0]) << 8);
|
temp = (((PaInt32)src[0]) << 8);
|
||||||
temp = temp | (((long)src[1]) << 16);
|
temp = temp | (((PaInt32)src[1]) << 16);
|
||||||
temp = temp | (((long)src[2]) << 24);
|
temp = temp | (((PaInt32)src[2]) << 24);
|
||||||
#elif defined(PA_BIG_ENDIAN)
|
#elif defined(PA_BIG_ENDIAN)
|
||||||
temp = (((long)src[0]) << 24);
|
temp = (((PaInt32)src[0]) << 24);
|
||||||
temp = temp | (((long)src[1]) << 16);
|
temp = temp | (((PaInt32)src[1]) << 16);
|
||||||
temp = temp | (((long)src[2]) << 8);
|
temp = temp | (((PaInt32)src[2]) << 8);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
*dest = (float) ((double)temp * const_1_div_2147483648_);
|
*dest = (float) ((double)temp * const_1_div_2147483648_);
|
||||||
|
|
@ -1106,13 +1106,13 @@ static void Int24_To_Int32(
|
||||||
{
|
{
|
||||||
|
|
||||||
#if defined(PA_LITTLE_ENDIAN)
|
#if defined(PA_LITTLE_ENDIAN)
|
||||||
temp = (((long)src[0]) << 8);
|
temp = (((PaInt32)src[0]) << 8);
|
||||||
temp = temp | (((long)src[1]) << 16);
|
temp = temp | (((PaInt32)src[1]) << 16);
|
||||||
temp = temp | (((long)src[2]) << 24);
|
temp = temp | (((PaInt32)src[2]) << 24);
|
||||||
#elif defined(PA_BIG_ENDIAN)
|
#elif defined(PA_BIG_ENDIAN)
|
||||||
temp = (((long)src[0]) << 24);
|
temp = (((PaInt32)src[0]) << 24);
|
||||||
temp = temp | (((long)src[1]) << 16);
|
temp = temp | (((PaInt32)src[1]) << 16);
|
||||||
temp = temp | (((long)src[2]) << 8);
|
temp = temp | (((PaInt32)src[2]) << 8);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
*dest = temp;
|
*dest = temp;
|
||||||
|
|
|
||||||
|
|
@ -850,8 +850,8 @@ static BOOL UseWOW64VistaWorkaround()
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------
|
||||||
#define _WASAPI_MONO_TO_STEREO_MIXER(TYPE)\
|
#define _WASAPI_MONO_TO_STEREO_MIXER(TYPE)\
|
||||||
TYPE * __restrict to = __to;\
|
TYPE * __restrict to = (TYPE *)__to;\
|
||||||
TYPE * __restrict from = __from;\
|
TYPE * __restrict from = (TYPE *)__from;\
|
||||||
TYPE * __restrict end = from + count;\
|
TYPE * __restrict end = from + count;\
|
||||||
while (from != end)\
|
while (from != end)\
|
||||||
{\
|
{\
|
||||||
|
|
@ -875,10 +875,7 @@ static void _MixMonoToStereo_16(void *__to, void *__from, UINT32 count)
|
||||||
// ------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------
|
||||||
static void _MixMonoToStereo_24(void *__to, void *__from, UINT32 count)
|
static void _MixMonoToStereo_24(void *__to, void *__from, UINT32 count)
|
||||||
{
|
{
|
||||||
#pragma pack(push, 1)
|
_WASAPI_MONO_TO_STEREO_MIXER(int); // !!! int24 data is contained in 32-bit containers
|
||||||
typedef struct wasapi_int24 { BYTE d[3]; } wasapi_int24; //<< 24 bit value, packed to 1 byte to avoid padding
|
|
||||||
#pragma pack(pop)
|
|
||||||
_WASAPI_MONO_TO_STEREO_MIXER(wasapi_int24);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue