1 // license:BSD-3-Clause
2 // copyright-holders:Aaron Giles
3 /***************************************************************************
4 
5     huffman.c
6 
7     Static Huffman compression and decompression helpers.
8 
9 ****************************************************************************
10 
11     Maximum codelength is officially (alphabetsize - 1). This would be 255 bits
12     (since we use 1 byte values). However, it is also dependent upon the number
13     of samples used, as follows:
14 
15          2 bits -> 3..4 samples
16          3 bits -> 5..7 samples
17          4 bits -> 8..12 samples
18          5 bits -> 13..20 samples
19          6 bits -> 21..33 samples
20          7 bits -> 34..54 samples
21          8 bits -> 55..88 samples
22          9 bits -> 89..143 samples
23         10 bits -> 144..232 samples
24         11 bits -> 233..376 samples
25         12 bits -> 377..609 samples
26         13 bits -> 610..986 samples
27         14 bits -> 987..1596 samples
28         15 bits -> 1597..2583 samples
29         16 bits -> 2584..4180 samples   -> note that a 4k data size guarantees codelength <= 16 bits
30         17 bits -> 4181..6764 samples
31         18 bits -> 6765..10945 samples
32         19 bits -> 10946..17710 samples
33         20 bits -> 17711..28656 samples
34         21 bits -> 28657..46367 samples
35         22 bits -> 46368..75024 samples
36         23 bits -> 75025..121392 samples
37         24 bits -> 121393..196417 samples
38         25 bits -> 196418..317810 samples
39         26 bits -> 317811..514228 samples
40         27 bits -> 514229..832039 samples
41         28 bits -> 832040..1346268 samples
42         29 bits -> 1346269..2178308 samples
43         30 bits -> 2178309..3524577 samples
44         31 bits -> 3524578..5702886 samples
45         32 bits -> 5702887..9227464 samples
46 
47     Looking at it differently, here is where powers of 2 fall into these buckets:
48 
49           256 samples -> 11 bits max
50           512 samples -> 12 bits max
51            1k samples -> 14 bits max
52            2k samples -> 15 bits max
53            4k samples -> 16 bits max
54            8k samples -> 18 bits max
55           16k samples -> 19 bits max
56           32k samples -> 21 bits max
57           64k samples -> 22 bits max
58          128k samples -> 24 bits max
59          256k samples -> 25 bits max
60          512k samples -> 27 bits max
61            1M samples -> 28 bits max
62            2M samples -> 29 bits max
63            4M samples -> 31 bits max
64            8M samples -> 32 bits max
65 
66 ****************************************************************************
67 
68     Delta-RLE encoding works as follows:
69 
70     Starting value is assumed to be 0. All data is encoded as a delta
71     from the previous value, such that final[i] = final[i - 1] + delta.
72     Long runs of 0s are RLE-encoded as follows:
73 
74         0x100 = repeat count of 8
75         0x101 = repeat count of 9
76         0x102 = repeat count of 10
77         0x103 = repeat count of 11
78         0x104 = repeat count of 12
79         0x105 = repeat count of 13
80         0x106 = repeat count of 14
81         0x107 = repeat count of 15
82         0x108 = repeat count of 16
83         0x109 = repeat count of 32
84         0x10a = repeat count of 64
85         0x10b = repeat count of 128
86         0x10c = repeat count of 256
87         0x10d = repeat count of 512
88         0x10e = repeat count of 1024
89         0x10f = repeat count of 2048
90 
91     Note that repeat counts are reset at the end of a row, so if a 0 run
92     extends to the end of a row, a large repeat count may be used.
93 
94     The reason for starting the run counts at 8 is that 0 is expected to
95     be the most common symbol, and is typically encoded in 1 or 2 bits.
96 
97 ***************************************************************************/
98 
99 #include <stdlib.h>
100 #include <assert.h>
101 #include <stdio.h>
102 #include <string.h>
103 
104 #include "huffman.h"
105 
106 #define MAX(x,y) ((x) > (y) ? (x) : (y))
107 
108 //**************************************************************************
109 //  MACROS
110 //**************************************************************************
111 
112 #define MAKE_LOOKUP(code,bits)  (((code) << 5) | ((bits) & 0x1f))
113 
114 
115 //**************************************************************************
116 //  IMPLEMENTATION
117 //**************************************************************************
118 
119 //-------------------------------------------------
120 //  huffman_context_base - create an encoding/
121 //  decoding context
122 //-------------------------------------------------
123 
create_huffman_decoder(int numcodes,int maxbits)124 struct huffman_decoder* create_huffman_decoder(int numcodes, int maxbits)
125 {
126    struct huffman_decoder* decoder;
127 
128 	/* limit to 24 bits */
129 	if (maxbits > 24)
130 		return NULL;
131 
132 	decoder = (struct huffman_decoder*)malloc(sizeof(struct huffman_decoder));
133 	decoder->numcodes = numcodes;
134 	decoder->maxbits = maxbits;
135 	decoder->lookup = (lookup_value*)malloc(sizeof(lookup_value) * (1 << maxbits));
136 	decoder->huffnode = (struct node_t*)malloc(sizeof(struct node_t) * numcodes);
137 	decoder->datahisto = NULL;
138 	decoder->prevdata = 0;
139 	decoder->rleremaining = 0;
140 	return decoder;
141 }
142 
143 //-------------------------------------------------
144 //  decode_one - decode a single code from the
145 //  huffman stream
146 //-------------------------------------------------
147 
huffman_decode_one(struct huffman_decoder * decoder,struct bitstream * bitbuf)148 uint32_t huffman_decode_one(struct huffman_decoder* decoder, struct bitstream* bitbuf)
149 {
150 	/* peek ahead to get maxbits worth of data */
151 	uint32_t bits = bitstream_peek(bitbuf, decoder->maxbits);
152 
153 	/* look it up, then remove the actual number of bits for this code */
154 	lookup_value lookup = decoder->lookup[bits];
155 	bitstream_remove(bitbuf, lookup & 0x1f);
156 
157 	/* return the value */
158 	return lookup >> 5;
159 }
160 
161 //-------------------------------------------------
162 //  import_tree_rle - import an RLE-encoded
163 //  huffman tree from a source data stream
164 //-------------------------------------------------
165 
huffman_import_tree_rle(struct huffman_decoder * decoder,struct bitstream * bitbuf)166 enum huffman_error huffman_import_tree_rle(struct huffman_decoder* decoder, struct bitstream* bitbuf)
167 {
168    enum huffman_error error;
169 	int curnode;
170 	// bits per entry depends on the maxbits
171 	int numbits;
172 	if (decoder->maxbits >= 16)
173 		numbits = 5;
174 	else if (decoder->maxbits >= 8)
175 		numbits = 4;
176 	else
177 		numbits = 3;
178 
179 	// loop until we read all the nodes
180 	for (curnode = 0; curnode < decoder->numcodes; )
181 	{
182 		// a non-one value is just raw
183 		int nodebits = bitstream_read(bitbuf, numbits);
184 		if (nodebits != 1)
185 			decoder->huffnode[curnode++].numbits = nodebits;
186 
187 		// a one value is an escape code
188 		else
189 		{
190 			// a double 1 is just a single 1
191 			nodebits = bitstream_read(bitbuf, numbits);
192 			if (nodebits == 1)
193 				decoder->huffnode[curnode++].numbits = nodebits;
194 
195 			// otherwise, we need one for value for the repeat count
196 			else
197 			{
198 				int repcount = bitstream_read(bitbuf, numbits) + 3;
199 				while (repcount--)
200 					decoder->huffnode[curnode++].numbits = nodebits;
201 			}
202 		}
203 	}
204 
205 	// make sure we ended up with the right number
206 	if (curnode != decoder->numcodes)
207 		return HUFFERR_INVALID_DATA;
208 
209 	// assign canonical codes for all nodes based on their code lengths
210 	error = huffman_assign_canonical_codes(decoder);
211 	if (error != HUFFERR_NONE)
212 		return error;
213 
214 	// build the lookup table
215 	huffman_build_lookup_table(decoder);
216 
217 	// determine final input length and report errors
218 	return bitstream_overflow(bitbuf) ? HUFFERR_INPUT_BUFFER_TOO_SMALL : HUFFERR_NONE;
219 }
220 
221 
222 //-------------------------------------------------
223 //  import_tree_huffman - import a huffman-encoded
224 //  huffman tree from a source data stream
225 //-------------------------------------------------
226 
huffman_import_tree_huffman(struct huffman_decoder * decoder,struct bitstream * bitbuf)227 enum huffman_error huffman_import_tree_huffman(struct huffman_decoder* decoder, struct bitstream* bitbuf)
228 {
229    int index;
230    int start;
231 	int count = 0;
232 	uint8_t rlefullbits = 0;
233 	int last = 0;
234 	int curcode;
235    enum huffman_error error;
236    uint32_t temp;
237 	// start by parsing the lengths for the small tree
238 	struct huffman_decoder* smallhuff = create_huffman_decoder(24, 6);
239 
240 	smallhuff->huffnode[0].numbits = bitstream_read(bitbuf, 3);
241 	start = bitstream_read(bitbuf, 3) + 1;
242 
243 	for (index = 1; index < 24; index++)
244 	{
245 		if (index < start || count == 7)
246 			smallhuff->huffnode[index].numbits = 0;
247 		else
248 		{
249 			count = bitstream_read(bitbuf, 3);
250 			smallhuff->huffnode[index].numbits = (count == 7) ? 0 : count;
251 		}
252 	}
253 
254 	// then regenerate the tree
255 	error = huffman_assign_canonical_codes(smallhuff);
256 	if (error != HUFFERR_NONE)
257 		return error;
258 	huffman_build_lookup_table(smallhuff);
259 
260 	// determine the maximum length of an RLE count
261 	temp = decoder->numcodes - 9;
262 	while (temp != 0)
263 		temp >>= 1, rlefullbits++;
264 
265 	// now process the rest of the data
266 	for (curcode = 0; curcode < decoder->numcodes; )
267 	{
268 		int value = huffman_decode_one(smallhuff, bitbuf);
269 		if (value != 0)
270 			decoder->huffnode[curcode++].numbits = last = value - 1;
271 		else
272 		{
273 			int count = bitstream_read(bitbuf, 3) + 2;
274 			if (count == 7+2)
275 				count += bitstream_read(bitbuf, rlefullbits);
276 			for ( ; count != 0 && curcode < decoder->numcodes; count--)
277 				decoder->huffnode[curcode++].numbits = last;
278 		}
279 	}
280 
281 	// make sure we ended up with the right number
282 	if (curcode != decoder->numcodes)
283 		return HUFFERR_INVALID_DATA;
284 
285 	// assign canonical codes for all nodes based on their code lengths
286 	error = huffman_assign_canonical_codes(decoder);
287 	if (error != HUFFERR_NONE)
288 		return error;
289 
290 	// build the lookup table
291 	huffman_build_lookup_table(decoder);
292 
293 	// determine final input length and report errors
294 	return bitstream_overflow(bitbuf) ? HUFFERR_INPUT_BUFFER_TOO_SMALL : HUFFERR_NONE;
295 }
296 
297 
298 //-------------------------------------------------
299 //  compute_tree_from_histo - common backend for
300 //  computing a tree based on the data histogram
301 //-------------------------------------------------
302 
huffman_compute_tree_from_histo(struct huffman_decoder * decoder)303 enum huffman_error huffman_compute_tree_from_histo(struct huffman_decoder* decoder)
304 {
305    int i;
306    uint32_t upperweight;
307 	uint32_t lowerweight = 0;
308 	// compute the number of data items in the histogram
309 	uint32_t sdatacount = 0;
310 	for (i = 0; i < decoder->numcodes; i++)
311 		sdatacount += decoder->datahisto[i];
312 
313 	// binary search to achieve the optimum encoding
314 	upperweight = sdatacount * 2;
315 	while (1)
316 	{
317 		// build a tree using the current weight
318 		uint32_t curweight = (upperweight + lowerweight) / 2;
319 		int curmaxbits = huffman_build_tree(decoder, sdatacount, curweight);
320 
321 		// apply binary search here
322 		if (curmaxbits <= decoder->maxbits)
323 		{
324 			lowerweight = curweight;
325 
326 			// early out if it worked with the raw weights, or if we're done searching
327 			if (curweight == sdatacount || (upperweight - lowerweight) <= 1)
328 				break;
329 		}
330 		else
331 			upperweight = curweight;
332 	}
333 
334 	// assign canonical codes for all nodes based on their code lengths
335 	return huffman_assign_canonical_codes(decoder);
336 }
337 
338 
339 
340 //**************************************************************************
341 //  INTERNAL FUNCTIONS
342 //**************************************************************************
343 
344 //-------------------------------------------------
345 //  tree_node_compare - compare two tree nodes
346 //  by weight
347 //-------------------------------------------------
348 
huffman_tree_node_compare(const void * item1,const void * item2)349 static int huffman_tree_node_compare(const void *item1, const void *item2)
350 {
351 	const struct node_t *node1 = *(const struct node_t **)item1;
352 	const struct node_t *node2 = *(const struct node_t **)item2;
353 	if (node2->weight != node1->weight)
354 		return node2->weight - node1->weight;
355 	if (node2->bits - node1->bits == 0)
356 		fprintf(stderr, "identical node sort keys, should not happen!\n");
357 	return (int)node1->bits - (int)node2->bits;
358 }
359 
360 
361 //-------------------------------------------------
362 //  build_tree - build a huffman tree based on the
363 //  data distribution
364 //-------------------------------------------------
365 
huffman_build_tree(struct huffman_decoder * decoder,uint32_t totaldata,uint32_t totalweight)366 int huffman_build_tree(struct huffman_decoder* decoder, uint32_t totaldata, uint32_t totalweight)
367 {
368    int curcode;
369    int nextalloc;
370 	int maxbits = 0;
371 	// make a list of all non-zero nodes
372 	struct node_t** list = (struct node_t**)malloc(sizeof(struct node_t*) * decoder->numcodes * 2);
373 	int listitems = 0;
374 	memset(decoder->huffnode, 0, decoder->numcodes * sizeof(decoder->huffnode[0]));
375 	for (curcode = 0; curcode < decoder->numcodes; curcode++)
376 		if (decoder->datahisto[curcode] != 0)
377 		{
378 			list[listitems++] = &decoder->huffnode[curcode];
379 			decoder->huffnode[curcode].count = decoder->datahisto[curcode];
380 			decoder->huffnode[curcode].bits = curcode;
381 
382 			// scale the weight by the current effective length, ensuring we don't go to 0
383 			decoder->huffnode[curcode].weight = ((uint64_t)decoder->datahisto[curcode]) * ((uint64_t)totalweight) / ((uint64_t)totaldata);
384 			if (decoder->huffnode[curcode].weight == 0)
385 				decoder->huffnode[curcode].weight = 1;
386 		}
387 /*
388         fprintf(stderr, "Pre-sort:\n");
389         for (int i = 0; i < listitems; i++) {
390             fprintf(stderr, "weight: %d code: %d\n", list[i]->m_weight, list[i]->m_bits);
391         }
392 */
393 	// sort the list by weight, largest weight first
394 	qsort(&list[0], listitems, sizeof(list[0]), huffman_tree_node_compare);
395 /*
396         fprintf(stderr, "Post-sort:\n");
397         for (int i = 0; i < listitems; i++) {
398             fprintf(stderr, "weight: %d code: %d\n", list[i]->m_weight, list[i]->m_bits);
399         }
400         fprintf(stderr, "===================\n");
401 */
402 	// now build the tree
403 	nextalloc = decoder->numcodes;
404 
405 	while (listitems > 1)
406 	{
407 		int curitem;
408 		// remove lowest two items
409 		struct node_t* node1 = &(*list[--listitems]);
410 		struct node_t* node0 = &(*list[--listitems]);
411 
412 		// create new node
413 		struct node_t* newnode = &decoder->huffnode[nextalloc++];
414 		newnode->parent = NULL;
415 		node0->parent = node1->parent = newnode;
416 		newnode->weight = node0->weight + node1->weight;
417 
418 		// insert into list at appropriate location
419 		for (curitem = 0; curitem < listitems; curitem++)
420 			if (newnode->weight > list[curitem]->weight)
421 			{
422 				memmove(&list[curitem+1], &list[curitem], (listitems - curitem) * sizeof(list[0]));
423 				break;
424 			}
425 		list[curitem] = newnode;
426 		listitems++;
427 	}
428 
429 	// compute the number of bits in each code, and fill in another histogram
430 	for (curcode = 0; curcode < decoder->numcodes; curcode++)
431 	{
432 		struct node_t* node = &decoder->huffnode[curcode];
433 		node->numbits = 0;
434 		node->bits = 0;
435 
436 		// if we have a non-zero weight, compute the number of bits
437 		if (node->weight > 0)
438 		{
439          struct node_t *curnode;
440 			// determine the number of bits for this node
441 			for (curnode = node; curnode->parent != NULL; curnode = curnode->parent)
442 				node->numbits++;
443 			if (node->numbits == 0)
444 				node->numbits = 1;
445 
446 			// keep track of the max
447 			maxbits = MAX(maxbits, ((int)node->numbits));
448 		}
449 	}
450 	return maxbits;
451 }
452 
453 
454 //-------------------------------------------------
455 //  assign_canonical_codes - assign canonical codes
456 //  to all the nodes based on the number of bits
457 //  in each
458 //-------------------------------------------------
459 
huffman_assign_canonical_codes(struct huffman_decoder * decoder)460 enum huffman_error huffman_assign_canonical_codes(struct huffman_decoder* decoder)
461 {
462    int curcode, codelen;
463 	uint32_t curstart = 0;
464 
465 	// build up a histogram of bit lengths
466 	uint32_t bithisto[33] = { 0 };
467 	for (curcode = 0; curcode < decoder->numcodes; curcode++)
468 	{
469 		struct node_t* node = &decoder->huffnode[curcode];
470 		if (node->numbits > decoder->maxbits)
471 			return HUFFERR_INTERNAL_INCONSISTENCY;
472 		if (node->numbits <= 32)
473 			bithisto[node->numbits]++;
474 	}
475 
476 	// for each code length, determine the starting code number
477 	for (codelen = 32; codelen > 0; codelen--)
478 	{
479 		uint32_t nextstart = (curstart + bithisto[codelen]) >> 1;
480 		if (codelen != 1 && nextstart * 2 != (curstart + bithisto[codelen]))
481 			return HUFFERR_INTERNAL_INCONSISTENCY;
482 		bithisto[codelen] = curstart;
483 		curstart = nextstart;
484 	}
485 
486 	// now assign canonical codes
487 	for (curcode = 0; curcode < decoder->numcodes; curcode++)
488 	{
489 		struct node_t* node = &decoder->huffnode[curcode];
490 		if (node->numbits > 0)
491 			node->bits = bithisto[node->numbits]++;
492 	}
493 	return HUFFERR_NONE;
494 }
495 
496 
497 //-------------------------------------------------
498 //  build_lookup_table - build a lookup table for
499 //  fast decoding
500 //-------------------------------------------------
501 
huffman_build_lookup_table(struct huffman_decoder * decoder)502 void huffman_build_lookup_table(struct huffman_decoder* decoder)
503 {
504    int curcode;
505 	// iterate over all codes
506 	for (curcode = 0; curcode < decoder->numcodes; curcode++)
507 	{
508 		// process all nodes which have non-zero bits
509 		struct node_t* node = &decoder->huffnode[curcode];
510 		if (node->numbits > 0)
511 		{
512          int shift;
513          lookup_value *dest;
514          lookup_value *destend;
515 
516 			// set up the entry
517 			lookup_value value = MAKE_LOOKUP(curcode, node->numbits);
518 
519 			// fill all matching entries
520 			shift   = decoder->maxbits - node->numbits;
521 			dest    = &decoder->lookup[node->bits << shift];
522 			destend = &decoder->lookup[((node->bits + 1) << shift) - 1];
523 
524 			while (dest <= destend)
525 				*dest++ = value;
526 		}
527 	}
528 }
529