Author: Amaury Forgeot d'Arc <amaur...@gmail.com> Branch: py3.3 Changeset: r75190:f9375d4e25c3 Date: 2014-12-31 16:32 +0100 http://bitbucket.org/pypy/pypy/changeset/f9375d4e25c3/
Log: audioop: Use cffi instead of ctypes to create mutable buffers also precompile the module. diff --git a/lib_pypy/audioop.py b/lib_pypy/audioop.py --- a/lib_pypy/audioop.py +++ b/lib_pypy/audioop.py @@ -2,7 +2,7 @@ import math import struct from fractions import gcd -from ctypes import create_string_buffer +from cffi import FFI _buffer = memoryview @@ -327,13 +327,14 @@ _check_params(len(cp), size) clip = _get_clipfn(size) - result = create_string_buffer(len(cp)) + rv = ffi.new("unsigned char[]", len(cp)) + result = ffi.buffer(rv) for i, sample in enumerate(_get_samples(cp, size)): sample = clip(int(sample * factor)) _put_sample(result, size, i, sample) - return result.raw + return result[:] def tomono(cp, size, fac1, fac2): @@ -342,7 +343,8 @@ sample_count = _sample_count(cp, size) - result = create_string_buffer(len(cp) // 2) + rv = ffi.new("unsigned char[]", len(cp) // 2) + result = ffi.buffer(rv) for i in range(0, sample_count, 2): l_sample = getsample(cp, size, i) @@ -353,7 +355,7 @@ _put_sample(result, size, i // 2, sample) - return result.raw + return result[:] def tostereo(cp, size, fac1, fac2): @@ -361,7 +363,8 @@ sample_count = _sample_count(cp, size) - result = create_string_buffer(len(cp) * 2) + rv = ffi.new("unsigned char[]", len(cp) * 2) + result = ffi.buffer(rv) clip = _get_clipfn(size) for i in range(sample_count): @@ -373,7 +376,7 @@ _put_sample(result, size, i * 2, l_sample) _put_sample(result, size, i * 2 + 1, r_sample) - return result.raw + return result[:] def add(cp1, cp2, size): @@ -384,7 +387,8 @@ clip = _get_clipfn(size) sample_count = _sample_count(cp1, size) - result = create_string_buffer(len(cp1)) + rv = ffi.new("unsigned char[]", len(cp1)) + result = ffi.buffer(rv) for i in range(sample_count): sample1 = getsample(cp1, size, i) @@ -394,30 +398,32 @@ _put_sample(result, size, i, sample) - return result.raw + return result[:] def bias(cp, size, bias): _check_params(len(cp), size) - result = create_string_buffer(len(cp)) + rv = ffi.new("unsigned char[]", len(cp)) + result = ffi.buffer(rv) for i, sample in enumerate(_get_samples(cp, size)): sample = _overflow(sample + bias, size) _put_sample(result, size, i, sample) - return result.raw + return result[:] def reverse(cp, size): _check_params(len(cp), size) sample_count = _sample_count(cp, size) - result = create_string_buffer(len(cp)) + rv = ffi.new("unsigned char[]", len(cp)) + result = ffi.buffer(rv) for i, sample in enumerate(_get_samples(cp, size)): _put_sample(result, size, sample_count - i - 1, sample) - return result.raw + return result[:] def lin2lin(cp, size, size2): @@ -428,7 +434,8 @@ return cp new_len = (len(cp) // size) * size2 - result = create_string_buffer(new_len) + rv = ffi.new("unsigned char[]", new_len) + result = ffi.buffer(rv) for i in range(_sample_count(cp, size)): sample = _get_sample(cp, size, i) @@ -443,7 +450,7 @@ sample = _overflow(sample, size2) _put_sample(result, size2, i, sample) - return result.raw + return result[:] def ratecv(cp, size, nchannels, inrate, outrate, state, weightA=1, weightB=0): @@ -488,7 +495,8 @@ ceiling = (q + 1) * outrate nbytes = ceiling * bytes_per_frame - result = create_string_buffer(nbytes) + rv = ffi.new("unsigned char[]", nbytes) + result = ffi.buffer(rv) samples = _get_samples(cp, size) out_i = 0 @@ -496,7 +504,7 @@ while d < 0: if frame_count == 0: samps = zip(prev_i, cur_i) - retval = result.raw + retval = result[:] # slice off extra bytes trim_index = (out_i * bytes_per_frame) - len(retval) @@ -527,7 +535,6 @@ d -= inrate -from cffi import FFI ffi = FFI() ffi.cdef(""" typedef short PyInt16; diff --git a/pypy/tool/release/package.py b/pypy/tool/release/package.py --- a/pypy/tool/release/package.py +++ b/pypy/tool/release/package.py @@ -111,7 +111,7 @@ ''' def create_cffi_import_libraries(pypy_c, options): - modules = ['_sqlite3', '_lzma'] + modules = ['_sqlite3', '_lzma', 'audioop'] subprocess.check_call([str(pypy_c), '-c', 'import _sqlite3']) if not sys.platform == 'win32': modules += ['_curses', 'syslog', '_gdbm', '_sqlite3'] _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit