@gmod/cram 3.0.7 → 4.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.
- package/dist/craiIndex.js +70 -87
- package/dist/craiIndex.js.map +1 -1
- package/dist/cram-bundle.js +1 -1
- package/dist/cramFile/codecs/_base.d.ts +1 -1
- package/dist/cramFile/codecs/beta.d.ts +2 -2
- package/dist/cramFile/codecs/beta.js +1 -1
- package/dist/cramFile/codecs/beta.js.map +1 -1
- package/dist/cramFile/codecs/byteArrayLength.d.ts +2 -2
- package/dist/cramFile/codecs/byteArrayStop.d.ts +4 -4
- package/dist/cramFile/codecs/byteArrayStop.js +1 -1
- package/dist/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/dist/cramFile/codecs/external.d.ts +1 -1
- package/dist/cramFile/codecs/external.js +1 -1
- package/dist/cramFile/codecs/external.js.map +1 -1
- package/dist/cramFile/codecs/gamma.d.ts +1 -1
- package/dist/cramFile/codecs/gamma.js +1 -1
- package/dist/cramFile/codecs/gamma.js.map +1 -1
- package/dist/cramFile/codecs/getBits.d.ts +1 -1
- package/dist/cramFile/codecs/getBits.js.map +1 -1
- package/dist/cramFile/codecs/huffman.d.ts +1 -1
- package/dist/cramFile/codecs/huffman.js +1 -1
- package/dist/cramFile/codecs/huffman.js.map +1 -1
- package/dist/cramFile/codecs/index.d.ts +1 -1
- package/dist/cramFile/codecs/index.js +5 -5
- package/dist/cramFile/codecs/index.js.map +1 -1
- package/dist/cramFile/codecs/subexp.d.ts +2 -2
- package/dist/cramFile/codecs/subexp.js +1 -1
- package/dist/cramFile/codecs/subexp.js.map +1 -1
- package/dist/cramFile/container/compressionScheme.d.ts +2 -2
- package/dist/cramFile/container/compressionScheme.js +1 -1
- package/dist/cramFile/container/compressionScheme.js.map +1 -1
- package/dist/cramFile/container/index.d.ts +1 -2
- package/dist/cramFile/container/index.js +62 -79
- package/dist/cramFile/container/index.js.map +1 -1
- package/dist/cramFile/file.d.ts +9 -13
- package/dist/cramFile/file.js +218 -247
- package/dist/cramFile/file.js.map +1 -1
- package/dist/cramFile/record.js +2 -2
- package/dist/cramFile/record.js.map +1 -1
- package/dist/cramFile/sectionParsers.d.ts +16 -16
- package/dist/cramFile/sectionParsers.js +12 -9
- package/dist/cramFile/sectionParsers.js.map +1 -1
- package/dist/cramFile/slice/decodeRecord.d.ts +3 -3
- package/dist/cramFile/slice/decodeRecord.js +11 -11
- package/dist/cramFile/slice/decodeRecord.js.map +1 -1
- package/dist/cramFile/slice/index.d.ts +2 -2
- package/dist/cramFile/slice/index.js +241 -262
- package/dist/cramFile/slice/index.js.map +1 -1
- package/dist/cramFile/util.d.ts +4 -2
- package/dist/cramFile/util.js +29 -6
- package/dist/cramFile/util.js.map +1 -1
- package/dist/htscodecs/arith_gen.d.ts +9 -17
- package/dist/htscodecs/arith_gen.js +32 -272
- package/dist/htscodecs/arith_gen.js.map +1 -1
- package/dist/htscodecs/fqzcomp.d.ts +1 -2
- package/dist/htscodecs/fqzcomp.js +2 -421
- package/dist/htscodecs/fqzcomp.js.map +1 -1
- package/dist/htscodecs/index.d.ts +5 -5
- package/dist/htscodecs/index.js +10 -10
- package/dist/htscodecs/index.js.map +1 -1
- package/dist/htscodecs/iostream.d.ts +2 -1
- package/dist/htscodecs/iostream.js +3 -2
- package/dist/htscodecs/iostream.js.map +1 -1
- package/dist/htscodecs/rans.d.ts +1 -2
- package/dist/htscodecs/rans.js +3 -270
- package/dist/htscodecs/rans.js.map +1 -1
- package/dist/htscodecs/rans4x16.d.ts +0 -1
- package/dist/htscodecs/rans4x16.js +6 -497
- package/dist/htscodecs/rans4x16.js.map +1 -1
- package/dist/htscodecs/tok3.js +17 -1
- package/dist/htscodecs/tok3.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/indexedCramFile.d.ts +4 -4
- package/dist/indexedCramFile.js +97 -108
- package/dist/indexedCramFile.js.map +1 -1
- package/dist/io/index.d.ts +2 -2
- package/dist/io/index.js +6 -6
- package/dist/io/index.js.map +1 -1
- package/dist/rans/constants.d.ts +1 -1
- package/dist/rans/constants.js +1 -1
- package/dist/rans/constants.js.map +1 -1
- package/dist/rans/d04.js.map +1 -1
- package/dist/rans/decoding.js.map +1 -1
- package/dist/rans/frequencies.js.map +1 -1
- package/dist/rans/index.js +5 -5
- package/dist/rans/index.js.map +1 -1
- package/dist/unzip.d.ts +1 -1
- package/dist/unzip.js +5 -3
- package/dist/unzip.js.map +1 -1
- package/esm/craiIndex.js +10 -12
- package/esm/craiIndex.js.map +1 -1
- package/esm/cramFile/codecs/_base.d.ts +1 -1
- package/esm/cramFile/codecs/beta.d.ts +2 -2
- package/esm/cramFile/codecs/beta.js +1 -1
- package/esm/cramFile/codecs/beta.js.map +1 -1
- package/esm/cramFile/codecs/byteArrayLength.d.ts +2 -2
- package/esm/cramFile/codecs/byteArrayStop.d.ts +4 -4
- package/esm/cramFile/codecs/byteArrayStop.js +1 -1
- package/esm/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/esm/cramFile/codecs/external.d.ts +1 -1
- package/esm/cramFile/codecs/external.js +1 -1
- package/esm/cramFile/codecs/external.js.map +1 -1
- package/esm/cramFile/codecs/gamma.d.ts +1 -1
- package/esm/cramFile/codecs/gamma.js +1 -1
- package/esm/cramFile/codecs/gamma.js.map +1 -1
- package/esm/cramFile/codecs/getBits.d.ts +1 -1
- package/esm/cramFile/codecs/getBits.js.map +1 -1
- package/esm/cramFile/codecs/huffman.d.ts +1 -1
- package/esm/cramFile/codecs/huffman.js +1 -1
- package/esm/cramFile/codecs/huffman.js.map +1 -1
- package/esm/cramFile/codecs/index.d.ts +1 -1
- package/esm/cramFile/codecs/index.js +5 -5
- package/esm/cramFile/codecs/index.js.map +1 -1
- package/esm/cramFile/codecs/subexp.d.ts +2 -2
- package/esm/cramFile/codecs/subexp.js +1 -1
- package/esm/cramFile/codecs/subexp.js.map +1 -1
- package/esm/cramFile/container/compressionScheme.d.ts +2 -2
- package/esm/cramFile/container/compressionScheme.js +1 -1
- package/esm/cramFile/container/compressionScheme.js.map +1 -1
- package/esm/cramFile/container/index.d.ts +1 -2
- package/esm/cramFile/container/index.js +4 -7
- package/esm/cramFile/container/index.js.map +1 -1
- package/esm/cramFile/file.d.ts +9 -13
- package/esm/cramFile/file.js +47 -52
- package/esm/cramFile/file.js.map +1 -1
- package/esm/cramFile/record.js +2 -2
- package/esm/cramFile/record.js.map +1 -1
- package/esm/cramFile/sectionParsers.d.ts +16 -16
- package/esm/cramFile/sectionParsers.js +7 -7
- package/esm/cramFile/sectionParsers.js.map +1 -1
- package/esm/cramFile/slice/decodeRecord.d.ts +3 -3
- package/esm/cramFile/slice/decodeRecord.js +11 -11
- package/esm/cramFile/slice/decodeRecord.js.map +1 -1
- package/esm/cramFile/slice/index.d.ts +2 -2
- package/esm/cramFile/slice/index.js +7 -6
- package/esm/cramFile/slice/index.js.map +1 -1
- package/esm/cramFile/util.d.ts +4 -2
- package/esm/cramFile/util.js +19 -2
- package/esm/cramFile/util.js.map +1 -1
- package/esm/htscodecs/arith_gen.d.ts +9 -17
- package/esm/htscodecs/arith_gen.js +32 -272
- package/esm/htscodecs/arith_gen.js.map +1 -1
- package/esm/htscodecs/fqzcomp.d.ts +1 -2
- package/esm/htscodecs/fqzcomp.js +2 -421
- package/esm/htscodecs/fqzcomp.js.map +1 -1
- package/esm/htscodecs/index.d.ts +5 -5
- package/esm/htscodecs/index.js +10 -10
- package/esm/htscodecs/index.js.map +1 -1
- package/esm/htscodecs/iostream.d.ts +2 -1
- package/esm/htscodecs/iostream.js +3 -2
- package/esm/htscodecs/iostream.js.map +1 -1
- package/esm/htscodecs/rans.d.ts +1 -2
- package/esm/htscodecs/rans.js +3 -270
- package/esm/htscodecs/rans.js.map +1 -1
- package/esm/htscodecs/rans4x16.d.ts +0 -1
- package/esm/htscodecs/rans4x16.js +6 -497
- package/esm/htscodecs/rans4x16.js.map +1 -1
- package/esm/htscodecs/tok3.js +17 -1
- package/esm/htscodecs/tok3.js.map +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.js +1 -1
- package/esm/index.js.map +1 -1
- package/esm/indexedCramFile.d.ts +4 -4
- package/esm/indexedCramFile.js +10 -10
- package/esm/indexedCramFile.js.map +1 -1
- package/esm/io/index.d.ts +2 -2
- package/esm/io/index.js +1 -1
- package/esm/io/index.js.map +1 -1
- package/esm/rans/constants.d.ts +1 -1
- package/esm/rans/constants.js +1 -1
- package/esm/rans/constants.js.map +1 -1
- package/esm/rans/d04.js.map +1 -1
- package/esm/rans/decoding.js.map +1 -1
- package/esm/rans/frequencies.js.map +1 -1
- package/esm/rans/index.js +5 -5
- package/esm/rans/index.js.map +1 -1
- package/esm/unzip.d.ts +1 -1
- package/esm/unzip.js +4 -1
- package/esm/unzip.js.map +1 -1
- package/package.json +7 -9
- package/src/craiIndex.ts +17 -16
- package/src/cramFile/codecs/_base.ts +1 -1
- package/src/cramFile/codecs/beta.ts +3 -3
- package/src/cramFile/codecs/byteArrayLength.ts +1 -1
- package/src/cramFile/codecs/byteArrayStop.ts +3 -4
- package/src/cramFile/codecs/external.ts +3 -3
- package/src/cramFile/codecs/gamma.ts +2 -2
- package/src/cramFile/codecs/getBits.ts +1 -1
- package/src/cramFile/codecs/huffman.ts +2 -3
- package/src/cramFile/codecs/index.ts +7 -8
- package/src/cramFile/codecs/subexp.ts +3 -3
- package/src/cramFile/container/compressionScheme.ts +3 -3
- package/src/cramFile/container/index.ts +7 -10
- package/src/cramFile/file.ts +71 -77
- package/src/cramFile/record.ts +3 -3
- package/src/cramFile/sectionParsers.ts +27 -22
- package/src/cramFile/slice/decodeRecord.ts +17 -17
- package/src/cramFile/slice/index.ts +8 -9
- package/src/cramFile/util.ts +24 -5
- package/src/htscodecs/arith_gen.js +33 -296
- package/src/htscodecs/fqzcomp.js +2 -476
- package/src/htscodecs/index.js +9 -11
- package/src/htscodecs/iostream.js +3 -2
- package/src/htscodecs/rans.js +3 -315
- package/src/htscodecs/rans4x16.js +6 -557
- package/src/htscodecs/tok3.js +18 -1
- package/src/index.ts +1 -1
- package/src/indexedCramFile.ts +6 -5
- package/src/io/index.ts +5 -4
- package/src/rans/constants.ts +1 -1
- package/src/rans/d04.ts +0 -1
- package/src/rans/decoding.ts +0 -1
- package/src/rans/frequencies.ts +0 -1
- package/src/rans/index.ts +5 -7
- package/src/unzip.ts +5 -1
- package/dist/cramFile/filehandle.d.ts +0 -1
- package/dist/cramFile/filehandle.js +0 -3
- package/dist/cramFile/filehandle.js.map +0 -1
- package/dist/htscodecs/main_arith_gen.d.ts +0 -1
- package/dist/htscodecs/main_arith_gen.js +0 -86
- package/dist/htscodecs/main_arith_gen.js.map +0 -1
- package/dist/htscodecs/main_fqzcomp.d.ts +0 -1
- package/dist/htscodecs/main_fqzcomp.js +0 -112
- package/dist/htscodecs/main_fqzcomp.js.map +0 -1
- package/dist/htscodecs/main_rans.d.ts +0 -1
- package/dist/htscodecs/main_rans.js +0 -83
- package/dist/htscodecs/main_rans.js.map +0 -1
- package/dist/htscodecs/main_rans4x16.d.ts +0 -1
- package/dist/htscodecs/main_rans4x16.js +0 -82
- package/dist/htscodecs/main_rans4x16.js.map +0 -1
- package/dist/htscodecs/main_tok3.d.ts +0 -1
- package/dist/htscodecs/main_tok3.js +0 -84
- package/dist/htscodecs/main_tok3.js.map +0 -1
- package/dist/unzip-pako.d.ts +0 -2
- package/dist/unzip-pako.js +0 -9
- package/dist/unzip-pako.js.map +0 -1
- package/esm/cramFile/filehandle.d.ts +0 -1
- package/esm/cramFile/filehandle.js +0 -2
- package/esm/cramFile/filehandle.js.map +0 -1
- package/esm/htscodecs/main_arith_gen.d.ts +0 -1
- package/esm/htscodecs/main_arith_gen.js +0 -86
- package/esm/htscodecs/main_arith_gen.js.map +0 -1
- package/esm/htscodecs/main_fqzcomp.d.ts +0 -1
- package/esm/htscodecs/main_fqzcomp.js +0 -112
- package/esm/htscodecs/main_fqzcomp.js.map +0 -1
- package/esm/htscodecs/main_rans.d.ts +0 -1
- package/esm/htscodecs/main_rans.js +0 -83
- package/esm/htscodecs/main_rans.js.map +0 -1
- package/esm/htscodecs/main_rans4x16.d.ts +0 -1
- package/esm/htscodecs/main_rans4x16.js +0 -82
- package/esm/htscodecs/main_rans4x16.js.map +0 -1
- package/esm/htscodecs/main_tok3.d.ts +0 -1
- package/esm/htscodecs/main_tok3.js +0 -84
- package/esm/htscodecs/main_tok3.js.map +0 -1
- package/esm/unzip-pako.d.ts +0 -2
- package/esm/unzip-pako.js +0 -6
- package/esm/unzip-pako.js.map +0 -1
- package/src/cramFile/filehandle.ts +0 -1
- package/src/htscodecs/Makefile +0 -142
- package/src/htscodecs/README.md +0 -64
- package/src/htscodecs/main_arith_gen.js +0 -96
- package/src/htscodecs/main_fqzcomp.js +0 -113
- package/src/htscodecs/main_rans.js +0 -88
- package/src/htscodecs/main_rans4x16.js +0 -87
- package/src/htscodecs/main_tok3.js +0 -86
- package/src/unzip-pako.ts +0 -6
package/src/htscodecs/rans.js
CHANGED
|
@@ -71,41 +71,6 @@ function RansRenorm(src, R) {
|
|
|
71
71
|
|
|
72
72
|
return R
|
|
73
73
|
}
|
|
74
|
-
|
|
75
|
-
// RanEnc* is for encoder
|
|
76
|
-
function RansEncInit() {
|
|
77
|
-
return 1 << 23
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function RansEncFlush(R, dst) {
|
|
81
|
-
dst.WriteByteNeg((R >> 24) & 0xff)
|
|
82
|
-
dst.WriteByteNeg((R >> 16) & 0xff)
|
|
83
|
-
dst.WriteByteNeg((R >> 8) & 0xff)
|
|
84
|
-
dst.WriteByteNeg((R >> 0) & 0xff)
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function RansEncRenorm(R, dst, freq, scale_bits) {
|
|
88
|
-
var R_max = (((1 << 23) >> scale_bits) << 8) * freq
|
|
89
|
-
|
|
90
|
-
while (R >= R_max) {
|
|
91
|
-
dst.WriteByteNeg(R & 0xff)
|
|
92
|
-
R >>= 8
|
|
93
|
-
}
|
|
94
|
-
return R
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// Puts a symbol with frequency freq, cumulative freq start
|
|
98
|
-
// and total freq 1<<scale_bits.
|
|
99
|
-
//
|
|
100
|
-
// Note with static probabilities, /freq and %freq could be
|
|
101
|
-
// precomputed via multiplies and shifts.
|
|
102
|
-
function RansEncPut(R, dst, start, freq, scale_bits) {
|
|
103
|
-
var scale = 1 << scale_bits
|
|
104
|
-
R = RansEncRenorm(R, dst, freq, scale_bits)
|
|
105
|
-
R = (Math.floor(R / freq) << scale_bits) + (R % freq) + start
|
|
106
|
-
return R
|
|
107
|
-
}
|
|
108
|
-
|
|
109
74
|
//----------------------------------------------------------------------
|
|
110
75
|
// Main rANS entry function: decodes a compressed src and
|
|
111
76
|
// returns the uncompressed buffer.
|
|
@@ -122,18 +87,6 @@ function decode(src) {
|
|
|
122
87
|
}
|
|
123
88
|
}
|
|
124
89
|
|
|
125
|
-
function encode(src, order) {
|
|
126
|
-
//var stream = new IOStream(src);
|
|
127
|
-
//var n_in = stream.ReadUint32();
|
|
128
|
-
//var n_out = stream.ReadUint32();
|
|
129
|
-
|
|
130
|
-
if (order == 0) {
|
|
131
|
-
return RansEncode0(src)
|
|
132
|
-
} else {
|
|
133
|
-
return RansEncode1(src)
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
90
|
//----------------------------------------------------------------------
|
|
138
91
|
// Order-0 decoder
|
|
139
92
|
|
|
@@ -180,7 +133,7 @@ function RansDecode0(src, nbytes) {
|
|
|
180
133
|
for (var i = 0; i < 4; i++) R[i] = src.ReadUint32()
|
|
181
134
|
|
|
182
135
|
// Main decode loop
|
|
183
|
-
var output = new
|
|
136
|
+
var output = new Uint8Array(nbytes)
|
|
184
137
|
for (var i = 0; i < nbytes; i++) {
|
|
185
138
|
var i4 = i % 4
|
|
186
139
|
var f = RansGetCumulativeFreq(R[i4])
|
|
@@ -194,129 +147,6 @@ function RansDecode0(src, nbytes) {
|
|
|
194
147
|
return output
|
|
195
148
|
}
|
|
196
149
|
|
|
197
|
-
//----------------------------------------------------------------------
|
|
198
|
-
// Order-0 encoder
|
|
199
|
-
|
|
200
|
-
function BuildFrequencies0(src, F) {
|
|
201
|
-
for (var i = 0; i < 256; i++) F[i] = 0
|
|
202
|
-
|
|
203
|
-
for (var i = 0; i < src.length; i++) F[src[i]]++
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
function NormaliseFrequencies0(F) {
|
|
207
|
-
// Compute total
|
|
208
|
-
var tot = 0
|
|
209
|
-
for (var i = 0; i < 256; i++) tot += F[i]
|
|
210
|
-
|
|
211
|
-
// Scale total of frequencies to max
|
|
212
|
-
const max = 1 << 12
|
|
213
|
-
var scale = max / tot
|
|
214
|
-
do {
|
|
215
|
-
var max_val = 0
|
|
216
|
-
var max_idx = 0
|
|
217
|
-
var renorm = 0
|
|
218
|
-
tot = 0
|
|
219
|
-
for (var i = 0; i < 256; i++) {
|
|
220
|
-
if (F[i] == 0) continue
|
|
221
|
-
|
|
222
|
-
if (max_val < F[i]) {
|
|
223
|
-
max_val = F[i]
|
|
224
|
-
max_idx = i
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
F[i] = Math.floor(F[i] * scale)
|
|
228
|
-
if (F[i] == 0) F[i] = 1
|
|
229
|
-
|
|
230
|
-
tot += F[i]
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
// Adjust new tot to ensure it matches.
|
|
234
|
-
if (tot < max) {
|
|
235
|
-
// Too low, boost the most common symbol
|
|
236
|
-
F[max_idx] += max - tot
|
|
237
|
-
} else if (tot - max < F[max_idx] / 2 && F[max_idx] > 2) {
|
|
238
|
-
// Too high, reduce the common symbol
|
|
239
|
-
F[max_idx] -= tot - max
|
|
240
|
-
} else if (tot != max) {
|
|
241
|
-
// Much too high, fudge scale and try again.
|
|
242
|
-
scale = scale * 0.99
|
|
243
|
-
renorm = 1
|
|
244
|
-
}
|
|
245
|
-
} while (renorm)
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
function WriteFrequencies0(out, F) {
|
|
249
|
-
var rle = 0
|
|
250
|
-
for (var i = 0; i < 256; i++) {
|
|
251
|
-
if (!F[i]) continue
|
|
252
|
-
|
|
253
|
-
// Output Symbol if needed and Frequency
|
|
254
|
-
if (rle > 0) rle--
|
|
255
|
-
else {
|
|
256
|
-
out.WriteByte(i)
|
|
257
|
-
|
|
258
|
-
if (i > 0 && F[i - 1] > 0) {
|
|
259
|
-
// We've encoded two symbol frequencies in a row.
|
|
260
|
-
// How many more are there? Store that count so
|
|
261
|
-
// we can avoid writing consecutive symbols.
|
|
262
|
-
for (rle = i + 1; rle < 256 && F[rle]; rle++);
|
|
263
|
-
rle -= i + 1
|
|
264
|
-
|
|
265
|
-
out.WriteByte(rle)
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
out.WriteITF8(F[i])
|
|
270
|
-
}
|
|
271
|
-
out.WriteByte(0)
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
function RansEncode0(src) {
|
|
275
|
-
const nbytes = src.length
|
|
276
|
-
var output = new IOStream('', 0, 257 * 3 + 9)
|
|
277
|
-
|
|
278
|
-
output.WriteByte(0) // Order 0
|
|
279
|
-
output.WriteUint32(0) // compressed size: correct later
|
|
280
|
-
output.WriteUint32(0) // uncompressed size: correct later
|
|
281
|
-
|
|
282
|
-
// Compute frequencies
|
|
283
|
-
var F = new Array(256)
|
|
284
|
-
BuildFrequencies0(src, F)
|
|
285
|
-
NormaliseFrequencies0(F)
|
|
286
|
-
WriteFrequencies0(output, F)
|
|
287
|
-
|
|
288
|
-
// Compute cumulative frequencies
|
|
289
|
-
var C = new Array(256)
|
|
290
|
-
C[0] = 0
|
|
291
|
-
for (var i = 1; i < 256; i++) C[i] = C[i - 1] + F[i - 1]
|
|
292
|
-
|
|
293
|
-
// Initialise rANS state
|
|
294
|
-
var R = new Array(4)
|
|
295
|
-
for (var i = 0; i < 4; i++) R[i] = RansEncInit()
|
|
296
|
-
|
|
297
|
-
var alloc = Math.floor(nbytes * 1.05 + 100)
|
|
298
|
-
var rans_out = new IOStream('', alloc, alloc)
|
|
299
|
-
|
|
300
|
-
// Main encode loop
|
|
301
|
-
for (var i = nbytes - 1; i >= 0; i--)
|
|
302
|
-
R[i % 4] = RansEncPut(R[i % 4], rans_out, C[src[i]], F[src[i]], 12)
|
|
303
|
-
|
|
304
|
-
for (var i = 3; i >= 0; i--) RansEncFlush(R[i], rans_out)
|
|
305
|
-
|
|
306
|
-
// Stitch blocks together into final output buffer
|
|
307
|
-
var freq_tab = output.pos
|
|
308
|
-
output.buf.writeInt32LE(freq_tab - 9 + (rans_out.length - rans_out.pos), 1)
|
|
309
|
-
output.buf.writeInt32LE(nbytes, 5)
|
|
310
|
-
|
|
311
|
-
return Buffer.concat(
|
|
312
|
-
[
|
|
313
|
-
output.buf.slice(0, output.pos),
|
|
314
|
-
rans_out.buf.slice(rans_out.pos, rans_out.length),
|
|
315
|
-
],
|
|
316
|
-
output.pos + rans_out.length - rans_out.pos,
|
|
317
|
-
)
|
|
318
|
-
}
|
|
319
|
-
|
|
320
150
|
//----------------------------------------------------------------------
|
|
321
151
|
// Order-1 decoder
|
|
322
152
|
|
|
@@ -368,7 +198,7 @@ function RansDecode1(src, nbytes) {
|
|
|
368
198
|
}
|
|
369
199
|
|
|
370
200
|
// Main decode loop
|
|
371
|
-
var output = new
|
|
201
|
+
var output = new Uint8Array(nbytes)
|
|
372
202
|
var nbytes4 = Math.floor(nbytes / 4)
|
|
373
203
|
for (var i = 0; i < nbytes4; i++) {
|
|
374
204
|
for (var j = 0; j < 4; j++) {
|
|
@@ -400,146 +230,4 @@ function RansDecode1(src, nbytes) {
|
|
|
400
230
|
return output
|
|
401
231
|
}
|
|
402
232
|
|
|
403
|
-
|
|
404
|
-
// Order-1 encoder
|
|
405
|
-
|
|
406
|
-
function BuildFrequencies1(src, F, F0) {
|
|
407
|
-
for (var i = 0; i < 256; i++) {
|
|
408
|
-
F0[i] = 0
|
|
409
|
-
for (var j = 0; j < 256; j++) F[i][j] = 0
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
var last = 0
|
|
413
|
-
for (var i = 0; i < src.length; i++) {
|
|
414
|
-
F0[src[i]]++
|
|
415
|
-
F[last][src[i]]++
|
|
416
|
-
//F[last][src[i]]++;
|
|
417
|
-
last = src[i]
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
// Also accept we'll be starting at 4 points, not just byte 0
|
|
421
|
-
F[0][src[1 * (src.length >> 2)]]++
|
|
422
|
-
F[0][src[2 * (src.length >> 2)]]++
|
|
423
|
-
F[0][src[3 * (src.length >> 2)]]++
|
|
424
|
-
F0[0] += 3
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
function NormaliseFrequencies1(F, F0) {
|
|
428
|
-
for (var i = 0; i < 256; i++) if (F0[i]) NormaliseFrequencies0(F[i])
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
function WriteFrequencies1(out, F, F0) {
|
|
432
|
-
var rle = 0
|
|
433
|
-
var last_sym = 0
|
|
434
|
-
|
|
435
|
-
for (var i = 0; i < 256; i++) {
|
|
436
|
-
if (!F0[i]) continue
|
|
437
|
-
|
|
438
|
-
// Output Symbol if needed and Frequency
|
|
439
|
-
if (rle > 0) rle--
|
|
440
|
-
else {
|
|
441
|
-
out.WriteByte(i)
|
|
442
|
-
|
|
443
|
-
if (i > 0 && F0[i - 1] > 0) {
|
|
444
|
-
for (rle = i + 1; rle < 256 && F0[rle]; rle++);
|
|
445
|
-
rle -= i + 1
|
|
446
|
-
out.WriteByte(rle)
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
WriteFrequencies0(out, F[i])
|
|
451
|
-
}
|
|
452
|
-
out.WriteByte(0)
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
function RansEncode1(src) {
|
|
456
|
-
const nbytes = src.length
|
|
457
|
-
var output = new IOStream('', 0, 257 * 257 * 3 + 9)
|
|
458
|
-
|
|
459
|
-
output.WriteByte(1) // Order 0
|
|
460
|
-
output.WriteUint32(0) // compressed size: correct later
|
|
461
|
-
output.WriteUint32(0) // uncompressed size: correct later
|
|
462
|
-
|
|
463
|
-
// Compute frequencies
|
|
464
|
-
var F0 = new Array(256)
|
|
465
|
-
var F = new Array(256)
|
|
466
|
-
var C = new Array(256)
|
|
467
|
-
for (var i = 0; i < 256; i++) {
|
|
468
|
-
F[i] = new Array(256)
|
|
469
|
-
C[i] = new Array(256)
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
BuildFrequencies1(src, F, F0)
|
|
473
|
-
NormaliseFrequencies1(F, F0)
|
|
474
|
-
WriteFrequencies1(output, F, F0)
|
|
475
|
-
|
|
476
|
-
// Compute cumulative frequencies
|
|
477
|
-
for (var i = 0; i < 256; i++) {
|
|
478
|
-
if (!F0[i]) continue
|
|
479
|
-
|
|
480
|
-
C[i][0] = 0
|
|
481
|
-
for (var j = 1; j < 256; j++) C[i][j] = C[i][j - 1] + F[i][j - 1]
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
// Initialise rANS state
|
|
485
|
-
var R = new Array(4)
|
|
486
|
-
var L = new Array(4)
|
|
487
|
-
for (var j = 0; j < 4; j++) {
|
|
488
|
-
R[j] = RansEncInit()
|
|
489
|
-
L[j] = 0
|
|
490
|
-
}
|
|
491
|
-
var rans_out = new IOStream('', nbytes, nbytes)
|
|
492
|
-
|
|
493
|
-
// We have 4 rans codecs running in parallel on its own 1/4tr of buffer
|
|
494
|
-
var nbytes4 = Math.floor(nbytes / 4)
|
|
495
|
-
var idx = new Array(4)
|
|
496
|
-
var last = new Array(4)
|
|
497
|
-
for (var j = 0; j < 4; j++) {
|
|
498
|
-
idx[j] = (j + 1) * nbytes4 - 2
|
|
499
|
-
last[j] = src[idx[j] + 1]
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
// Deal with the remainder if not a multiple of 4
|
|
503
|
-
last[3] = src[nbytes - 1]
|
|
504
|
-
for (var i = nbytes - 2; i > 4 * nbytes4 - 2; i--) {
|
|
505
|
-
R[3] = RansEncPut(
|
|
506
|
-
R[3],
|
|
507
|
-
rans_out,
|
|
508
|
-
C[src[i]][last[3]],
|
|
509
|
-
F[src[i]][last[3]],
|
|
510
|
-
12,
|
|
511
|
-
)
|
|
512
|
-
last[3] = src[i]
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
// Main encode loop
|
|
516
|
-
while (idx[0] >= 0) {
|
|
517
|
-
for (var j = 3; j >= 0; j--) {
|
|
518
|
-
var s = src[idx[j]]
|
|
519
|
-
R[j] = RansEncPut(R[j], rans_out, C[s][last[j]], F[s][last[j]], 12)
|
|
520
|
-
last[j] = s
|
|
521
|
-
idx[j]--
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
for (var j = 3; j >= 0; j--) {
|
|
526
|
-
R[j] = RansEncPut(R[j], rans_out, C[0][last[j]], F[0][last[j]], 12)
|
|
527
|
-
}
|
|
528
|
-
|
|
529
|
-
for (var i = 3; i >= 0; i--) RansEncFlush(R[i], rans_out)
|
|
530
|
-
|
|
531
|
-
// Stitch blocks together into final output buffer
|
|
532
|
-
var freq_tab = output.pos
|
|
533
|
-
output.buf.writeInt32LE(freq_tab - 9 + (rans_out.length - rans_out.pos), 1)
|
|
534
|
-
output.buf.writeInt32LE(nbytes, 5)
|
|
535
|
-
|
|
536
|
-
return Buffer.concat(
|
|
537
|
-
[
|
|
538
|
-
output.buf.slice(0, output.pos),
|
|
539
|
-
rans_out.buf.slice(rans_out.pos, rans_out.length),
|
|
540
|
-
],
|
|
541
|
-
output.pos + rans_out.length - rans_out.pos,
|
|
542
|
-
)
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
module.exports = { decode, encode }
|
|
233
|
+
module.exports = { decode }
|