summaryrefslogtreecommitdiffstats
path: root/third_party/jpeg-xl/lib/jxl/loop_filter.h
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/jpeg-xl/lib/jxl/loop_filter.h')
-rw-r--r--third_party/jpeg-xl/lib/jxl/loop_filter.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/third_party/jpeg-xl/lib/jxl/loop_filter.h b/third_party/jpeg-xl/lib/jxl/loop_filter.h
new file mode 100644
index 0000000000..e4b418ba2b
--- /dev/null
+++ b/third_party/jpeg-xl/lib/jxl/loop_filter.h
@@ -0,0 +1,76 @@
+// Copyright (c) the JPEG XL Project Authors. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+#ifndef LIB_JXL_LOOP_FILTER_H_
+#define LIB_JXL_LOOP_FILTER_H_
+
+// Parameters for loop filter(s), stored in each frame.
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "lib/jxl/base/compiler_specific.h"
+#include "lib/jxl/base/status.h"
+#include "lib/jxl/dec_bit_reader.h"
+#include "lib/jxl/field_encodings.h"
+
+namespace jxl {
+
+struct LoopFilter : public Fields {
+ LoopFilter();
+ JXL_FIELDS_NAME(LoopFilter)
+
+ Status VisitFields(Visitor* JXL_RESTRICT visitor) override;
+
+ size_t Padding() const {
+ static const size_t padding_per_epf_iter[4] = {0, 2, 3, 6};
+ return padding_per_epf_iter[epf_iters] + (gab ? 1 : 0);
+ }
+
+ mutable bool all_default;
+
+ // --- Gaborish convolution
+ bool gab;
+
+ bool gab_custom;
+ float gab_x_weight1;
+ float gab_x_weight2;
+ float gab_y_weight1;
+ float gab_y_weight2;
+ float gab_b_weight1;
+ float gab_b_weight2;
+
+ // --- Edge-preserving filter
+
+ // Number of EPF stages to apply. 0 means EPF disabled. 1 applies only the
+ // first stage, 2 applies both stages and 3 applies the first stage twice and
+ // the second stage once.
+ uint32_t epf_iters;
+
+ bool epf_sharp_custom;
+ enum { kEpfSharpEntries = 8 };
+ float epf_sharp_lut[kEpfSharpEntries];
+
+ bool epf_weight_custom; // Custom weight params
+ float epf_channel_scale[3]; // Relative weight of each channel
+ float epf_pass1_zeroflush; // Minimum weight for first pass
+ float epf_pass2_zeroflush; // Minimum weight for second pass
+
+ bool epf_sigma_custom; // Custom sigma parameters
+ float epf_quant_mul; // Sigma is ~ this * quant
+ float epf_pass0_sigma_scale; // Multiplier for sigma in pass 0
+ float epf_pass2_sigma_scale; // Multiplier for sigma in the second pass
+ float epf_border_sad_mul; // (inverse) multiplier for sigma on borders
+
+ float epf_sigma_for_modular;
+
+ uint64_t extensions;
+
+ bool nonserialized_is_modular = false;
+};
+
+} // namespace jxl
+
+#endif // LIB_JXL_LOOP_FILTER_H_