diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mupdf-source/thirdparty/jbig2dec/jbig2_huffman.h	Mon Sep 15 11:43:07 2025 +0200
@@ -0,0 +1,110 @@
+/* Copyright (C) 2001-2023 Artifex Software, Inc.
+   All Rights Reserved.
+
+   This software is provided AS-IS with no warranty, either express or
+   implied.
+
+   This software is distributed under license and may not be copied,
+   modified or distributed except as expressly authorized under the terms
+   of the license contained in the file LICENSE in this distribution.
+
+   Refer to licensing information at http://www.artifex.com or contact
+   Artifex Software, Inc.,  39 Mesa Street, Suite 108A, San Francisco,
+   CA 94129, USA, for further information.
+*/
+
+/*
+    jbig2dec
+*/
+
+#ifndef _JBIG2_HUFFMAN_H
+#define _JBIG2_HUFFMAN_H
+
+/* Huffman coder interface */
+
+typedef struct _Jbig2HuffmanEntry Jbig2HuffmanEntry;
+typedef struct _Jbig2HuffmanState Jbig2HuffmanState;
+typedef struct _Jbig2HuffmanTable Jbig2HuffmanTable;
+typedef struct _Jbig2HuffmanParams Jbig2HuffmanParams;
+
+struct _Jbig2HuffmanEntry {
+    union {
+        int32_t RANGELOW;
+        Jbig2HuffmanTable *ext_table;
+    } u;
+    byte PREFLEN;
+    byte RANGELEN;
+    byte flags;
+};
+
+struct _Jbig2HuffmanTable {
+    int log_table_size;
+    Jbig2HuffmanEntry *entries;
+};
+
+typedef struct _Jbig2HuffmanLine Jbig2HuffmanLine;
+
+struct _Jbig2HuffmanLine {
+    int PREFLEN;
+    int RANGELEN;
+    int RANGELOW;
+};
+
+struct _Jbig2HuffmanParams {
+    bool HTOOB;
+    int n_lines;
+    const Jbig2HuffmanLine *lines;
+};
+
+Jbig2HuffmanState *jbig2_huffman_new(Jbig2Ctx *ctx, Jbig2WordStream *ws);
+
+void jbig2_huffman_free(Jbig2Ctx *ctx, Jbig2HuffmanState *hs);
+
+int jbig2_huffman_skip(Jbig2HuffmanState *hs);
+
+int jbig2_huffman_advance(Jbig2HuffmanState *hs, size_t advance);
+
+uint32_t jbig2_huffman_offset(Jbig2HuffmanState *hs);
+
+int32_t jbig2_huffman_get(Jbig2HuffmanState *hs, const Jbig2HuffmanTable *table, bool *oob);
+
+int32_t jbig2_huffman_get_bits(Jbig2HuffmanState *hs, const int bits, int *err);
+
+#ifdef JBIG2_DEBUG
+void jbig2_dump_huffman_state(Jbig2HuffmanState *hs);
+void jbig2_dump_huffman_binary(Jbig2HuffmanState *hs);
+#endif
+
+Jbig2HuffmanTable *jbig2_build_huffman_table(Jbig2Ctx *ctx, const Jbig2HuffmanParams *params);
+
+void jbig2_release_huffman_table(Jbig2Ctx *ctx, Jbig2HuffmanTable *table);
+
+/* standard Huffman templates defined by the specification */
+extern const Jbig2HuffmanParams jbig2_huffman_params_A; /* Table B.1  */
+extern const Jbig2HuffmanParams jbig2_huffman_params_B; /* Table B.2  */
+extern const Jbig2HuffmanParams jbig2_huffman_params_C; /* Table B.3  */
+extern const Jbig2HuffmanParams jbig2_huffman_params_D; /* Table B.4  */
+extern const Jbig2HuffmanParams jbig2_huffman_params_E; /* Table B.5  */
+extern const Jbig2HuffmanParams jbig2_huffman_params_F; /* Table B.6  */
+extern const Jbig2HuffmanParams jbig2_huffman_params_G; /* Table B.7  */
+extern const Jbig2HuffmanParams jbig2_huffman_params_H; /* Table B.8  */
+extern const Jbig2HuffmanParams jbig2_huffman_params_I; /* Table B.9  */
+extern const Jbig2HuffmanParams jbig2_huffman_params_J; /* Table B.10 */
+extern const Jbig2HuffmanParams jbig2_huffman_params_K; /* Table B.11 */
+extern const Jbig2HuffmanParams jbig2_huffman_params_L; /* Table B.12 */
+extern const Jbig2HuffmanParams jbig2_huffman_params_M; /* Table B.13 */
+extern const Jbig2HuffmanParams jbig2_huffman_params_N; /* Table B.14 */
+extern const Jbig2HuffmanParams jbig2_huffman_params_O; /* Table B.15 */
+
+/* Routines to handle "code table segment (53)" */
+
+/* Parse a code table segment, store Jbig2HuffmanParams in segment->result */
+int jbig2_table(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data);
+
+/* free Jbig2HuffmanParams allocated by jbig2_huffman_table() */
+void jbig2_table_free(Jbig2Ctx *ctx, Jbig2HuffmanParams *params);
+
+/* find a user supplied table used by 'segment' and by 'index' */
+const Jbig2HuffmanParams *jbig2_find_table(Jbig2Ctx *ctx, Jbig2Segment *segment, int index);
+
+#endif /* _JBIG2_HUFFMAN_H */