RetroArch
huffman.h
Go to the documentation of this file.
1 /* license:BSD-3-Clause
2  * copyright-holders:Aaron Giles
3  ***************************************************************************
4 
5  huffman.h
6 
7  Static Huffman compression and decompression helpers.
8 
9 ***************************************************************************/
10 
11 #pragma once
12 
13 #ifndef __HUFFMAN_H__
14 #define __HUFFMAN_H__
15 
16 #include "bitstream.h"
17 
18 
19 /***************************************************************************
20  * CONSTANTS
21  ***************************************************************************
22  */
23 
25 {
33 };
34 
35 /***************************************************************************
36  * TYPE DEFINITIONS
37  ***************************************************************************
38  */
39 
41 
42 /* a node in the huffman tree */
43 struct node_t
44 {
45  struct node_t* parent; /* pointer to parent node */
46  uint32_t count; /* number of hits on this node */
47  uint32_t weight; /* assigned weight of this node */
48  uint32_t bits; /* bits used to encode the node */
49  uint8_t numbits; /* number of bits needed for this node */
50 };
51 
52 /* ======================> huffman_context_base */
53 
54 /* context class for decoding */
56 {
57  /* internal state */
58  uint32_t numcodes; /* number of total codes being processed */
59  uint8_t maxbits; /* maximum bits per code */
60  uint8_t prevdata; /* value of the previous data (for delta-RLE encoding) */
61  int rleremaining; /* number of RLE bytes remaining (for delta-RLE encoding) */
62  lookup_value * lookup; /* pointer to the lookup table */
63  struct node_t * huffnode; /* array of nodes */
64  uint32_t * datahisto; /* histogram of data values */
65 
66  /* array versions of the info we need */
67 #if 0
68  node_t* huffnode_array; /* [_NumCodes]; */
69  lookup_value* lookup_array; /* [1 << _MaxBits]; */
70 #endif
71 };
72 
73 /* ======================> huffman_decoder */
74 
76 void delete_huffman_decoder(struct huffman_decoder* decoder);
77 
78 /* single item operations */
79 uint32_t huffman_decode_one(struct huffman_decoder* decoder, struct bitstream* bitbuf);
80 
81 enum huffman_error huffman_import_tree_rle(struct huffman_decoder* decoder, struct bitstream* bitbuf);
82 enum huffman_error huffman_import_tree_huffman(struct huffman_decoder* decoder, struct bitstream* bitbuf);
83 
84 int huffman_build_tree(struct huffman_decoder* decoder, uint32_t totaldata, uint32_t totalweight);
87 
88 void huffman_build_lookup_table(struct huffman_decoder* decoder);
89 
90 #endif
int huffman_build_tree(struct huffman_decoder *decoder, uint32_t totaldata, uint32_t totalweight)
Definition: libchdr_huffman.c:387
lookup_value * lookup
Definition: huffman.h:62
uint32_t weight
Definition: huffman.h:47
enum huffman_error huffman_import_tree_rle(struct huffman_decoder *decoder, struct bitstream *bitbuf)
Definition: libchdr_huffman.c:180
Definition: huffman.h:29
Definition: huffman.h:26
enum huffman_error huffman_compute_tree_from_histo(struct huffman_decoder *decoder)
Definition: libchdr_huffman.c:324
enum huffman_error huffman_import_tree_huffman(struct huffman_decoder *decoder, struct bitstream *bitbuf)
Definition: libchdr_huffman.c:242
Definition: huffman.h:55
int rleremaining
Definition: huffman.h:61
Definition: huffman.h:32
struct node_t * parent
Definition: huffman.h:45
struct node_t * huffnode
Definition: huffman.h:63
struct huffman_decoder * create_huffman_decoder(int numcodes, int maxbits)
Definition: libchdr_huffman.c:125
uint32_t * datahisto
Definition: huffman.h:64
Definition: huffman.h:30
Definition: bitstream.h:24
Definition: huffman.h:43
uint32_t bits
Definition: huffman.h:48
uint8_t prevdata
Definition: huffman.h:60
uint32_t huffman_decode_one(struct huffman_decoder *decoder, struct bitstream *bitbuf)
Definition: libchdr_huffman.c:161
huffman_error
Definition: huffman.h:24
uint8_t numbits
Definition: huffman.h:49
Definition: huffman.h:28
void huffman_build_lookup_table(struct huffman_decoder *decoder)
Definition: libchdr_huffman.c:539
uint8_t maxbits
Definition: huffman.h:59
Definition: huffman.h:27
enum huffman_error huffman_assign_canonical_codes(struct huffman_decoder *decoder)
Definition: libchdr_huffman.c:498
void delete_huffman_decoder(struct huffman_decoder *decoder)
Definition: libchdr_huffman.c:143
uint16_t lookup_value
Definition: huffman.h:40
unsigned short uint16_t
Definition: stdint.h:125
uint32_t count
Definition: huffman.h:46
unsigned char uint8_t
Definition: stdint.h:124
unsigned int uint32_t
Definition: stdint.h:126
uint32_t numcodes
Definition: huffman.h:58
Definition: huffman.h:31