@@ -20,10 +20,17 @@ static const unsigned int masks[] = {0, 0xFF, 0xFFFF, 0xFFFFFF, 0xFFFFFFFF};
20
20
static int
21
21
fbound (double val , double minval , double maxval )
22
22
{
23
- if (val > maxval )
23
+ if (val > maxval ) {
24
24
val = maxval ;
25
- else if (val < minval + 1 )
25
+ }
26
+ else if (val < minval + 1.0 ) {
26
27
val = minval ;
28
+ }
29
+
30
+ /* Round towards minus infinity (-inf) */
31
+ val = floor (val );
32
+
33
+ /* Cast double to integer: round towards zero */
27
34
return (int )val ;
28
35
}
29
36
@@ -924,9 +931,8 @@ audioop_mul_impl(PyObject *module, Py_buffer *fragment, int width,
924
931
925
932
for (i = 0 ; i < fragment -> len ; i += width ) {
926
933
double val = GETRAWSAMPLE (width , fragment -> buf , i );
927
- val *= factor ;
928
- val = floor (fbound (val , minval , maxval ));
929
- SETRAWSAMPLE (width , ncp , i , (int )val );
934
+ int ival = fbound (val * factor , minval , maxval );
935
+ SETRAWSAMPLE (width , ncp , i , ival );
930
936
}
931
937
return rv ;
932
938
}
@@ -973,9 +979,9 @@ audioop_tomono_impl(PyObject *module, Py_buffer *fragment, int width,
973
979
for (i = 0 ; i < len ; i += width * 2 ) {
974
980
double val1 = GETRAWSAMPLE (width , cp , i );
975
981
double val2 = GETRAWSAMPLE (width , cp , i + width );
976
- double val = val1 * lfactor + val2 * rfactor ;
977
- val = floor ( fbound (val , minval , maxval ) );
978
- SETRAWSAMPLE (width , ncp , i /2 , val );
982
+ double val = val1 * lfactor + val2 * rfactor ;
983
+ int ival = fbound (val , minval , maxval );
984
+ SETRAWSAMPLE (width , ncp , i /2 , ival );
979
985
}
980
986
return rv ;
981
987
}
@@ -1021,8 +1027,8 @@ audioop_tostereo_impl(PyObject *module, Py_buffer *fragment, int width,
1021
1027
1022
1028
for (i = 0 ; i < fragment -> len ; i += width ) {
1023
1029
double val = GETRAWSAMPLE (width , fragment -> buf , i );
1024
- int val1 = ( int ) floor ( fbound (val * lfactor , minval , maxval ) );
1025
- int val2 = ( int ) floor ( fbound (val * rfactor , minval , maxval ) );
1030
+ int val1 = fbound (val * lfactor , minval , maxval );
1031
+ int val2 = fbound (val * rfactor , minval , maxval );
1026
1032
SETRAWSAMPLE (width , ncp , i * 2 , val1 );
1027
1033
SETRAWSAMPLE (width , ncp , i * 2 + width , val2 );
1028
1034
}
@@ -1080,7 +1086,7 @@ audioop_add_impl(PyObject *module, Py_buffer *fragment1,
1080
1086
else {
1081
1087
double fval = (double )val1 + (double )val2 ;
1082
1088
/* truncate in case of overflow */
1083
- newval = ( int ) floor ( fbound (fval , minval , maxval ) );
1089
+ newval = fbound (fval , minval , maxval );
1084
1090
}
1085
1091
1086
1092
SETRAWSAMPLE (width , ncp , i , newval );
0 commit comments