diff options
author | negativeExponent | 2020-06-05 19:56:44 +0800 |
---|---|---|
committer | negativeExponent | 2020-06-05 19:59:07 +0800 |
commit | 9c659ffe685d5615b15c31cd86814e597cff7488 (patch) | |
tree | 2a4aa579a9c05e22493d02503bc7191ea26aff8a /deps/libchdr/huffman.h | |
parent | 7973b25fe929f92e146a854ecaf4f3cea5b4ffb8 (diff) | |
download | pcsx_rearmed-9c659ffe685d5615b15c31cd86814e597cff7488.tar.gz pcsx_rearmed-9c659ffe685d5615b15c31cd86814e597cff7488.tar.bz2 pcsx_rearmed-9c659ffe685d5615b15c31cd86814e597cff7488.zip |
libchdr: Update to latest upstream
Update libchdr based from latest upstream sources. Fixes some issues as noted.
- Latest upstream commit: https://github.com/rtissera/libchdr/tree/6117d59d00ef8620de4cff4d6ecae46368cae881
- Fix https://github.com/libretro/pcsx_rearmed/issues/301
- Specific commit that fixes above problem: https://github.com/rtissera/libchdr/commit/e1acac6d83b36531e543e39a9e1a363e681083e6
Diffstat (limited to 'deps/libchdr/huffman.h')
-rw-r--r-- | deps/libchdr/huffman.h | 176 |
1 files changed, 89 insertions, 87 deletions
diff --git a/deps/libchdr/huffman.h b/deps/libchdr/huffman.h index 71de399..8bcc45a 100644 --- a/deps/libchdr/huffman.h +++ b/deps/libchdr/huffman.h @@ -1,87 +1,89 @@ -// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
-/***************************************************************************
-
- huffman.h
-
- Static Huffman compression and decompression helpers.
-
-***************************************************************************/
-
-#pragma once
-
-#ifndef __HUFFMAN_H__
-#define __HUFFMAN_H__
-
-#include "bitstream.h"
-
-
-//**************************************************************************
-// CONSTANTS
-//**************************************************************************
-
-enum huffman_error
-{
- HUFFERR_NONE = 0,
- HUFFERR_TOO_MANY_BITS,
- HUFFERR_INVALID_DATA,
- HUFFERR_INPUT_BUFFER_TOO_SMALL,
- HUFFERR_OUTPUT_BUFFER_TOO_SMALL,
- HUFFERR_INTERNAL_INCONSISTENCY,
- HUFFERR_TOO_MANY_CONTEXTS
-};
-
-
-
-//**************************************************************************
-// TYPE DEFINITIONS
-//**************************************************************************
-
-typedef uint16_t lookup_value;
-
-// a node in the huffman tree
-struct node_t
-{
- struct node_t* parent; // pointer to parent node
- uint32_t count; // number of hits on this node
- uint32_t weight; // assigned weight of this node
- uint32_t bits; // bits used to encode the node
- uint8_t numbits; // number of bits needed for this node
-};
-
-// ======================> huffman_context_base
-
-// context class for decoding
-struct huffman_decoder
-{
- // internal state
- uint32_t numcodes; // number of total codes being processed
- uint8_t maxbits; // maximum bits per code
- uint8_t prevdata; // value of the previous data (for delta-RLE encoding)
- int rleremaining; // number of RLE bytes remaining (for delta-RLE encoding)
- lookup_value * lookup; // pointer to the lookup table
- struct node_t * huffnode; // array of nodes
- uint32_t * datahisto; // histogram of data values
-
- // array versions of the info we need
- //node_t* huffnode_array; //[_NumCodes];
- //lookup_value* lookup_array; //[1 << _MaxBits];
-};
-
-// ======================> huffman_decoder
-
-struct huffman_decoder* create_huffman_decoder(int numcodes, int maxbits);
-
-// single item operations
-uint32_t huffman_decode_one(struct huffman_decoder* decoder, struct bitstream* bitbuf);
-
-enum huffman_error huffman_import_tree_rle(struct huffman_decoder* decoder, struct bitstream* bitbuf);
-enum huffman_error huffman_import_tree_huffman(struct huffman_decoder* decoder, struct bitstream* bitbuf);
-
-int huffman_build_tree(struct huffman_decoder* decoder, uint32_t totaldata, uint32_t totalweight);
-enum huffman_error huffman_assign_canonical_codes(struct huffman_decoder* decoder);
-enum huffman_error huffman_compute_tree_from_histo(struct huffman_decoder* decoder);
-
-void huffman_build_lookup_table(struct huffman_decoder* decoder);
-
-#endif
+/* license:BSD-3-Clause + * copyright-holders:Aaron Giles + *************************************************************************** + + huffman.h + + Static Huffman compression and decompression helpers. + +***************************************************************************/ + +#pragma once + +#ifndef __HUFFMAN_H__ +#define __HUFFMAN_H__ + +#include "bitstream.h" + + +/*************************************************************************** + * CONSTANTS + *************************************************************************** + */ + +enum huffman_error +{ + HUFFERR_NONE = 0, + HUFFERR_TOO_MANY_BITS, + HUFFERR_INVALID_DATA, + HUFFERR_INPUT_BUFFER_TOO_SMALL, + HUFFERR_OUTPUT_BUFFER_TOO_SMALL, + HUFFERR_INTERNAL_INCONSISTENCY, + HUFFERR_TOO_MANY_CONTEXTS +}; + +/*************************************************************************** + * TYPE DEFINITIONS + *************************************************************************** + */ + +typedef uint16_t lookup_value; + +/* a node in the huffman tree */ +struct node_t +{ + struct node_t* parent; /* pointer to parent node */ + uint32_t count; /* number of hits on this node */ + uint32_t weight; /* assigned weight of this node */ + uint32_t bits; /* bits used to encode the node */ + uint8_t numbits; /* number of bits needed for this node */ +}; + +/* ======================> huffman_context_base */ + +/* context class for decoding */ +struct huffman_decoder +{ + /* internal state */ + uint32_t numcodes; /* number of total codes being processed */ + uint8_t maxbits; /* maximum bits per code */ + uint8_t prevdata; /* value of the previous data (for delta-RLE encoding) */ + int rleremaining; /* number of RLE bytes remaining (for delta-RLE encoding) */ + lookup_value * lookup; /* pointer to the lookup table */ + struct node_t * huffnode; /* array of nodes */ + uint32_t * datahisto; /* histogram of data values */ + + /* array versions of the info we need */ +#if 0 + node_t* huffnode_array; /* [_NumCodes]; */ + lookup_value* lookup_array; /* [1 << _MaxBits]; */ +#endif +}; + +/* ======================> huffman_decoder */ + +struct huffman_decoder* create_huffman_decoder(int numcodes, int maxbits); + +/* single item operations */ +uint32_t huffman_decode_one(struct huffman_decoder* decoder, struct bitstream* bitbuf); + +enum huffman_error huffman_import_tree_rle(struct huffman_decoder* decoder, struct bitstream* bitbuf); +enum huffman_error huffman_import_tree_huffman(struct huffman_decoder* decoder, struct bitstream* bitbuf); + +int huffman_build_tree(struct huffman_decoder* decoder, uint32_t totaldata, uint32_t totalweight); +enum huffman_error huffman_assign_canonical_codes(struct huffman_decoder* decoder); +enum huffman_error huffman_compute_tree_from_histo(struct huffman_decoder* decoder); + +void huffman_build_lookup_table(struct huffman_decoder* decoder); + +#endif |