From 11f89760995d7b53a808949c9d9734f80b9f769f Mon Sep 17 00:00:00 2001 From: hazza203 Date: Thu, 2 Jan 2025 14:19:35 +0800 Subject: [PATCH] feat: Release the GIL when decoding the image --- src/wuffs-aux-image-wrapper.h | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/wuffs-aux-image-wrapper.h b/src/wuffs-aux-image-wrapper.h index 23e5077..9952448 100644 --- a/src/wuffs-aux-image-wrapper.h +++ b/src/wuffs-aux-image-wrapper.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -343,16 +344,20 @@ class ImageDecoder : public wuffs_aux::DecodeImageCallbacks { } ImageDecodingResult DecodeInternal(wuffs_aux::sync_io::Input& input) { - wuffs_aux::DecodeImageResult decode_image_result = wuffs_aux::DecodeImage( - *this, input, quirks_, flags_, pixel_blend_, background_color_, - max_incl_dimension_, max_incl_metadata_length_); - decoding_result_.error_message = - std::move(decode_image_result.error_message); - if (!decode_image_result.pixbuf.pixcfg.is_valid()) { + std::unique_ptr decode_image_result; + + Py_BEGIN_ALLOW_THREADS; + decode_image_result = std::make_unique( + wuffs_aux::DecodeImage( + *this, input, quirks_, flags_, pixel_blend_, background_color_, + max_incl_dimension_, max_incl_metadata_length_)); + Py_END_ALLOW_THREADS; + decoding_result_.error_message = std::move(decode_image_result->error_message); + if (!decode_image_result->pixbuf.pixcfg.is_valid()) { decoding_result_.pixbuf = {}; decoding_result_.pixcfg = wuffs_base__null_pixel_config(); } else { - decoding_result_.pixcfg = decode_image_result.pixbuf.pixcfg; + decoding_result_.pixcfg = decode_image_result->pixbuf.pixcfg; decoding_result_.pixbuf = decoding_result_.pixbuf.reshape(std::vector{ decoding_result_.pixcfg.height(), decoding_result_.pixcfg.width(),