ソースを参照

tinyexr: Sync with upstream 1.0.5

Rémi Verschelde 2 年 前
コミット
56d85149e5
2 ファイル変更13 行追加10 行削除
  1. 1 1
      thirdparty/README.md
  2. 12 9
      thirdparty/tinyexr/tinyexr.h

+ 1 - 1
thirdparty/README.md

@@ -688,7 +688,7 @@ comments and a patch is provided in the squish/ folder.
 ## tinyexr
 
 - Upstream: https://github.com/syoyo/tinyexr
-- Version: 1.0.4 (7c92b8cd86a378ba5cb7b6d39a336457728dfb82, 2023)
+- Version: 1.0.5 (3627ab3060592468d49547b4cdf5353e9e2b50dc, 2023)
 - License: BSD-3-Clause
 
 Files extracted from upstream source:

+ 12 - 9
thirdparty/tinyexr/tinyexr.h

@@ -7546,21 +7546,24 @@ static size_t SaveEXRNPartImageToMemory(const EXRImage* exr_images,
         return 0;
       }
 #endif
-#if !TINYEXR_USE_ZFP
       if (exr_headers[i]->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
+#if !TINYEXR_USE_ZFP
         SetErrorMessage("ZFP compression is not supported in this build",
                         err);
         return 0;
-      }
 #else
-      for (int c = 0; c < exr_header->num_channels; ++c) {
-        if (exr_headers[i]->requested_pixel_types[c] != TINYEXR_PIXELTYPE_FLOAT) {
-          SetErrorMessage("Pixel type must be FLOAT for ZFP compression",
-                          err);
-          return 0;
+        // All channels must be fp32.
+        // No fp16 support in ZFP atm(as of 2023 June)
+        // https://github.com/LLNL/fpzip/issues/2
+        for (int c = 0; c < exr_headers[i]->num_channels; ++c) {
+          if (exr_headers[i]->requested_pixel_types[c] != TINYEXR_PIXELTYPE_FLOAT) {
+            SetErrorMessage("Pixel type must be FLOAT for ZFP compression",
+                            err);
+            return 0;
+          }
         }
-      }
 #endif
+      }
     }
   }
 
@@ -8635,7 +8638,7 @@ int ParseEXRMultipartHeaderFromMemory(EXRHeader ***exr_headers,
     if (!ConvertHeader(exr_header, infos[i], &warn, &_err)) {
 
       // Free malloc-allocated memory here.
-      for (size_t k = 0; k < infos[i].attributes.size(); i++) {
+      for (size_t k = 0; k < infos[i].attributes.size(); k++) {
         if (infos[i].attributes[k].value) {
           free(infos[i].attributes[k].value);
         }