From b7352898e08a650e4b390c1ad29d42811cd941fb Mon Sep 17 00:00:00 2001 From: Joseph Davies Date: Tue, 5 Mar 2024 22:11:31 -0800 Subject: [PATCH] Use unique_ptr for JPEG decompression buffer. Apply suggestions from code review. Co-authored-by: Adam Johnson --- core/Util/plJPEG.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/core/Util/plJPEG.cpp b/core/Util/plJPEG.cpp index 4bf9fea5..ca7f4703 100644 --- a/core/Util/plJPEG.cpp +++ b/core/Util/plJPEG.cpp @@ -17,7 +17,9 @@ #include "plJPEG.h" #include "Debug/plDebug.h" #include "PRP/Surface/plMipmap.h" + #include +#include extern "C" { #include @@ -281,16 +283,14 @@ plMipmap* plJPEG::DecompressJPEG(hsStream* S) RAII_JSAMPROW<1> jbuffer(row_stride); // Start with a reasonable size for the buffer - std::vector buffer(ji.dinfo.output_width * ji.dinfo.output_height * ji.dinfo.out_color_components); + auto buffer_size = ji.dinfo.output_width * ji.dinfo.output_height * ji.dinfo.out_color_components; + auto buffer = std::make_unique(buffer_size); size_t offs = 0; while (ji.dinfo.output_scanline < ji.dinfo.output_height) { - while (offs + out_stride > buffer.capacity()) { - buffer.reserve(buffer.capacity() + INPUT_BUF_SIZE); - } jpeg_read_scanlines(&ji.dinfo, jbuffer.data, 1); for (size_t x = 0; x < ji.dinfo.output_width; x++) { - memcpy(buffer.data() + offs + (x * 4), + memcpy(buffer.get() + offs + (x * 4), jbuffer.data[0] + (x * ji.dinfo.out_color_components), ji.dinfo.out_color_components); } @@ -298,10 +298,9 @@ plMipmap* plJPEG::DecompressJPEG(hsStream* S) } jpeg_finish_decompress(&ji.dinfo); - buffer.shrink_to_fit(); plMipmap* newMipmap = new plMipmap(ji.dinfo.output_width, ji.dinfo.output_height, 1, plMipmap::kUncompressed, plMipmap::kRGB8888); - newMipmap->setImageData(buffer.data(), buffer.size()); + newMipmap->setImageData(buffer.get(), buffer_size); return newMipmap; }