@@ -31,11 +31,18 @@ static const unsigned int masks[] = {0, 0xFF, 0xFFFF, 0xFFFFFF, 0xFFFFFFFF};
3131static int
3232fbound (double val , double minval , double maxval )
3333{
34- if (val > maxval )
34+ if (val > maxval ) {
3535 val = maxval ;
36- else if (val < minval + 1 )
36+ }
37+ else if (val < minval + 1.0 ) {
3738 val = minval ;
38- return val ;
39+ }
40+
41+ /* Round towards minus infinity (-inf) */
42+ val = floor (val );
43+
44+ /* Cast double to integer: round towards zero */
45+ return (int )val ;
3946}
4047
4148
@@ -793,8 +800,8 @@ audioop_mul(PyObject *self, PyObject *args)
793800 if ( size == 1 ) val = (int )* CHARP (cp , i );
794801 else if ( size == 2 ) val = (int )* SHORTP (cp , i );
795802 else if ( size == 4 ) val = (int )* LONGP (cp , i );
796- fval = (double )val * factor ;
797- val = ( int ) floor ( fbound (fval , minval , maxval ) );
803+ fval = (double )val * factor ;
804+ val = fbound (fval , minval , maxval );
798805 if ( size == 1 ) * CHARP (ncp , i ) = (signed char )val ;
799806 else if ( size == 2 ) * SHORTP (ncp , i ) = (short )val ;
800807 else if ( size == 4 ) * LONGP (ncp , i ) = (Py_Int32 )val ;
@@ -837,8 +844,8 @@ audioop_tomono(PyObject *self, PyObject *args)
837844 if ( size == 1 ) val2 = (int )* CHARP (cp , i + 1 );
838845 else if ( size == 2 ) val2 = (int )* SHORTP (cp , i + 2 );
839846 else if ( size == 4 ) val2 = (int )* LONGP (cp , i + 4 );
840- fval = (double )val1 * fac1 + (double )val2 * fac2 ;
841- val1 = ( int ) floor ( fbound (fval , minval , maxval ) );
847+ fval = (double )val1 * fac1 + (double )val2 * fac2 ;
848+ val1 = fbound (fval , minval , maxval );
842849 if ( size == 1 ) * CHARP (ncp , i /2 ) = (signed char )val1 ;
843850 else if ( size == 2 ) * SHORTP (ncp , i /2 ) = (short )val1 ;
844851 else if ( size == 4 ) * LONGP (ncp , i /2 )= (Py_Int32 )val1 ;
@@ -881,11 +888,11 @@ audioop_tostereo(PyObject *self, PyObject *args)
881888 else if ( size == 2 ) val = (int )* SHORTP (cp , i );
882889 else if ( size == 4 ) val = (int )* LONGP (cp , i );
883890
884- fval = (double )val * fac1 ;
885- val1 = ( int ) floor ( fbound (fval , minval , maxval ) );
891+ fval = (double )val * fac1 ;
892+ val1 = fbound (fval , minval , maxval );
886893
887- fval = (double )val * fac2 ;
888- val2 = ( int ) floor ( fbound (fval , minval , maxval ) );
894+ fval = (double )val * fac2 ;
895+ val2 = fbound (fval , minval , maxval );
889896
890897 if ( size == 1 ) * CHARP (ncp , i * 2 ) = (signed char )val1 ;
891898 else if ( size == 2 ) * SHORTP (ncp , i * 2 ) = (short )val1 ;
@@ -944,7 +951,7 @@ audioop_add(PyObject *self, PyObject *args)
944951 else {
945952 double fval = (double )val1 + (double )val2 ;
946953 /* truncate in case of overflow */
947- newval = ( int ) floor ( fbound (fval , minval , maxval ) );
954+ newval = fbound (fval , minval , maxval );
948955 }
949956
950957 if ( size == 1 ) * CHARP (ncp , i ) = (signed char )newval ;
0 commit comments