📄 pa_converters.c
字号:
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
float *src = (float*)sourceBuffer;
signed char *dest = (signed char*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
float dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator );
/* use smaller scaler to prevent overflow when we add the dither */
float dithered = (*src * (126.0f)) + dither;
signed long samp = (signed long) dithered;
*dest = (signed char) samp;
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Float32_To_Int8_Clip(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
float *src = (float*)sourceBuffer;
signed char *dest = (signed char*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
signed long samp = (signed long)(*src * (127.0f));
PA_CLIP_( samp, -0x80, 0x7F );
*dest = (signed char) samp;
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Float32_To_Int8_DitherClip(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
float *src = (float*)sourceBuffer;
signed char *dest = (signed char*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
float dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator );
/* use smaller scaler to prevent overflow when we add the dither */
float dithered = (*src * (126.0f)) + dither;
signed long samp = (signed long) dithered;
PA_CLIP_( samp, -0x80, 0x7F );
*dest = (signed char) samp;
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Float32_To_UInt8(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
float *src = (float*)sourceBuffer;
unsigned char *dest = (unsigned char*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
unsigned char samp = (unsigned char)(128 + ((unsigned char) (*src * (127.0f))));
*dest = samp;
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Float32_To_UInt8_Dither(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
float *src = (float*)sourceBuffer;
unsigned char *dest = (unsigned char*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
/* IMPLEMENT ME */
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Float32_To_UInt8_Clip(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
float *src = (float*)sourceBuffer;
unsigned char *dest = (unsigned char*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
/* IMPLEMENT ME */
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Float32_To_UInt8_DitherClip(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
float *src = (float*)sourceBuffer;
unsigned char *dest = (unsigned char*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
/* IMPLEMENT ME */
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int32_To_Float32(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed long *src = (signed long*)sourceBuffer;
float *dest = (float*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
*dest = (float) ((double)*src * const_1_div_2147483648_);
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int32_To_Int24(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed long *src = (signed long*)sourceBuffer;
unsigned char *dest = (unsigned char*)destinationBuffer;
(void) ditherGenerator; /* unused parameter */
while( count-- )
{
/* REVIEW */
#if defined(PA_LITTLE_ENDIAN)
dest[0] = (unsigned char)(*src >> 8);
dest[1] = (unsigned char)(*src >> 16);
dest[2] = (unsigned char)(*src >> 24);
#elif defined(PA_BIG_ENDIAN)
dest[0] = (unsigned char)(*src >> 24);
dest[1] = (unsigned char)(*src >> 16);
dest[2] = (unsigned char)(*src >> 8);
#endif
src += sourceStride;
dest += destinationStride * 3;
}
}
/* -------------------------------------------------------------------------- */
static void Int32_To_Int24_Dither(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
(void) destinationBuffer; /* unused parameters */
(void) destinationStride; /* unused parameters */
(void) sourceBuffer; /* unused parameters */
(void) sourceStride; /* unused parameters */
(void) count; /* unused parameters */
(void) ditherGenerator; /* unused parameters */
/* IMPLEMENT ME */
}
/* -------------------------------------------------------------------------- */
static void Int32_To_Int16(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed long *src = (signed long*)sourceBuffer;
signed short *dest = (signed short*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
*dest = (signed short) ((*src) >> 16);
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int32_To_Int16_Dither(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed long *src = (signed long*)sourceBuffer;
signed short *dest = (signed short*)destinationBuffer;
signed long dither;
while( count-- )
{
/* REVIEW */
dither = PaUtil_Generate16BitTriangularDither( ditherGenerator );
*dest = (signed short) ((((*src)>>1) + dither) >> 15);
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int32_To_Int8(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed long *src = (signed long*)sourceBuffer;
signed char *dest = (signed char*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
*dest = (signed char) ((*src) >> 24);
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int32_To_Int8_Dither(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed long *src = (signed long*)sourceBuffer;
signed char *dest = (signed char*)destinationBuffer;
signed long dither;
while( count-- )
{
/* REVIEW */
dither = PaUtil_Generate16BitTriangularDither( ditherGenerator );
*dest = (signed char) ((((*src)>>1) + dither) >> 23);
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int32_To_UInt8(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed long *src = (signed long*)sourceBuffer;
unsigned char *dest = (unsigned char*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
(*dest) = (unsigned char)(((*src) >> 24) + 128);
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int32_To_UInt8_Dither(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed long *src = (signed long*)sourceBuffer;
unsigned char *dest = (unsigned char*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
/* IMPLEMENT ME */
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int24_To_Float32(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
unsigned char *src = (unsigned char*)sourceBuffer;
float *dest = (float*)destinationBuffer;
signed long temp;
(void) ditherGenerator; /* unused parameter */
while( count-- )
{
#if defined(PA_LITTLE_ENDIAN)
temp = (((long)src[0]) << 8);
temp = temp | (((long)src[1]) << 16);
temp = temp | (((long)src[2]) << 24);
#elif defined(PA_BIG_ENDIAN)
temp = (((long)src[0]) << 24);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -