From 9a4ade5f965e43896894dbac64a8e2b358313305 Mon Sep 17 00:00:00 2001 From: LongYinan Date: Tue, 20 Feb 2024 23:18:26 +0800 Subject: [PATCH] fix: memory leak in Canvas encode (#786) --- skia-c/skia_c.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/skia-c/skia_c.cpp b/skia-c/skia_c.cpp index e31eb57b..926baf80 100644 --- a/skia-c/skia_c.cpp +++ b/skia-c/skia_c.cpp @@ -230,20 +230,21 @@ extern "C" void skiac_surface_encode_data(skiac_surface *c_surface, skiac_sk_data *data, int format, int quality) { - auto image = SURFACE_CAST->makeImageSnapshot(); + auto image = SURFACE_CAST->makeImageSnapshot().release(); sk_sp encoded_data; if (format == int(SkEncodedImageFormat::kJPEG)) { SkJpegEncoder::Options options; options.fQuality = quality; - encoded_data = SkJpegEncoder::Encode(nullptr, image.release(), options); + encoded_data = SkJpegEncoder::Encode(nullptr, image, options); } else if (format == int(SkEncodedImageFormat::kPNG)) { - encoded_data = SkPngEncoder::Encode(nullptr, image.release(), SkPngEncoder::Options()); + encoded_data = SkPngEncoder::Encode(nullptr, image, SkPngEncoder::Options()); } else if (format == int(SkEncodedImageFormat::kWEBP)){ SkWebpEncoder::Options options; options.fCompression = quality == 100 ? SkWebpEncoder::Compression::kLossless : SkWebpEncoder::Compression::kLossy; options.fQuality = quality == 100 ? 75 : quality; - encoded_data = SkWebpEncoder::Encode(nullptr, image.release(), options); + encoded_data = SkWebpEncoder::Encode(nullptr, image, options); } + image->unref(); if (encoded_data) { data->ptr = const_cast(encoded_data->bytes());