diff options
Diffstat (limited to 'graphics/libskiasharp/files/patch-src_codec_SkJpegCodec.cpp')
| -rw-r--r-- | graphics/libskiasharp/files/patch-src_codec_SkJpegCodec.cpp | 55 | 
1 files changed, 55 insertions, 0 deletions
| diff --git a/graphics/libskiasharp/files/patch-src_codec_SkJpegCodec.cpp b/graphics/libskiasharp/files/patch-src_codec_SkJpegCodec.cpp new file mode 100644 index 000000000000..a03a0306500d --- /dev/null +++ b/graphics/libskiasharp/files/patch-src_codec_SkJpegCodec.cpp @@ -0,0 +1,55 @@ +--- src/codec/SkJpegCodec.cpp.orig	2024-10-24 03:17:23 UTC ++++ src/codec/SkJpegCodec.cpp +@@ -426,16 +426,19 @@ SkISize SkJpegCodec::onGetScaledDimensions(float desir +         num = 1; +     } +  +-    // Set up a fake decompress struct in order to use libjpeg to calculate output dimensions ++    // Set up a fake decompress struct in order to use libjpeg to calculate output dimensions. ++    // This isn't conventional use of libjpeg-turbo but initializing the decompress struct with ++    // jpeg_create_decompress allows for less violation of the API regardless of the version. +     jpeg_decompress_struct dinfo; +-    sk_bzero(&dinfo, sizeof(dinfo)); ++    jpeg_create_decompress(&dinfo); +     dinfo.image_width = this->dimensions().width(); +     dinfo.image_height = this->dimensions().height(); +     dinfo.global_state = fReadyState; +     calc_output_dimensions(&dinfo, num, denom); ++    SkISize outputDimensions = SkISize::Make(dinfo.output_width, dinfo.output_height); ++    jpeg_destroy_decompress(&dinfo); +  +-    // Return the calculated output dimensions for the given scale +-    return SkISize::Make(dinfo.output_width, dinfo.output_height); ++    return outputDimensions; + } +  + bool SkJpegCodec::onRewind() { +@@ -534,9 +537,11 @@ bool SkJpegCodec::onDimensionsSupported(const SkISize& +     const unsigned int dstHeight = size.height(); +  +     // Set up a fake decompress struct in order to use libjpeg to calculate output dimensions ++    // This isn't conventional use of libjpeg-turbo but initializing the decompress struct with ++    // jpeg_create_decompress allows for less violation of the API regardless of the version. +     // FIXME: Why is this necessary? +     jpeg_decompress_struct dinfo; +-    sk_bzero(&dinfo, sizeof(dinfo)); ++    jpeg_create_decompress(&dinfo); +     dinfo.image_width = this->dimensions().width(); +     dinfo.image_height = this->dimensions().height(); +     dinfo.global_state = fReadyState; +@@ -549,6 +554,7 @@ bool SkJpegCodec::onDimensionsSupported(const SkISize& +  +         // Return a failure if we have tried all of the possible scales +         if (1 == num || dstWidth > dinfo.output_width || dstHeight > dinfo.output_height) { ++            jpeg_destroy_decompress(&dinfo); +             return false; +         } +  +@@ -556,6 +562,7 @@ bool SkJpegCodec::onDimensionsSupported(const SkISize& +         num -= 1; +         calc_output_dimensions(&dinfo, num, denom); +     } ++    jpeg_destroy_decompress(&dinfo); +  +     fDecoderMgr->dinfo()->scale_num = num; +     fDecoderMgr->dinfo()->scale_denom = denom; | 
