📄 pa_converters.c
字号:
temp = temp | (((long)src[1]) << 16);
temp = temp | (((long)src[2]) << 8);
#endif
*dest = (float) ((double)temp * const_1_div_2147483648_);
src += sourceStride * 3;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int24_To_Int32(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
unsigned char *src = (unsigned char*)sourceBuffer;
signed long *dest = (signed long*) 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);
temp = temp | (((long)src[1]) << 16);
temp = temp | (((long)src[2]) << 8);
#endif
*dest = temp;
src += sourceStride * 3;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int24_To_Int16(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
unsigned char *src = (unsigned char*)sourceBuffer;
signed short *dest = (signed short*)destinationBuffer;
signed short temp;
(void) ditherGenerator; /* unused parameter */
while( count-- )
{
#if defined(PA_LITTLE_ENDIAN)
/* src[0] is discarded */
temp = (((signed short)src[1]));
temp = temp | (signed short)(((signed short)src[2]) << 8);
#elif defined(PA_BIG_ENDIAN)
/* src[2] is discarded */
temp = (signed short)(((signed short)src[0]) << 8);
temp = temp | (((signed short)src[1]));
#endif
*dest = temp;
src += sourceStride * 3;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int24_To_Int16_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 Int24_To_Int8(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
unsigned char *src = (unsigned char*)sourceBuffer;
signed char *dest = (signed char*)destinationBuffer;
(void) ditherGenerator; /* unused parameter */
while( count-- )
{
#if defined(PA_LITTLE_ENDIAN)
/* src[0] is discarded */
/* src[1] is discarded */
*dest = src[2];
#elif defined(PA_BIG_ENDIAN)
/* src[2] is discarded */
/* src[1] is discarded */
*dest = src[0];
#endif
src += sourceStride * 3;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int24_To_Int8_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 Int24_To_UInt8(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
unsigned char *src = (unsigned char*)sourceBuffer;
unsigned char *dest = (unsigned char*)destinationBuffer;
(void) ditherGenerator; /* unused parameter */
while( count-- )
{
#if defined(PA_LITTLE_ENDIAN)
/* src[0] is discarded */
/* src[1] is discarded */
*dest = (unsigned char)(src[2] + 128);
#elif defined(PA_BIG_ENDIAN)
*dest = (unsigned char)(src[0] + 128);
/* src[1] is discarded */
/* src[2] is discarded */
#endif
src += sourceStride * 3;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int24_To_UInt8_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 Int16_To_Float32(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed short *src = (signed short*)sourceBuffer;
float *dest = (float*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
float samp = *src * const_1_div_32768_; /* FIXME: i'm concerned about this being asymetrical with float->int16 -rb */
*dest = samp;
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int16_To_Int32(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed short *src = (signed short*)sourceBuffer;
signed long *dest = (signed long*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
/* REVIEW: we should consider something like
(*src << 16) | (*src & 0xFFFF)
*/
*dest = *src << 16;
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int16_To_Int24(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed short *src = (signed short*) sourceBuffer;
unsigned char *dest = (unsigned char*)destinationBuffer;
signed short temp;
(void) ditherGenerator; /* unused parameter */
while( count-- )
{
temp = *src;
#if defined(PA_LITTLE_ENDIAN)
dest[0] = 0;
dest[1] = (unsigned char)(temp);
dest[2] = (unsigned char)(temp >> 8);
#elif defined(PA_BIG_ENDIAN)
dest[0] = (unsigned char)(temp >> 8);
dest[1] = (unsigned char)(temp);
dest[2] = 0;
#endif
src += sourceStride;
dest += destinationStride * 3;
}
}
/* -------------------------------------------------------------------------- */
static void Int16_To_Int8(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed short *src = (signed short*)sourceBuffer;
signed char *dest = (signed char*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
(*dest) = (signed char)((*src) >> 8);
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int16_To_Int8_Dither(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed short *src = (signed short*)sourceBuffer;
signed char *dest = (signed char*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
/* IMPLEMENT ME */
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int16_To_UInt8(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed short *src = (signed short*)sourceBuffer;
unsigned char *dest = (unsigned char*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
(*dest) = (unsigned char)(((*src) >> 8) + 128);
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int16_To_UInt8_Dither(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed short *src = (signed short*)sourceBuffer;
unsigned char *dest = (unsigned char*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
/* IMPLEMENT ME */
src += sourceStride;
dest += destinationStride;
}
}
/* -------------------------------------------------------------------------- */
static void Int8_To_Float32(
void *destinationBuffer, signed int destinationStride,
void *sourceBuffer, signed int sourceStride,
unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator )
{
signed char *src = (signed char*)sourceBuffer;
float *dest = (float*)destinationBuffer;
(void)ditherGenerator; /* unused parameter */
while( count-- )
{
float samp = *src * const_1_div_128_;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -