123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- #include "main.h"
- #include <math.h>
- #pragma intrinsic(fabs)
- #define PA_CLIP_( val, min, max )\
- { val = ((val) < (min)) ? (min) : (((val) > (max)) ? (max) : (val)); }
- void Float32_To_Int16_Clip(
- void *destinationBuffer, signed int destinationStride,
- void *sourceBuffer, signed int sourceStride,
- unsigned int count)
- {
- float *src = (float*)sourceBuffer;
- signed short *dest = (signed short*)destinationBuffer;
- while( count-- )
- {
- long samp = lrint((*src * (32768.0)));
- PA_CLIP_( samp, -0x8000, 0x7FFF );
- *dest = (signed short) samp;
- src += sourceStride;
- dest += destinationStride;
- }
- }
- inline static double clip(double x, double a, double b)
- {
- double x1 = fabs (x-a);
- double x2 = fabs (x-b);
- x = x1 + (a+b);
- x -= x2;
- x *= 0.5;
- return x;
- }
- void Float32_To_Int24_Clip(
- void *destinationBuffer, signed int destinationStride,
- void *sourceBuffer, signed int sourceStride,
- unsigned int count)
- {
- float *src = (float*)sourceBuffer;
- unsigned char *dest = (unsigned char*)destinationBuffer;
- while( count-- )
- {
-
- double scaled = *src * 0x7FFFFFFF;
- scaled=clip( scaled, -2147483648., 2147483647. );
- signed long temp = (signed long) scaled;
- dest[0] = (unsigned char)(temp >> 8);
- dest[1] = (unsigned char)(temp >> 16);
- dest[2] = (unsigned char)(temp >> 24);
- src += sourceStride;
- dest += destinationStride * 3;
- }
- }
|