📄 pa_converters.c
字号:
/* -------------------------------------------------------------------------- */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-- ) { PaInt32 samp = (PaInt32)(*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; PaInt32 samp = (PaInt32) 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 ){ PaInt32 *src = (PaInt32*)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 ){ PaInt32 *src = (PaInt32*)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 ){ PaInt32 *src = (PaInt32*)sourceBuffer; PaInt16 *dest = (PaInt16*)destinationBuffer; (void)ditherGenerator; /* unused parameter */ while( count-- ) { *dest = (PaInt16) ((*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 ){ PaInt32 *src = (PaInt32*)sourceBuffer; PaInt16 *dest = (PaInt16*)destinationBuffer; PaInt32 dither; while( count-- ) { /* REVIEW */ dither = PaUtil_Generate16BitTriangularDither( ditherGenerator ); *dest = (PaInt16) ((((*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 ){ PaInt32 *src = (PaInt32*)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 ){ PaInt32 *src = (PaInt32*)sourceBuffer; signed char *dest = (signed char*)destinationBuffer; PaInt32 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 ){ PaInt32 *src = (PaInt32*)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 ){ PaInt32 *src = (PaInt32*)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; PaInt32 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 = (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; PaInt32 *dest = (PaInt32*) destinationBuffer; PaInt32 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 + -