]> wimlib.net Git - wimlib/blob - src/compress.c
Variable LZX window sizes
[wimlib] / src / compress.c
1 /*
2  * compress.c
3  *
4  * Functions used for compression.
5  */
6
7 /*
8  * Copyright (C) 2012, 2013 Eric Biggers
9  *
10  * This file is part of wimlib, a library for working with WIM files.
11  *
12  * wimlib is free software; you can redistribute it and/or modify it under the
13  * terms of the GNU General Public License as published by the Free
14  * Software Foundation; either version 3 of the License, or (at your option)
15  * any later version.
16  *
17  * wimlib is distributed in the hope that it will be useful, but WITHOUT ANY
18  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
19  * A PARTICULAR PURPOSE. See the GNU General Public License for more
20  * details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with wimlib; if not, see http://www.gnu.org/licenses/.
24  */
25
26 #ifdef HAVE_CONFIG_H
27 #  include "config.h"
28 #endif
29
30 #include "wimlib/assert.h"
31 #include "wimlib/compiler.h"
32 #include "wimlib/compress.h"
33 #include "wimlib/util.h"
34
35 #include <stdlib.h>
36 #include <string.h>
37
38 /* Writes @num_bits bits, given by the @num_bits least significant bits of
39  * @bits, to the output @ostream. */
40 void
41 bitstream_put_bits(struct output_bitstream *ostream, u32 bits,
42                    unsigned num_bits)
43 {
44         while (num_bits > ostream->free_bits) {
45                 /* Buffer variable does not have space for the new bits.  It
46                  * needs to be flushed as a 16-bit integer.  Bits in the second
47                  * byte logically precede those in the first byte
48                  * (little-endian), but within each byte the bits are ordered
49                  * from high to low.  This is true for both XPRESS and LZX
50                  * compression.  */
51
52                 /* There must be at least 2 bytes of space remaining.  */
53                 if (unlikely(ostream->bytes_remaining < 2)) {
54                         ostream->overrun = true;
55                         return;
56                 }
57
58                 /* Fill the buffer with as many bits that fit.  */
59                 unsigned fill_bits = ostream->free_bits;
60
61                 ostream->bitbuf <<= fill_bits;
62                 ostream->bitbuf |= bits >> (num_bits - fill_bits);
63
64                 *(le16*)ostream->bit_output = cpu_to_le16(ostream->bitbuf);
65                 ostream->bit_output = ostream->next_bit_output;
66                 ostream->next_bit_output = ostream->output;
67                 ostream->output += 2;
68                 ostream->bytes_remaining -= 2;
69
70                 ostream->free_bits = 16;
71                 num_bits -= fill_bits;
72                 bits &= (1U << num_bits) - 1;
73         }
74
75         /* Buffer variable has space for the new bits.  */
76         ostream->bitbuf = (ostream->bitbuf << num_bits) | bits;
77         ostream->free_bits -= num_bits;
78 }
79
80 void
81 bitstream_put_byte(struct output_bitstream *ostream, u8 n)
82 {
83         if (unlikely(ostream->bytes_remaining < 1)) {
84                 ostream->overrun = true;
85                 return;
86         }
87         *ostream->output++ = n;
88         ostream->bytes_remaining--;
89 }
90
91 /* Flushes any remaining bits to the output bitstream.
92  *
93  * Returns -1 if the stream has overrun; otherwise returns the total number of
94  * bytes in the output.  */
95 input_idx_t
96 flush_output_bitstream(struct output_bitstream *ostream)
97 {
98         if (unlikely(ostream->overrun))
99                 return ~(input_idx_t)0;
100
101         *(le16*)ostream->bit_output =
102                 cpu_to_le16((u16)((u32)ostream->bitbuf << ostream->free_bits));
103         *(le16*)ostream->next_bit_output =
104                 cpu_to_le16(0);
105
106         return ostream->output - ostream->output_start;
107 }
108
109 /* Initializes an output bit buffer to write its output to the memory location
110  * pointer to by @data. */
111 void
112 init_output_bitstream(struct output_bitstream *ostream,
113                       void *data, unsigned num_bytes)
114 {
115         wimlib_assert(num_bytes >= 4);
116
117         ostream->bitbuf              = 0;
118         ostream->free_bits           = 16;
119         ostream->output_start        = data;
120         ostream->bit_output          = data;
121         ostream->next_bit_output     = data + 2;
122         ostream->output              = data + 4;
123         ostream->bytes_remaining     = num_bytes;
124         ostream->overrun             = false;
125 }
126
127 typedef struct {
128         u32 freq;
129         u16 sym;
130         union {
131                 u16 path_len;
132                 u16 height;
133         };
134 } HuffmanNode;
135
136 typedef struct HuffmanIntermediateNode {
137         HuffmanNode node_base;
138         HuffmanNode *left_child;
139         HuffmanNode *right_child;
140 } HuffmanIntermediateNode;
141
142
143 /* Comparator function for HuffmanNodes.  Sorts primarily by symbol
144  * frequency and secondarily by symbol value. */
145 static int
146 cmp_nodes_by_freq(const void *_leaf1, const void *_leaf2)
147 {
148         const HuffmanNode *leaf1 = _leaf1;
149         const HuffmanNode *leaf2 = _leaf2;
150
151         int freq_diff = (int)leaf1->freq - (int)leaf2->freq;
152
153         if (freq_diff == 0)
154                 return (int)leaf1->sym - (int)leaf2->sym;
155         else
156                 return freq_diff;
157 }
158
159 /* Comparator function for HuffmanNodes.  Sorts primarily by code length and
160  * secondarily by symbol value. */
161 static int
162 cmp_nodes_by_code_len(const void *_leaf1, const void *_leaf2)
163 {
164         const HuffmanNode *leaf1 = _leaf1;
165         const HuffmanNode *leaf2 = _leaf2;
166
167         int code_len_diff = (int)leaf1->path_len - (int)leaf2->path_len;
168
169         if (code_len_diff == 0)
170                 return (int)leaf1->sym - (int)leaf2->sym;
171         else
172                 return code_len_diff;
173 }
174
175 #define INVALID_SYMBOL 0xffff
176
177 /* Recursive function to calculate the depth of the leaves in a Huffman tree.
178  * */
179 static void
180 huffman_tree_compute_path_lengths(HuffmanNode *base_node, u16 cur_len)
181 {
182         if (base_node->sym == INVALID_SYMBOL) {
183                 /* Intermediate node. */
184                 HuffmanIntermediateNode *node = (HuffmanIntermediateNode*)base_node;
185                 huffman_tree_compute_path_lengths(node->left_child, cur_len + 1);
186                 huffman_tree_compute_path_lengths(node->right_child, cur_len + 1);
187         } else {
188                 /* Leaf node. */
189                 base_node->path_len = cur_len;
190         }
191 }
192
193 /* make_canonical_huffman_code: - Creates a canonical Huffman code from an array
194  *                                of symbol frequencies.
195  *
196  * The algorithm used is similar to the well-known algorithm that builds a
197  * Huffman tree using a minheap.  In that algorithm, the leaf nodes are
198  * initialized and inserted into the minheap with the frequency as the key.
199  * Repeatedly, the top two nodes (nodes with the lowest frequency) are taken out
200  * of the heap and made the children of a new node that has a frequency equal to
201  * the sum of the two frequencies of its children.  This new node is inserted
202  * into the heap.  When all the nodes have been removed from the heap, what
203  * remains is the Huffman tree. The Huffman code for a symbol is given by the
204  * path to it in the tree, where each left pointer is mapped to a 0 bit and each
205  * right pointer is mapped to a 1 bit.
206  *
207  * The algorithm used here uses an optimization that removes the need to
208  * actually use a heap.  The leaf nodes are first sorted by frequency, as
209  * opposed to being made into a heap.  Note that this sorting step takes O(n log
210  * n) time vs.  O(n) time for heapifying the array, where n is the number of
211  * symbols.  However, the heapless method is probably faster overall, due to the
212  * time saved later.  In the heapless method, whenever an intermediate node is
213  * created, it is not inserted into the sorted array.  Instead, the intermediate
214  * nodes are kept in a separate array, which is easily kept sorted because every
215  * time an intermediate node is initialized, it will have a frequency at least
216  * as high as that of the previous intermediate node that was initialized.  So
217  * whenever we want the 2 nodes, leaf or intermediate, that have the lowest
218  * frequency, we check the low-frequency ends of both arrays, which is an O(1)
219  * operation.
220  *
221  * The function builds a canonical Huffman code, not just any Huffman code.  A
222  * Huffman code is canonical if the codeword for each symbol numerically
223  * precedes the codeword for all other symbols of the same length that are
224  * numbered higher than the symbol, and additionally, all shorter codewords,
225  * 0-extended, numerically precede longer codewords.  A canonical Huffman code
226  * is useful because it can be reconstructed by only knowing the path lengths in
227  * the tree.  See the make_huffman_decode_table() function to see how to
228  * reconstruct a canonical Huffman code from only the lengths of the codes.
229  *
230  * @num_syms:  The number of symbols in the alphabet.
231  *
232  * @max_codeword_len:  The maximum allowed length of a codeword in the code.
233  *                      Note that if the code being created runs up against
234  *                      this restriction, the code ultimately created will be
235  *                      suboptimal, although there are some advantages for
236  *                      limiting the length of the codewords.
237  *
238  * @freq_tab:  An array of length @num_syms that contains the frequencies
239  *                      of each symbol in the uncompressed data.
240  *
241  * @lens:          An array of length @num_syms into which the lengths of the
242  *                      codewords for each symbol will be written.
243  *
244  * @codewords:     An array of @num_syms short integers into which the
245  *                      codewords for each symbol will be written.  The first
246  *                      lens[i] bits of codewords[i] will contain the codeword
247  *                      for symbol i.
248  */
249 void
250 make_canonical_huffman_code(unsigned num_syms,
251                             unsigned max_codeword_len,
252                             const freq_t freq_tab[restrict],
253                             u8 lens[restrict],
254                             u16 codewords[restrict])
255 {
256         /* We require at least 2 possible symbols in the alphabet to produce a
257          * valid Huffman decoding table. It is allowed that fewer than 2 symbols
258          * are actually used, though. */
259         wimlib_assert(num_syms >= 2);
260
261         /* Initialize the lengths and codewords to 0 */
262         memset(lens, 0, num_syms * sizeof(lens[0]));
263         memset(codewords, 0, num_syms * sizeof(codewords[0]));
264
265         /* Calculate how many symbols have non-zero frequency.  These are the
266          * symbols that actually appeared in the input. */
267         unsigned num_used_symbols = 0;
268         for (unsigned i = 0; i < num_syms; i++)
269                 if (freq_tab[i] != 0)
270                         num_used_symbols++;
271
272
273         /* It is impossible to make a code for num_used_symbols symbols if there
274          * aren't enough code bits to uniquely represent all of them. */
275         wimlib_assert((1 << max_codeword_len) > num_used_symbols);
276
277         /* Initialize the array of leaf nodes with the symbols and their
278          * frequencies. */
279         HuffmanNode leaves[num_used_symbols];
280         unsigned leaf_idx = 0;
281         for (unsigned i = 0; i < num_syms; i++) {
282                 if (freq_tab[i] != 0) {
283                         leaves[leaf_idx].freq = freq_tab[i];
284                         leaves[leaf_idx].sym  = i;
285                         leaves[leaf_idx].height = 0;
286                         leaf_idx++;
287                 }
288         }
289
290         /* Deal with the special cases where num_used_symbols < 2. */
291         if (num_used_symbols < 2) {
292                 if (num_used_symbols == 0) {
293                         /* If num_used_symbols is 0, there are no symbols in the
294                          * input, so it must be empty.  This should be an error,
295                          * but the LZX format expects this case to succeed.  All
296                          * the codeword lengths are simply marked as 0 (which
297                          * was already done.) */
298                 } else {
299                         /* If only one symbol is present, the LZX format
300                          * requires that the Huffman code include two codewords.
301                          * One is not used.  Note that this doesn't make the
302                          * encoded data take up more room anyway, since binary
303                          * data itself has 2 symbols. */
304
305                         unsigned sym = leaves[0].sym;
306
307                         codewords[0] = 0;
308                         lens[0]      = 1;
309                         if (sym == 0) {
310                                 /* dummy symbol is 1, real symbol is 0 */
311                                 codewords[1] = 1;
312                                 lens[1]      = 1;
313                         } else {
314                                 /* dummy symbol is 0, real symbol is sym */
315                                 codewords[sym] = 1;
316                                 lens[sym]      = 1;
317                         }
318                 }
319                 return;
320         }
321
322         /* Otherwise, there are at least 2 symbols in the input, so we need to
323          * find a real Huffman code. */
324
325
326         /* Declare the array of intermediate nodes.  An intermediate node is not
327          * associated with a symbol. Instead, it represents some binary code
328          * prefix that is shared between at least 2 codewords.  There can be at
329          * most num_used_symbols - 1 intermediate nodes when creating a Huffman
330          * code.  This is because if there were at least num_used_symbols nodes,
331          * the code would be suboptimal because there would be at least one
332          * unnecessary intermediate node.
333          *
334          * The worst case (greatest number of intermediate nodes) would be if
335          * all the intermediate nodes were chained together.  This results in
336          * num_used_symbols - 1 intermediate nodes.  If num_used_symbols is at
337          * least 17, this configuration would not be allowed because the LZX
338          * format constrains codes to 16 bits or less each.  However, it is
339          * still possible for there to be more than 16 intermediate nodes, as
340          * long as no leaf has a depth of more than 16.  */
341         HuffmanIntermediateNode inodes[num_used_symbols - 1];
342
343
344         /* Pointer to the leaf node of lowest frequency that hasn't already been
345          * added as the child of some intermediate note. */
346         HuffmanNode *cur_leaf;
347
348         /* Pointer past the end of the array of leaves. */
349         HuffmanNode *end_leaf = &leaves[num_used_symbols];
350
351         /* Pointer to the intermediate node of lowest frequency. */
352         HuffmanIntermediateNode     *cur_inode;
353
354         /* Pointer to the next unallocated intermediate node. */
355         HuffmanIntermediateNode     *next_inode;
356
357         /* Only jump back to here if the maximum length of the codewords allowed
358          * by the LZX format (16 bits) is exceeded. */
359 try_building_tree_again:
360
361         /* Sort the leaves from those that correspond to the least frequent
362          * symbol, to those that correspond to the most frequent symbol.  If two
363          * leaves have the same frequency, they are sorted by symbol. */
364         qsort(leaves, num_used_symbols, sizeof(leaves[0]), cmp_nodes_by_freq);
365
366         cur_leaf   = &leaves[0];
367         cur_inode  = &inodes[0];
368         next_inode = &inodes[0];
369
370         /* The following loop takes the two lowest frequency nodes of those
371          * remaining and makes them the children of the next available
372          * intermediate node.  It continues until all the leaf nodes and
373          * intermediate nodes have been used up, or the maximum allowed length
374          * for the codewords is exceeded.  For the latter case, we must adjust
375          * the frequencies to be more equal and then execute this loop again. */
376         while (1) {
377
378                 /* Lowest frequency node. */
379                 HuffmanNode *f1;
380
381                 /* Second lowest frequency node. */
382                 HuffmanNode *f2;
383
384                 /* Get the lowest and second lowest frequency nodes from the
385                  * remaining leaves or from the intermediate nodes. */
386
387                 if (cur_leaf != end_leaf && (cur_inode == next_inode ||
388                                         cur_leaf->freq <= cur_inode->node_base.freq)) {
389                         f1 = cur_leaf++;
390                 } else if (cur_inode != next_inode) {
391                         f1 = (HuffmanNode*)cur_inode++;
392                 }
393
394                 if (cur_leaf != end_leaf && (cur_inode == next_inode ||
395                                         cur_leaf->freq <= cur_inode->node_base.freq)) {
396                         f2 = cur_leaf++;
397                 } else if (cur_inode != next_inode) {
398                         f2 = (HuffmanNode*)cur_inode++;
399                 } else {
400                         /* All nodes used up! */
401                         break;
402                 }
403
404                 /* next_inode becomes the parent of f1 and f2. */
405
406                 next_inode->node_base.freq = f1->freq + f2->freq;
407                 next_inode->node_base.sym  = INVALID_SYMBOL;
408                 next_inode->left_child     = f1;
409                 next_inode->right_child    = f2;
410
411                 /* We need to keep track of the height so that we can detect if
412                  * the length of a codeword has execeed max_codeword_len.   The
413                  * parent node has a height one higher than the maximum height
414                  * of its children. */
415                 next_inode->node_base.height = max(f1->height, f2->height) + 1;
416
417                 /* Check to see if the code length of the leaf farthest away
418                  * from next_inode has exceeded the maximum code length. */
419                 if (next_inode->node_base.height > max_codeword_len) {
420                         /* The code lengths can be made more uniform by making
421                          * the frequencies more uniform.  Divide all the
422                          * frequencies by 2, leaving 1 as the minimum frequency.
423                          * If this keeps happening, the symbol frequencies will
424                          * approach equality, which makes their Huffman
425                          * codewords approach the length
426                          * log_2(num_used_symbols).
427                          * */
428                         for (unsigned i = 0; i < num_used_symbols; i++)
429                                 if (leaves[i].freq > 1)
430                                         leaves[i].freq >>= 1;
431                         goto try_building_tree_again;
432                 }
433                 next_inode++;
434         }
435
436         /* The Huffman tree is now complete, and its height is no more than
437          * max_codeword_len.  */
438
439         HuffmanIntermediateNode *root = next_inode - 1;
440         wimlib_assert(root->node_base.height <= max_codeword_len);
441
442         /* Compute the path lengths for the leaf nodes. */
443         huffman_tree_compute_path_lengths(&root->node_base, 0);
444
445         /* Sort the leaf nodes primarily by code length and secondarily by
446          * symbol.  */
447         qsort(leaves, num_used_symbols, sizeof(leaves[0]), cmp_nodes_by_code_len);
448
449         u16 cur_codeword = 0;
450         unsigned cur_codeword_len = 0;
451         for (unsigned i = 0; i < num_used_symbols; i++) {
452
453                 /* Each time a codeword becomes one longer, the current codeword
454                  * is left shifted by one place.  This is part of the procedure
455                  * for enumerating the canonical Huffman code.  Additionally,
456                  * whenever a codeword is used, 1 is added to the current
457                  * codeword.  */
458
459                 unsigned len_diff = leaves[i].path_len - cur_codeword_len;
460                 cur_codeword <<= len_diff;
461                 cur_codeword_len += len_diff;
462
463                 u16 sym = leaves[i].sym;
464                 codewords[sym] = cur_codeword;
465                 lens[sym] = cur_codeword_len;
466
467                 cur_codeword++;
468         }
469 }