jxl 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +93 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +90 -0
  5. data/Rakefile +31 -0
  6. data/docs/adr/0001-buffer-representation.md +12 -0
  7. data/docs/bench_history.md +11 -0
  8. data/docs/spec_map.md +16 -0
  9. data/exe/cjxl +21 -0
  10. data/exe/djxl +66 -0
  11. data/exe/jxlinfo +31 -0
  12. data/lib/jxl/basic_info.rb +16 -0
  13. data/lib/jxl/bit/field.rb +126 -0
  14. data/lib/jxl/bit/reader.rb +78 -0
  15. data/lib/jxl/bit/writer.rb +46 -0
  16. data/lib/jxl/codestream/reader.rb +68 -0
  17. data/lib/jxl/color/gamut.rb +80 -0
  18. data/lib/jxl/color/icc_profile.rb +243 -0
  19. data/lib/jxl/color/opsin.rb +28 -0
  20. data/lib/jxl/color/transfer.rb +108 -0
  21. data/lib/jxl/color/ycbcr.rb +63 -0
  22. data/lib/jxl/container/box.rb +7 -0
  23. data/lib/jxl/container/parser.rb +134 -0
  24. data/lib/jxl/container/signature.rb +19 -0
  25. data/lib/jxl/dct.rb +81 -0
  26. data/lib/jxl/decoder.rb +85 -0
  27. data/lib/jxl/encoder.rb +180 -0
  28. data/lib/jxl/entropy/ans_distribution.rb +212 -0
  29. data/lib/jxl/entropy/decoder.rb +226 -0
  30. data/lib/jxl/entropy/encoder.rb +69 -0
  31. data/lib/jxl/entropy/hybrid_uint.rb +55 -0
  32. data/lib/jxl/entropy/icc_stream.rb +293 -0
  33. data/lib/jxl/entropy/permutation.rb +64 -0
  34. data/lib/jxl/entropy/prefix_code.rb +177 -0
  35. data/lib/jxl/errors.rb +12 -0
  36. data/lib/jxl/features/noise.rb +140 -0
  37. data/lib/jxl/features/patches.rb +147 -0
  38. data/lib/jxl/features/splines.rb +206 -0
  39. data/lib/jxl/features/spot_colour.rb +29 -0
  40. data/lib/jxl/features/upsampling.rb +99 -0
  41. data/lib/jxl/features/upsampling_weights.bin +0 -0
  42. data/lib/jxl/filter/epf.rb +119 -0
  43. data/lib/jxl/filter/gaborish.rb +36 -0
  44. data/lib/jxl/frame/toc.rb +31 -0
  45. data/lib/jxl/headers/bit_depth.rb +32 -0
  46. data/lib/jxl/headers/colour_encoding.rb +81 -0
  47. data/lib/jxl/headers/custom_transform.rb +46 -0
  48. data/lib/jxl/headers/frame_header.rb +251 -0
  49. data/lib/jxl/headers/image_metadata.rb +128 -0
  50. data/lib/jxl/headers/size_header.rb +29 -0
  51. data/lib/jxl/image.rb +63 -0
  52. data/lib/jxl/io/npy.rb +82 -0
  53. data/lib/jxl/io/pam.rb +14 -0
  54. data/lib/jxl/io/pfm.rb +21 -0
  55. data/lib/jxl/io/pgx.rb +22 -0
  56. data/lib/jxl/io/png.rb +132 -0
  57. data/lib/jxl/io/ppm.rb +63 -0
  58. data/lib/jxl/modular/decoder.rb +371 -0
  59. data/lib/jxl/modular/group_header.rb +82 -0
  60. data/lib/jxl/modular/ma_tree.rb +95 -0
  61. data/lib/jxl/modular/predictor.rb +107 -0
  62. data/lib/jxl/modular/stream.rb +49 -0
  63. data/lib/jxl/modular/transform.rb +235 -0
  64. data/lib/jxl/modular/weighted.rb +85 -0
  65. data/lib/jxl/num.rb +37 -0
  66. data/lib/jxl/plane.rb +35 -0
  67. data/lib/jxl/render/blender.rb +61 -0
  68. data/lib/jxl/render/orientation.rb +42 -0
  69. data/lib/jxl/trace.rb +36 -0
  70. data/lib/jxl/vardct/ac_strategy.rb +65 -0
  71. data/lib/jxl/vardct/afv_basis.bin +0 -0
  72. data/lib/jxl/vardct/block_context_map.rb +63 -0
  73. data/lib/jxl/vardct/chroma_from_luma.rb +27 -0
  74. data/lib/jxl/vardct/coeff_order.rb +35 -0
  75. data/lib/jxl/vardct/decoder.rb +136 -0
  76. data/lib/jxl/vardct/default_dequant.bin.z +0 -0
  77. data/lib/jxl/vardct/dequant.rb +284 -0
  78. data/lib/jxl/vardct/hf_global.rb +30 -0
  79. data/lib/jxl/vardct/lf_global.rb +43 -0
  80. data/lib/jxl/vardct/lf_group.rb +227 -0
  81. data/lib/jxl/vardct/pass_group.rb +153 -0
  82. data/lib/jxl/vardct/quantizer.rb +27 -0
  83. data/lib/jxl/vardct/reconstructor.rb +294 -0
  84. data/lib/jxl/version.rb +5 -0
  85. data/lib/jxl.rb +216 -0
  86. data/tools/bench.rb +20 -0
  87. data/tools/compare_trace.rb +42 -0
  88. data/tools/conformance_report.rb +23 -0
  89. data/tools/fuzz.rb +51 -0
  90. data/tools/gen_afv_basis.rb +12 -0
  91. data/tools/gen_quant_tables.rb +11 -0
  92. data/tools/gen_upsampling_weights.rb +13 -0
  93. data/tools/libjxl_trace.patch +30 -0
  94. metadata +135 -0
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ source, target = ARGV
4
+ abort "usage: ruby tools/gen_upsampling_weights.rb image_metadata.cc TARGET" unless source && target
5
+
6
+ text = File.read(source)
7
+ values = [2, 4, 8].flat_map do |factor|
8
+ body = text[/kWeights#{factor}\[[0-9]+\] = \{(.*?)\};/m, 1] or abort "weights #{factor} not found"
9
+ body.scan(/[-+]?(?:\d+\.\d*|\.\d+)(?:[eE][-+]?\d+)?/).map(&:to_f)
10
+ end
11
+ abort "expected 280 weights, got #{values.length}" unless values.length == 280
12
+
13
+ File.binwrite(target, values.pack("e*"))
@@ -0,0 +1,30 @@
1
+ diff --git a/lib/jxl/dec_bit_reader.h b/lib/jxl/dec_bit_reader.h
2
+ index 25b2d16..1626333 100644
3
+ --- a/lib/jxl/dec_bit_reader.h
4
+ +++ b/lib/jxl/dec_bit_reader.h
5
+ @@ -10,6 +10,8 @@
6
+ // and switching to reading byte-aligned words.
7
+
8
+ #include <cstddef>
9
+ +#include <cstdio>
10
+ +#include <cstdlib>
11
+ #include <cstdint>
12
+ #include <cstring> // memcpy
13
+
14
+ @@ -148,6 +150,16 @@ class BitReader {
15
+ Refill();
16
+ const uint64_t bits = PeekBits(nbits);
17
+ Consume(nbits);
18
+ +#ifdef JXL_TRACE
19
+ + static FILE* trace = [] {
20
+ + const char* path = std::getenv("JXL_TRACE_FILE");
21
+ + return path == nullptr ? nullptr : std::fopen(path, "w");
22
+ + }();
23
+ + if (trace != nullptr) {
24
+ + std::fprintf(trace, "BR n=%zu val=%llu pos=%zu\n", nbits,
25
+ + static_cast<unsigned long long>(bits), TotalBitsConsumed());
26
+ + }
27
+ +#endif
28
+ return bits;
29
+ }
30
+
metadata ADDED
@@ -0,0 +1,135 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jxl
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Yudai Yudai
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies: []
12
+ description: A JPEG XL decoder and encoder implemented in Ruby without native extensions.
13
+ email:
14
+ - t.yudai92@gmail.com
15
+ executables:
16
+ - cjxl
17
+ - djxl
18
+ - jxlinfo
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - ".rubocop.yml"
23
+ - LICENSE.txt
24
+ - README.md
25
+ - Rakefile
26
+ - docs/adr/0001-buffer-representation.md
27
+ - docs/bench_history.md
28
+ - docs/spec_map.md
29
+ - exe/cjxl
30
+ - exe/djxl
31
+ - exe/jxlinfo
32
+ - lib/jxl.rb
33
+ - lib/jxl/basic_info.rb
34
+ - lib/jxl/bit/field.rb
35
+ - lib/jxl/bit/reader.rb
36
+ - lib/jxl/bit/writer.rb
37
+ - lib/jxl/codestream/reader.rb
38
+ - lib/jxl/color/gamut.rb
39
+ - lib/jxl/color/icc_profile.rb
40
+ - lib/jxl/color/opsin.rb
41
+ - lib/jxl/color/transfer.rb
42
+ - lib/jxl/color/ycbcr.rb
43
+ - lib/jxl/container/box.rb
44
+ - lib/jxl/container/parser.rb
45
+ - lib/jxl/container/signature.rb
46
+ - lib/jxl/dct.rb
47
+ - lib/jxl/decoder.rb
48
+ - lib/jxl/encoder.rb
49
+ - lib/jxl/entropy/ans_distribution.rb
50
+ - lib/jxl/entropy/decoder.rb
51
+ - lib/jxl/entropy/encoder.rb
52
+ - lib/jxl/entropy/hybrid_uint.rb
53
+ - lib/jxl/entropy/icc_stream.rb
54
+ - lib/jxl/entropy/permutation.rb
55
+ - lib/jxl/entropy/prefix_code.rb
56
+ - lib/jxl/errors.rb
57
+ - lib/jxl/features/noise.rb
58
+ - lib/jxl/features/patches.rb
59
+ - lib/jxl/features/splines.rb
60
+ - lib/jxl/features/spot_colour.rb
61
+ - lib/jxl/features/upsampling.rb
62
+ - lib/jxl/features/upsampling_weights.bin
63
+ - lib/jxl/filter/epf.rb
64
+ - lib/jxl/filter/gaborish.rb
65
+ - lib/jxl/frame/toc.rb
66
+ - lib/jxl/headers/bit_depth.rb
67
+ - lib/jxl/headers/colour_encoding.rb
68
+ - lib/jxl/headers/custom_transform.rb
69
+ - lib/jxl/headers/frame_header.rb
70
+ - lib/jxl/headers/image_metadata.rb
71
+ - lib/jxl/headers/size_header.rb
72
+ - lib/jxl/image.rb
73
+ - lib/jxl/io/npy.rb
74
+ - lib/jxl/io/pam.rb
75
+ - lib/jxl/io/pfm.rb
76
+ - lib/jxl/io/pgx.rb
77
+ - lib/jxl/io/png.rb
78
+ - lib/jxl/io/ppm.rb
79
+ - lib/jxl/modular/decoder.rb
80
+ - lib/jxl/modular/group_header.rb
81
+ - lib/jxl/modular/ma_tree.rb
82
+ - lib/jxl/modular/predictor.rb
83
+ - lib/jxl/modular/stream.rb
84
+ - lib/jxl/modular/transform.rb
85
+ - lib/jxl/modular/weighted.rb
86
+ - lib/jxl/num.rb
87
+ - lib/jxl/plane.rb
88
+ - lib/jxl/render/blender.rb
89
+ - lib/jxl/render/orientation.rb
90
+ - lib/jxl/trace.rb
91
+ - lib/jxl/vardct/ac_strategy.rb
92
+ - lib/jxl/vardct/afv_basis.bin
93
+ - lib/jxl/vardct/block_context_map.rb
94
+ - lib/jxl/vardct/chroma_from_luma.rb
95
+ - lib/jxl/vardct/coeff_order.rb
96
+ - lib/jxl/vardct/decoder.rb
97
+ - lib/jxl/vardct/default_dequant.bin.z
98
+ - lib/jxl/vardct/dequant.rb
99
+ - lib/jxl/vardct/hf_global.rb
100
+ - lib/jxl/vardct/lf_global.rb
101
+ - lib/jxl/vardct/lf_group.rb
102
+ - lib/jxl/vardct/pass_group.rb
103
+ - lib/jxl/vardct/quantizer.rb
104
+ - lib/jxl/vardct/reconstructor.rb
105
+ - lib/jxl/version.rb
106
+ - tools/bench.rb
107
+ - tools/compare_trace.rb
108
+ - tools/conformance_report.rb
109
+ - tools/fuzz.rb
110
+ - tools/gen_afv_basis.rb
111
+ - tools/gen_quant_tables.rb
112
+ - tools/gen_upsampling_weights.rb
113
+ - tools/libjxl_trace.patch
114
+ licenses:
115
+ - MIT
116
+ metadata:
117
+ rubygems_mfa_required: 'true'
118
+ rdoc_options: []
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: 3.2.0
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ requirements: []
132
+ rubygems_version: 4.0.19
133
+ specification_version: 4
134
+ summary: Pure Ruby JPEG XL codec
135
+ test_files: []