[MPlayer-cvslog] CVS: main/libaf af_format.c,1.27,1.28
Richard Felker CVS
syncmail at mplayerhq.hu
Thu Feb 24 17:48:20 CET 2005
CVS change done by Richard Felker CVS
Update of /cvsroot/mplayer/main/libaf
In directory mail:/var2/tmp/cvs-serv10232/libaf
Modified Files:
af_format.c
Log Message:
100l for me, lrintf is better. now fixed so it should be prototyped, and should work even if there is no prototype
Index: af_format.c
===================================================================
RCS file: /cvsroot/mplayer/main/libaf/af_format.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- af_format.c 22 Feb 2005 02:12:58 -0000 1.27
+++ af_format.c 24 Feb 2005 16:48:18 -0000 1.28
@@ -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;
}
}
More information about the MPlayer-cvslog
mailing list