Author: Richard Plangger <planri...@gmail.com>
Branch: py3.5
Changeset: r90293:f533d9936aca
Date: 2017-02-22 14:38 +0100
http://bitbucket.org/pypy/pypy/changeset/f533d9936aca/

Log:    some last tweaks to pass the test audioop suite

diff --git a/lib_pypy/_audioop_build.py b/lib_pypy/_audioop_build.py
--- a/lib_pypy/_audioop_build.py
+++ b/lib_pypy/_audioop_build.py
@@ -389,7 +389,7 @@
                 else if (size == 2)
                     cur_i[chan] = ((int)*SHORTP(cp, 0)) << 16;
                 else if (size == 3)
-                    cur_i[chan] = ((int)GETINT24(cp, 0)) << 16;
+                    cur_i[chan] = ((int)GETINT24(cp, 0)) << 8;
                 else if (size == 4)
                     cur_i[chan] = (int)*LONGP(cp, 0);
                 cp += size;
@@ -453,7 +453,7 @@
 
         if ( size == 1 )      *CHARP(ncp, i*2+1) = (signed char)val2;
         else if ( size == 2 ) *SHORTP(ncp, i*2+2) = (short)val2;
-        else if ( size == 3 ) SETINT24(ncp, i*2, val1);
+        else if ( size == 3 ) SETINT24(ncp, i*2+3, val2);
         else if ( size == 4 ) *LONGP(ncp, i*2+4) = (Py_Int32)val2;
     }
 }
diff --git a/lib_pypy/audioop.py b/lib_pypy/audioop.py
--- a/lib_pypy/audioop.py
+++ b/lib_pypy/audioop.py
@@ -104,6 +104,10 @@
         return 0x7fff
     elif size == 2:
         return 0xffff
+    elif signed and size == 3:
+        return 0x7fffff
+    elif size == 3:
+        return 0xffffff
     elif signed and size == 4:
         return 0x7fffffff
     elif size == 4:
@@ -117,6 +121,8 @@
         return -0x80
     elif size == 2:
         return -0x8000
+    elif size == 3:
+        return -0x800000
     elif size == 4:
         return -0x80000000
 
@@ -474,10 +480,14 @@
             sample <<= 24
         elif size == 2:
             sample <<= 16
+        elif size == 3:
+            sample <<= 8
         if size2 == 1:
             sample >>= 24
         elif size2 == 2:
             sample >>= 16
+        elif size2 == 3:
+            sample >>= 8
         sample = _overflow(sample, size2)
         _put_sample(result, size2, i, sample)
 
@@ -531,7 +541,8 @@
     nbytes = ceiling * bytes_per_frame
 
     rv = ffi.new("char[]", nbytes)
-    trim_index = lib.ratecv(rv, cp, frame_count, size,
+    cpbuf = ffi.from_buffer(cp)
+    trim_index = lib.ratecv(rv, cpbuf, frame_count, size,
                             nchannels, inrate, outrate,
                             state_d, prev_i, cur_i,
                             weightA, weightB)
@@ -606,7 +617,8 @@
     state = _check_state(state)
     rv = ffi.new("unsigned char[]", len(cp) // size // 2)
     state_ptr = ffi.new("int[]", state)
-    lib.lin2adcpm(rv, cp, len(cp), size, state_ptr)
+    cpbuf = ffi.cast("unsigned char*", ffi.from_buffer(cp))
+    lib.lin2adcpm(rv, cpbuf, len(cp), size, state_ptr)
     return ffi.buffer(rv)[:], tuple(state_ptr)
 
 
@@ -615,7 +627,8 @@
     state = _check_state(state)
     rv = ffi.new("unsigned char[]", len(cp) * size * 2)
     state_ptr = ffi.new("int[]", state)
-    lib.adcpm2lin(rv, ffi.from_buffer(cp), len(cp), size, state_ptr)
+    cpbuf = ffi.cast("unsigned char*", ffi.from_buffer(cp))
+    lib.adcpm2lin(rv, cpbuf, len(cp), size, state_ptr)
     return ffi.buffer(rv)[:], tuple(state_ptr)
 
 def byteswap(cp, size):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to