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; |
