Don't delete gain map metadata if ignore_gain_map
In avif::ReadImage(), if ignore_gain_map is true, don't delete gain map
metadata. Let the caller do that.
diff --git a/apps/avifgainmaputil/combine_command.cc b/apps/avifgainmaputil/combine_command.cc
index 97925f9..420a193 100644
--- a/apps/avifgainmaputil/combine_command.cc
+++ b/apps/avifgainmaputil/combine_command.cc
@@ -135,9 +135,12 @@
<< gain_map_height << "\n";
// Because base_image is read with ignore_gain_map=true, there is no
- // preexisting gain map. Otherwise, overwriting the pointer would cause a
- // memory leak.
- assert(base_image->gainMap == nullptr);
+ // preexisting gain map but there may be preexisting gain map metadata.
+ if (base_image->gainMap) {
+ assert(base_image->gainMap->image == nullptr);
+ avifGainMapDestroy(base_image->gainMap);
+ base_image->gainMap = nullptr;
+ }
base_image->gainMap = avifGainMapCreate();
base_image->gainMap->image =
avifImageCreate(gain_map_width, gain_map_height, arg_gain_map_depth_,
diff --git a/apps/avifgainmaputil/imageio.cc b/apps/avifgainmaputil/imageio.cc
index 7aae803..25a1b49 100644
--- a/apps/avifgainmaputil/imageio.cc
+++ b/apps/avifgainmaputil/imageio.cc
@@ -214,8 +214,10 @@
if (!view) {
return AVIF_RESULT_OUT_OF_MEMORY;
}
+ // When ignore_gain_map is true, decoder->image won't have a gain map but
+ // may have gain map metadata. It is fine to copy gain map metadata.
result = avifImageCreateView(view.get(), decoder->image, ignore_profile,
- ignore_alpha, ignore_gain_map);
+ ignore_alpha, /*ignoreGainMap=*/false);
if (result != AVIF_RESULT_OK) {
return result;
}