Mercurial > mplayer.hg
changeset 14791:df515839c8a9
100l for me, lrintf is better. now fixed so it should be prototyped, and should work even if there is no prototype
author | rfelker |
---|---|
date | Thu, 24 Feb 2005 16:48:18 +0000 |
parents | fa645382285f |
children | 6c12ee26fab9 |
files | libaf/af_format.c |
diffstat | 1 files changed, 23 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/libaf/af_format.c Thu Feb 24 15:22:04 2005 +0000 +++ b/libaf/af_format.c Thu Feb 24 16:48:18 2005 +0000 @@ -3,6 +3,9 @@ AFMT_U16_LE, AFMT_U16_BE, AFMT_S32_LE and AFMT_S32_BE. */ +// Must be defined before any libc headers are included! +#define _ISOC9X_SOURCE + #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -14,6 +17,14 @@ #include "../bswap.h" #include "../libvo/fastmemcpy.h" +// Integer to float conversion through lrintf() +#ifdef HAVE_LRINTF +#include <math.h> +long int lrintf(float); +#else +#define lrintf(x) ((int)(x)) +#endif + /* Functions used by play to convert the input audio to the correct format */ @@ -31,9 +42,9 @@ // Change the number of bits per sample static void change_bps(void* in, void* out, int len, int inbps, int outbps); // From float to int signed -static void float2int(void* in, void* out, int len, int bps); +static void float2int(float* in, void* out, int len, int bps); // From signed int to float -static void int2float(void* in, void* out, int len, int bps); +static void int2float(void* in, float* out, int len, int bps); static af_data_t* play(struct af_instance_s* af, af_data_t* data); static af_data_t* play_swapendian(struct af_instance_s* af, af_data_t* data); @@ -488,48 +499,48 @@ } } -static void float2int(void* in, void* out, int len, int bps) +static void float2int(float* in, void* out, int len, int bps) { register int i; switch(bps){ case(1): for(i=0;i<len;i++) - ((int8_t*)out)[i] = (int)(127.0 * (1.0+((float*)in)[i])) - 127; + ((int8_t*)out)[i] = lrintf(127.0 * in[i]); break; case(2): for(i=0;i<len;i++) - ((int16_t*)out)[i] = (int)(32767.0 * (1.0+((float*)in)[i])) - 32767; + ((int16_t*)out)[i] = lrintf(32767.0 * in[i]); break; case(3): for(i=0;i<len;i++) - store24bit(out, i, (int)(2147483647.0 * (1.0+((float*)in)[i])) - 2147483647); + store24bit(out, i, lrintf(2147483647.0 * in[i])); break; case(4): for(i=0;i<len;i++) - ((int32_t*)out)[i] = (int)(2147483647.0 * (1.0+((float*)in)[i])) - 2147483647; + ((int32_t*)out)[i] = lrintf(2147483647.0 * in[i]); break; } } -static void int2float(void* in, void* out, int len, int bps) +static void int2float(void* in, float* out, int len, int bps) { register int i; switch(bps){ case(1): for(i=0;i<len;i++) - ((float*)out)[i]=(1.0/128.0)*((float)((int8_t*)in)[i]); + out[i]=(1.0/128.0)*((int8_t*)in)[i]; break; case(2): for(i=0;i<len;i++) - ((float*)out)[i]=(1.0/32768.0)*((float)((int16_t*)in)[i]); + out[i]=(1.0/32768.0)*((int16_t*)in)[i]; break; case(3): for(i=0;i<len;i++) - ((float*)out)[i]=(1.0/2147483648.0)*((float)((int32_t)load24bit(in, i))); + out[i]=(1.0/2147483648.0)*((int32_t)load24bit(in, i)); break; case(4): for(i=0;i<len;i++) - ((float*)out)[i]=(1.0/2147483648.0)*((float)((int32_t*)in)[i]); + out[i]=(1.0/2147483648.0)*((int32_t*)in)[i]; break; } }