summaryrefslogtreecommitdiffstats
path: root/third_party/jpeg-xl/lib/jxl/quant_weights.h
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/jpeg-xl/lib/jxl/quant_weights.h')
-rw-r--r--third_party/jpeg-xl/lib/jxl/quant_weights.h29
1 files changed, 11 insertions, 18 deletions
diff --git a/third_party/jpeg-xl/lib/jxl/quant_weights.h b/third_party/jpeg-xl/lib/jxl/quant_weights.h
index 3004176aba..0fa23ffddb 100644
--- a/third_party/jpeg-xl/lib/jxl/quant_weights.h
+++ b/third_party/jpeg-xl/lib/jxl/quant_weights.h
@@ -15,6 +15,7 @@
#include <vector>
#include "lib/jxl/ac_strategy.h"
+#include "lib/jxl/base/common.h"
#include "lib/jxl/base/compiler_specific.h"
#include "lib/jxl/base/span.h"
#include "lib/jxl/base/status.h"
@@ -23,12 +24,6 @@
namespace jxl {
-template <typename T, size_t N>
-constexpr T ArraySum(T (&a)[N], size_t i = N - 1) {
- static_assert(N > 0, "Trying to compute the sum of an empty array");
- return i == 0 ? a[0] : a[i] + ArraySum(a, i - 1);
-}
-
static constexpr size_t kMaxQuantTableSize = AcStrategy::kMaxCoeffArea;
static constexpr size_t kNumPredefinedTables = 1;
static constexpr size_t kCeilLog2NumPredefinedTables = 0;
@@ -410,25 +405,23 @@ class DequantMatrices {
const std::vector<QuantEncoding>& encodings() const { return encodings_; }
- static constexpr size_t required_size_x[] = {1, 1, 1, 1, 2, 4, 1, 1, 2,
- 1, 1, 8, 4, 16, 8, 32, 16};
- static_assert(kNum == sizeof(required_size_x) / sizeof(*required_size_x),
+ static constexpr auto required_size_x =
+ to_array<int>({1, 1, 1, 1, 2, 4, 1, 1, 2, 1, 1, 8, 4, 16, 8, 32, 16});
+ static_assert(kNum == required_size_x.size(),
"Update this array when adding or removing quant tables.");
- static constexpr size_t required_size_y[] = {1, 1, 1, 1, 2, 4, 2, 4, 4,
- 1, 1, 8, 8, 16, 16, 32, 32};
- static_assert(kNum == sizeof(required_size_y) / sizeof(*required_size_y),
+ static constexpr auto required_size_y =
+ to_array<int>({1, 1, 1, 1, 2, 4, 2, 4, 4, 1, 1, 8, 8, 16, 16, 32, 32});
+ static_assert(kNum == required_size_y.size(),
"Update this array when adding or removing quant tables.");
+ // MUST be equal `sum(dot(required_size_x, required_size_y))`.
+ static constexpr size_t kSumRequiredXy = 2056;
+
Status EnsureComputed(uint32_t acs_mask);
private:
- static constexpr size_t required_size_[] = {
- 1, 1, 1, 1, 4, 16, 2, 4, 8, 1, 1, 64, 32, 256, 128, 1024, 512};
- static_assert(kNum == sizeof(required_size_) / sizeof(*required_size_),
- "Update this array when adding or removing quant tables.");
- static constexpr size_t kTotalTableSize =
- ArraySum(required_size_) * kDCTBlockSize * 3;
+ static constexpr size_t kTotalTableSize = kSumRequiredXy * kDCTBlockSize * 3;
uint32_t computed_mask_ = 0;
// kTotalTableSize entries followed by kTotalTableSize for inv_table