Commit 3091af2e for libheif
commit 3091af2e66c4ecdb53ca86eff13531ba83e1f3fa
Author: Joachim Bauch <bauch@struktur.de>
Date: Tue Nov 4 13:19:46 2025 +0100
Pass warnings as shared pointer.
diff --git a/libheif/image-items/grid.cc b/libheif/image-items/grid.cc
index 9ac66380..41a14cc9 100644
--- a/libheif/image-items/grid.cc
+++ b/libheif/image-items/grid.cc
@@ -302,7 +302,7 @@ Result<std::shared_ptr<HeifPixelImage>> ImageItem_Grid::decode_full_grid_image(c
int progress_counter = 0;
bool cancelled = false;
- std::vector<Error> warnings;
+ std::shared_ptr<std::vector<Error> > warnings(new std::vector<Error>());
for (uint32_t y = 0; y < grid.get_rows() && !cancelled; y++) {
uint32_t x0 = 0;
@@ -315,7 +315,7 @@ Result<std::shared_ptr<HeifPixelImage>> ImageItem_Grid::decode_full_grid_image(c
if (!tileImg) {
if (!options.strict_decoding && reference_idx != 0) {
// Skip missing tiles (unless it's the first one).
- warnings.push_back(Error{
+ warnings->push_back(Error{
heif_error_Invalid_input,
heif_suberror_Missing_grid_images,
});
@@ -331,7 +331,7 @@ Result<std::shared_ptr<HeifPixelImage>> ImageItem_Grid::decode_full_grid_image(c
if (auto error = tileImg->get_item_error()) {
if (!options.strict_decoding && reference_idx != 0) {
// Skip missing tiles (unless it's the first one).
- warnings.push_back(error);
+ warnings->push_back(error);
reference_idx++;
x0 += tile_width;
continue;
@@ -427,7 +427,7 @@ Result<std::shared_ptr<HeifPixelImage>> ImageItem_Grid::decode_full_grid_image(c
errs.push_back(std::async(std::launch::async,
&ImageItem_Grid::decode_and_paste_tile_image, this,
data.tileID, data.x_origin, data.y_origin, std::ref(img), options,
- std::ref(progress_counter), std::ref(warnings)));
+ std::ref(progress_counter), warnings));
}
// check for decoding errors in remaining tiles
@@ -452,7 +452,7 @@ Result<std::shared_ptr<HeifPixelImage>> ImageItem_Grid::decode_full_grid_image(c
}
if (img) {
- img->add_warnings(warnings);
+ img->add_warnings(*warnings.get());
}
return img;
@@ -473,7 +473,8 @@ static Error progress_and_return_ok(const heif_decoding_options& options, int& p
Error ImageItem_Grid::decode_and_paste_tile_image(heif_item_id tileID, uint32_t x0, uint32_t y0,
std::shared_ptr<HeifPixelImage>& inout_image,
const heif_decoding_options& options,
- int& progress_counter, std::vector<Error>& warnings) const
+ int& progress_counter,
+ std::shared_ptr<std::vector<Error> > warnings) const
{
std::shared_ptr<HeifPixelImage> tile_img;
#if ENABLE_PARALLEL_TILE_DECODING
@@ -486,7 +487,7 @@ Error ImageItem_Grid::decode_and_paste_tile_image(heif_item_id tileID, uint32_t
#if ENABLE_PARALLEL_TILE_DECODING
std::lock_guard<std::mutex> lock(warningsMutex);
#endif
- warnings.push_back(Error{
+ warnings->push_back(Error{
heif_error_Invalid_input,
heif_suberror_Missing_grid_images,
});
@@ -505,7 +506,7 @@ Error ImageItem_Grid::decode_and_paste_tile_image(heif_item_id tileID, uint32_t
#if ENABLE_PARALLEL_TILE_DECODING
std::lock_guard<std::mutex> lock(warningsMutex);
#endif
- warnings.push_back(decodeResult.error());
+ warnings->push_back(decodeResult.error());
return progress_and_return_ok(options, progress_counter);
}
diff --git a/libheif/image-items/grid.h b/libheif/image-items/grid.h
index 0829cff0..e6bcaa45 100644
--- a/libheif/image-items/grid.h
+++ b/libheif/image-items/grid.h
@@ -168,7 +168,7 @@ private:
Error decode_and_paste_tile_image(heif_item_id tileID, uint32_t x0, uint32_t y0,
std::shared_ptr<HeifPixelImage>& inout_image,
const heif_decoding_options& options, int& progress_counter,
- std::vector<Error>& warnings) const;
+ std::shared_ptr<std::vector<Error> > warnings) const;
};