1mod linearized53;
4pub use linearized53::{
5 linearized_dwt53_row, Dwt53Band, Dwt53LinearRow, Dwt53LinearTap, DWT53_MAX_HIGH_LINEAR_TAPS,
6 DWT53_MAX_LINEAR_TAPS,
7};
8
9#[must_use]
15pub const fn max_decomposition_levels(width: u32, height: u32) -> u8 {
16 j2k_types::encode_geometry::maximum_decomposition_levels(width, height)
17}
18
19pub const DWT97_ALPHA_F32: f32 = -1.586_134_3;
21pub const DWT97_BETA_F32: f32 = -0.052_980_117;
23pub const DWT97_GAMMA_F32: f32 = 0.882_911_1;
25pub const DWT97_DELTA_F32: f32 = 0.443_506_87;
27pub const DWT97_KAPPA_F32: f32 = 1.230_174_1;
29pub const DWT97_INV_KAPPA_F32: f32 = 1.0 / DWT97_KAPPA_F32;
31pub const IDWT97_OPENJPEG_TWO_INV_KAPPA_F32: f32 = 1.625_732_4;
36
37pub const IDWT97_NEG_ALPHA_F32: f32 = -DWT97_ALPHA_F32;
39pub const IDWT97_NEG_BETA_F32: f32 = -DWT97_BETA_F32;
41pub const IDWT97_NEG_GAMMA_F32: f32 = -DWT97_GAMMA_F32;
43pub const IDWT97_NEG_DELTA_F32: f32 = -DWT97_DELTA_F32;
45
46pub const DWT97_ALPHA_F64: f64 = -1.586_134_342_059_924;
48pub const DWT97_BETA_F64: f64 = -0.052_980_118_572_961;
50pub const DWT97_GAMMA_F64: f64 = 0.882_911_075_530_934;
52pub const DWT97_DELTA_F64: f64 = 0.443_506_852_043_971;
54pub const DWT97_KAPPA_F64: f64 = 1.230_174_104_914_001;
56pub const DWT97_INV_KAPPA_F64: f64 = 1.0 / DWT97_KAPPA_F64;
58
59#[cfg(test)]
60mod tests {
61 use super::*;
62
63 const MAX_LEVELS_FOR_U32_GEOMETRY: u8 = max_decomposition_levels(u32::MAX, u32::MAX);
64
65 #[test]
66 fn maximum_decomposition_level_compatibility_export_is_const() {
67 assert_eq!(MAX_LEVELS_FOR_U32_GEOMETRY, 31);
68 }
69
70 #[test]
71 fn f32_constants_match_existing_backend_rounding() {
72 assert_eq!(DWT97_ALPHA_F32.to_bits(), (-1.586_134_3f32).to_bits());
73 assert_eq!(DWT97_BETA_F32.to_bits(), (-0.052_980_117f32).to_bits());
74 assert_eq!(DWT97_GAMMA_F32.to_bits(), 0.882_911_1f32.to_bits());
75 assert_eq!(DWT97_DELTA_F32.to_bits(), 0.443_506_87f32.to_bits());
76 assert_eq!(DWT97_KAPPA_F32.to_bits(), 1.230_174_1f32.to_bits());
77 assert_eq!(
78 DWT97_INV_KAPPA_F32.to_bits(),
79 (1.0f32 / 1.230_174_1f32).to_bits()
80 );
81 }
82
83 #[test]
84 fn inverse_constants_are_exact_negations_of_forward_steps() {
85 assert_eq!(IDWT97_NEG_ALPHA_F32.to_bits(), (-DWT97_ALPHA_F32).to_bits());
86 assert_eq!(IDWT97_NEG_BETA_F32.to_bits(), (-DWT97_BETA_F32).to_bits());
87 assert_eq!(IDWT97_NEG_GAMMA_F32.to_bits(), (-DWT97_GAMMA_F32).to_bits());
88 assert_eq!(IDWT97_NEG_DELTA_F32.to_bits(), (-DWT97_DELTA_F32).to_bits());
89 }
90}