Blame jbig2_huffman.h

Packit 3f21c4
/* Copyright (C) 2001-2012 Artifex Software, Inc.
Packit 3f21c4
   All Rights Reserved.
Packit 3f21c4
Packit 3f21c4
   This software is provided AS-IS with no warranty, either express or
Packit 3f21c4
   implied.
Packit 3f21c4
Packit 3f21c4
   This software is distributed under license and may not be copied,
Packit 3f21c4
   modified or distributed except as expressly authorized under the terms
Packit 3f21c4
   of the license contained in the file LICENSE in this distribution.
Packit 3f21c4
Packit 3f21c4
   Refer to licensing information at http://www.artifex.com or contact
Packit 3f21c4
   Artifex Software, Inc.,  7 Mt. Lassen Drive - Suite A-134, San Rafael,
Packit 3f21c4
   CA  94903, U.S.A., +1(415)492-9861, for further information.
Packit 3f21c4
*/
Packit 3f21c4
Packit 3f21c4
/*
Packit 3f21c4
    jbig2dec
Packit 3f21c4
*/
Packit 3f21c4
Packit 3f21c4
#ifndef JBIG2_HUFFMAN_H
Packit 3f21c4
#define JBIG2_HUFFMAN_H
Packit 3f21c4
Packit 3f21c4
/* Huffman coder interface */
Packit 3f21c4
Packit 3f21c4
typedef struct _Jbig2HuffmanEntry Jbig2HuffmanEntry;
Packit 3f21c4
typedef struct _Jbig2HuffmanState Jbig2HuffmanState;
Packit 3f21c4
typedef struct _Jbig2HuffmanTable Jbig2HuffmanTable;
Packit 3f21c4
typedef struct _Jbig2HuffmanParams Jbig2HuffmanParams;
Packit 3f21c4
Packit 3f21c4
struct _Jbig2HuffmanEntry {
Packit 3f21c4
    union {
Packit 3f21c4
        int32_t RANGELOW;
Packit 3f21c4
        Jbig2HuffmanTable *ext_table;
Packit 3f21c4
    } u;
Packit 3f21c4
    byte PREFLEN;
Packit 3f21c4
    byte RANGELEN;
Packit 3f21c4
    byte flags;
Packit 3f21c4
};
Packit 3f21c4
Packit 3f21c4
struct _Jbig2HuffmanTable {
Packit 3f21c4
    int log_table_size;
Packit 3f21c4
    Jbig2HuffmanEntry *entries;
Packit 3f21c4
};
Packit 3f21c4
Packit 3f21c4
typedef struct _Jbig2HuffmanLine Jbig2HuffmanLine;
Packit 3f21c4
Packit 3f21c4
struct _Jbig2HuffmanLine {
Packit 3f21c4
    int PREFLEN;
Packit 3f21c4
    int RANGELEN;
Packit 3f21c4
    int RANGELOW;
Packit 3f21c4
};
Packit 3f21c4
Packit 3f21c4
struct _Jbig2HuffmanParams {
Packit 3f21c4
    bool HTOOB;
Packit 3f21c4
    int n_lines;
Packit 3f21c4
    const Jbig2HuffmanLine *lines;
Packit 3f21c4
};
Packit 3f21c4
Packit 3f21c4
Jbig2HuffmanState *jbig2_huffman_new(Jbig2Ctx *ctx, Jbig2WordStream *ws);
Packit 3f21c4
Packit 3f21c4
void jbig2_huffman_free(Jbig2Ctx *ctx, Jbig2HuffmanState *hs);
Packit 3f21c4
Packit 3f21c4
void jbig2_huffman_skip(Jbig2HuffmanState *hs);
Packit 3f21c4
Packit 3f21c4
void jbig2_huffman_advance(Jbig2HuffmanState *hs, int offset);
Packit 3f21c4
Packit 3f21c4
uint32_t jbig2_huffman_offset(Jbig2HuffmanState *hs);
Packit 3f21c4
Packit 3f21c4
int32_t jbig2_huffman_get(Jbig2HuffmanState *hs, const Jbig2HuffmanTable *table, bool *oob);
Packit 3f21c4
Packit 3f21c4
int32_t jbig2_huffman_get_bits(Jbig2HuffmanState *hs, const int bits, int *err);
Packit 3f21c4
Packit 3f21c4
#ifdef JBIG2_DEBUG
Packit 3f21c4
void jbig2_dump_huffman_state(Jbig2HuffmanState *hs);
Packit 3f21c4
void jbig2_dump_huffman_binary(Jbig2HuffmanState *hs);
Packit 3f21c4
#endif
Packit 3f21c4
Packit 3f21c4
Jbig2HuffmanTable *jbig2_build_huffman_table(Jbig2Ctx *ctx, const Jbig2HuffmanParams *params);
Packit 3f21c4
Packit 3f21c4
void jbig2_release_huffman_table(Jbig2Ctx *ctx, Jbig2HuffmanTable *table);
Packit 3f21c4
Packit 3f21c4
/* standard Huffman templates defined by the specification */
Packit 3f21c4
extern const Jbig2HuffmanParams jbig2_huffman_params_A; /* Table B.1  */
Packit 3f21c4
extern const Jbig2HuffmanParams jbig2_huffman_params_B; /* Table B.2  */
Packit 3f21c4
extern const Jbig2HuffmanParams jbig2_huffman_params_C; /* Table B.3  */
Packit 3f21c4
extern const Jbig2HuffmanParams jbig2_huffman_params_D; /* Table B.4  */
Packit 3f21c4
extern const Jbig2HuffmanParams jbig2_huffman_params_E; /* Table B.5  */
Packit 3f21c4
extern const Jbig2HuffmanParams jbig2_huffman_params_F; /* Table B.6  */
Packit 3f21c4
extern const Jbig2HuffmanParams jbig2_huffman_params_G; /* Table B.7  */
Packit 3f21c4
extern const Jbig2HuffmanParams jbig2_huffman_params_H; /* Table B.8  */
Packit 3f21c4
extern const Jbig2HuffmanParams jbig2_huffman_params_I; /* Table B.9  */
Packit 3f21c4
extern const Jbig2HuffmanParams jbig2_huffman_params_J; /* Table B.10 */
Packit 3f21c4
extern const Jbig2HuffmanParams jbig2_huffman_params_K; /* Table B.11 */
Packit 3f21c4
extern const Jbig2HuffmanParams jbig2_huffman_params_L; /* Table B.12 */
Packit 3f21c4
extern const Jbig2HuffmanParams jbig2_huffman_params_M; /* Table B.13 */
Packit 3f21c4
extern const Jbig2HuffmanParams jbig2_huffman_params_N; /* Table B.14 */
Packit 3f21c4
extern const Jbig2HuffmanParams jbig2_huffman_params_O; /* Table B.15 */
Packit 3f21c4
Packit 3f21c4
/* Routines to handle "code table segment (53)" */
Packit 3f21c4
Packit 3f21c4
/* Parse a code table segment, store Jbig2HuffmanParams in segment->result */
Packit 3f21c4
int jbig2_table(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte *segment_data);
Packit 3f21c4
Packit 3f21c4
/* free Jbig2HuffmanParams allocated by jbig2_huffman_table() */
Packit 3f21c4
void jbig2_table_free(Jbig2Ctx *ctx, Jbig2HuffmanParams *params);
Packit 3f21c4
Packit 3f21c4
/* find a user supplied table used by 'segment' and by 'index' */
Packit 3f21c4
const Jbig2HuffmanParams *jbig2_find_table(Jbig2Ctx *ctx, Jbig2Segment *segment, int index);
Packit 3f21c4
Packit 3f21c4
#endif /* JBIG2_HUFFMAN_H */