From 8c877482bd5406376dcbd2411437b19270b9d28c Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Wed, 2 Mar 2016 06:26:25 -0800 Subject: [PATCH] Fix leptonica initializers --- ocrmypdf/leptonica.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/ocrmypdf/leptonica.py b/ocrmypdf/leptonica.py index 45a04423..17eeca00 100644 --- a/ocrmypdf/leptonica.py +++ b/ocrmypdf/leptonica.py @@ -110,8 +110,8 @@ class Pix: return "" def __getstate__(self): - data = ffi.new('l_uint32 *[]', 1) - size = ffi.new('size_t *', 0) + data = ffi.new('l_uint32 **') + size = ffi.new('size_t *') err = lept.pixSerializeToMemory(self.cpix, data, size) if err != 0: @@ -195,16 +195,21 @@ class Pix: else: return (None, None) + @staticmethod + @lru_cache(maxsize=1) + def make_pixel_sum_tab8(): + return lept.makePixelSumTab8() + @staticmethod def correlation_binary(pix1, pix2): if get_leptonica_version() < 'leptonica-1.72': # Older versions of Leptonica (pre-1.72) have a buggy # implementation of pixCorrelationBinary that overflows on larger # images. - pix1_count = ffi.new('l_int32 *', 0) - pix2_count = ffi.new('l_int32 *', 0) - pixn_count = ffi.new('l_int32 *', 0) - tab8 = lept.makePixelSumTab8() # Small memory leak on each call + pix1_count = ffi.new('l_int32 *') + pix2_count = ffi.new('l_int32 *') + pixn_count = ffi.new('l_int32 *') + tab8 = Pix.make_pixel_sum_tab8() lept.pixCountPixels(pix1.cpix, pix1_count, tab8) lept.pixCountPixels(pix2.cpix, pix2_count, tab8)