summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-01-04 14:26:04 +0100
committerRémi Verschelde <rverschelde@gmail.com>2024-01-04 14:26:04 +0100
commitbfbe14545740d54b4f55a86a80bc6a5ac91e1891 (patch)
tree22d0f60d155913082201fd4ae30daac692a6eede
parent0fa767beff83d4570f7dcbf683d983eb76b449ac (diff)
parent62cbd6805c7dfc882d0905d6335fc5087e2ba189 (diff)
downloadredot-engine-bfbe14545740d54b4f55a86a80bc6a5ac91e1891.tar.gz
Merge pull request #84546 from Rubonnek/fix-jpg-save-bugs
Do not mutate source Image in `Image::save_jpg` and use encoder return value
-rw-r--r--modules/jpg/image_loader_jpegd.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/modules/jpg/image_loader_jpegd.cpp b/modules/jpg/image_loader_jpegd.cpp
index e7fa909706..ada0cd01fa 100644
--- a/modules/jpg/image_loader_jpegd.cpp
+++ b/modules/jpg/image_loader_jpegd.cpp
@@ -162,6 +162,7 @@ static Error _jpgd_save_to_output_stream(jpge::output_stream *p_output_stream, c
ERR_FAIL_COND_V_MSG(error != OK, error, "Couldn't decompress image.");
}
if (image->get_format() != Image::FORMAT_RGB8) {
+ image = p_img->duplicate();
image->convert(Image::FORMAT_RGB8);
}
@@ -173,12 +174,16 @@ static Error _jpgd_save_to_output_stream(jpge::output_stream *p_output_stream, c
const uint8_t *src_data = image->get_data().ptr();
for (int i = 0; i < image->get_height(); i++) {
- enc.process_scanline(&src_data[i * image->get_width() * 3]);
+ if (!enc.process_scanline(&src_data[i * image->get_width() * 3])) {
+ return FAILED;
+ }
}
- enc.process_scanline(nullptr);
-
- return OK;
+ if (enc.process_scanline(nullptr)) {
+ return OK;
+ } else {
+ return FAILED;
+ }
}
static Vector<uint8_t> _jpgd_buffer_save_func(const Ref<Image> &p_img, float p_quality) {