Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/thirdparty/jbig2dec/jbig2_huffman.h @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1:1d09e1dec1d9 | 2:b50eed0cc0ef |
|---|---|
| 1 /* Copyright (C) 2001-2023 Artifex Software, Inc. | |
| 2 All Rights Reserved. | |
| 3 | |
| 4 This software is provided AS-IS with no warranty, either express or | |
| 5 implied. | |
| 6 | |
| 7 This software is distributed under license and may not be copied, | |
| 8 modified or distributed except as expressly authorized under the terms | |
| 9 of the license contained in the file LICENSE in this distribution. | |
| 10 | |
| 11 Refer to licensing information at http://www.artifex.com or contact | |
| 12 Artifex Software, Inc., 39 Mesa Street, Suite 108A, San Francisco, | |
| 13 CA 94129, USA, for further information. | |
| 14 */ | |
| 15 | |
| 16 /* | |
| 17 jbig2dec | |
| 18 */ | |
| 19 | |
| 20 #ifndef _JBIG2_HUFFMAN_H | |
| 21 #define _JBIG2_HUFFMAN_H | |
| 22 | |
| 23 /* Huffman coder interface */ | |
| 24 | |
| 25 typedef struct _Jbig2HuffmanEntry Jbig2HuffmanEntry; | |
| 26 typedef struct _Jbig2HuffmanState Jbig2HuffmanState; | |
| 27 typedef struct _Jbig2HuffmanTable Jbig2HuffmanTable; | |
| 28 typedef struct _Jbig2HuffmanParams Jbig2HuffmanParams; | |
| 29 | |
| 30 struct _Jbig2HuffmanEntry { | |
| 31 union { | |
| 32 int32_t RANGELOW; | |
| 33 Jbig2HuffmanTable *ext_table; | |
| 34 } u; | |
| 35 byte PREFLEN; | |
| 36 byte RANGELEN; | |
| 37 byte flags; | |
| 38 }; | |
| 39 | |
| 40 struct _Jbig2HuffmanTable { | |
| 41 int log_table_size; | |
| 42 Jbig2HuffmanEntry *entries; | |
| 43 }; | |
| 44 | |
| 45 typedef struct _Jbig2HuffmanLine Jbig2HuffmanLine; | |
| 46 | |
| 47 struct _Jbig2HuffmanLine { | |
| 48 int PREFLEN; | |
| 49 int RANGELEN; | |
| 50 int RANGELOW; | |
| 51 }; | |
| 52 | |
| 53 struct _Jbig2HuffmanParams { | |
| 54 bool HTOOB; | |
| 55 int n_lines; | |
| 56 const Jbig2HuffmanLine *lines; | |
| 57 }; | |
| 58 | |
| 59 Jbig2HuffmanState *jbig2_huffman_new(Jbig2Ctx *ctx, Jbig2WordStream *ws); | |
| 60 | |
| 61 void jbig2_huffman_free(Jbig2Ctx *ctx, Jbig2HuffmanState *hs); | |
| 62 | |
| 63 int jbig2_huffman_skip(Jbig2HuffmanState *hs); | |
| 64 | |
| 65 int jbig2_huffman_advance(Jbig2HuffmanState *hs, size_t advance); | |
| 66 | |
| 67 uint32_t jbig2_huffman_offset(Jbig2HuffmanState *hs); | |
| 68 | |
| 69 int32_t jbig2_huffman_get(Jbig2HuffmanState *hs, const Jbig2HuffmanTable *table, bool *oob); | |
| 70 | |
| 71 int32_t jbig2_huffman_get_bits(Jbig2HuffmanState *hs, const int bits, int *err); | |
| 72 | |
| 73 #ifdef JBIG2_DEBUG | |
| 74 void jbig2_dump_huffman_state(Jbig2HuffmanState *hs); | |
| 75 void jbig2_dump_huffman_binary(Jbig2HuffmanState *hs); | |
| 76 #endif | |
| 77 | |
| 78 Jbig2HuffmanTable *jbig2_build_huffman_table(Jbig2Ctx *ctx, const Jbig2HuffmanParams *params); | |
| 79 | |
| 80 void jbig2_release_huffman_table(Jbig2Ctx *ctx, Jbig2HuffmanTable *table); | |
| 81 | |
| 82 /* standard Huffman templates defined by the specification */ | |
| 83 extern const Jbig2HuffmanParams jbig2_huffman_params_A; /* Table B.1 */ | |
| 84 extern const Jbig2HuffmanParams jbig2_huffman_params_B; /* Table B.2 */ | |
| 85 extern const Jbig2HuffmanParams jbig2_huffman_params_C; /* Table B.3 */ | |
| 86 extern const Jbig2HuffmanParams jbig2_huffman_params_D; /* Table B.4 */ | |
| 87 extern const Jbig2HuffmanParams jbig2_huffman_params_E; /* Table B.5 */ | |
| 88 extern const Jbig2HuffmanParams jbig2_huffman_params_F; /* Table B.6 */ | |
| 89 extern const Jbig2HuffmanParams jbig2_huffman_params_G; /* Table B.7 */ | |
| 90 extern const Jbig2HuffmanParams jbig2_huffman_params_H; /* Table B.8 */ | |
| 91 extern const Jbig2HuffmanParams jbig2_huffman_params_I; /* Table B.9 */ | |
| 92 extern const Jbig2HuffmanParams jbig2_huffman_params_J; /* Table B.10 */ | |
| 93 extern const Jbig2HuffmanParams jbig2_huffman_params_K; /* Table B.11 */ | |
| 94 extern const Jbig2HuffmanParams jbig2_huffman_params_L; /* Table B.12 */ | |
| 95 extern const Jbig2HuffmanParams jbig2_huffman_params_M; /* Table B.13 */ | |
| 96 extern const Jbig2HuffmanParams jbig2_huffman_params_N; /* Table B.14 */ | |
| 97 extern const Jbig2HuffmanParams jbig2_huffman_params_O; /* Table B.15 */ | |
| 98 | |
| 99 /* Routines to handle "code table segment (53)" */ | |
| 100 | |
| 101 /* Parse a code table segment, store Jbig2HuffmanParams in segment->result */ | |
| 102 int jbig2_table(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data); | |
| 103 | |
| 104 /* free Jbig2HuffmanParams allocated by jbig2_huffman_table() */ | |
| 105 void jbig2_table_free(Jbig2Ctx *ctx, Jbig2HuffmanParams *params); | |
| 106 | |
| 107 /* find a user supplied table used by 'segment' and by 'index' */ | |
| 108 const Jbig2HuffmanParams *jbig2_find_table(Jbig2Ctx *ctx, Jbig2Segment *segment, int index); | |
| 109 | |
| 110 #endif /* _JBIG2_HUFFMAN_H */ |
