Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.     jbig2dec
  3.  
  4.     Copyright (C) 2001-2005 Artifex Software, Inc.
  5.  
  6.     This software is distributed under license and may not
  7.     be copied, modified or distributed except as expressly
  8.     authorized under the terms of the license contained in
  9.     the file LICENSE in this distribution.
  10.  
  11.     For further licensing information refer to http://artifex.com/ or
  12.     contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
  13.     San Rafael, CA  94903, U.S.A., +1(415)492-9861.
  14. */
  15.  
  16. #ifndef JBIG2_HUFFMAN_H
  17. #define JBIG2_HUFFMAN_H
  18.  
  19. /* Huffman coder interface */
  20.  
  21. typedef struct _Jbig2HuffmanEntry Jbig2HuffmanEntry;
  22. typedef struct _Jbig2HuffmanState Jbig2HuffmanState;
  23. typedef struct _Jbig2HuffmanTable Jbig2HuffmanTable;
  24. typedef struct _Jbig2HuffmanParams Jbig2HuffmanParams;
  25.  
  26. struct _Jbig2HuffmanEntry {
  27.   union {
  28.     int32_t RANGELOW;
  29.     Jbig2HuffmanTable *ext_table;
  30.   } u;
  31.   byte PREFLEN;
  32.   byte RANGELEN;
  33.   byte flags;
  34. };
  35.  
  36. struct _Jbig2HuffmanTable {
  37.   int log_table_size;
  38.   Jbig2HuffmanEntry *entries;
  39. };
  40.  
  41. typedef struct _Jbig2HuffmanLine Jbig2HuffmanLine;
  42.  
  43. struct _Jbig2HuffmanLine {
  44.   int PREFLEN;
  45.   int RANGELEN;
  46.   int RANGELOW;
  47. };
  48.  
  49. struct _Jbig2HuffmanParams {
  50.   bool HTOOB;
  51.   int n_lines;
  52.   const Jbig2HuffmanLine *lines;
  53. };
  54.  
  55. Jbig2HuffmanState *
  56. jbig2_huffman_new (Jbig2Ctx *ctx, Jbig2WordStream *ws);
  57.  
  58. void
  59. jbig2_huffman_free (Jbig2Ctx *ctx, Jbig2HuffmanState *hs);
  60.  
  61. void
  62. jbig2_huffman_skip(Jbig2HuffmanState *hs);
  63.  
  64. void jbig2_huffman_advance(Jbig2HuffmanState *hs, int offset);
  65.  
  66. int
  67. jbig2_huffman_offset(Jbig2HuffmanState *hs);
  68.  
  69. int32_t
  70. jbig2_huffman_get (Jbig2HuffmanState *hs,
  71.                    const Jbig2HuffmanTable *table, bool *oob);
  72.  
  73. int32_t
  74. jbig2_huffman_get_bits (Jbig2HuffmanState *hs, const int bits);
  75.  
  76. #ifdef JBIG2_DEBUG
  77. void jbig2_dump_huffman_state(Jbig2HuffmanState *hs);
  78. void jbig2_dump_huffman_binary(Jbig2HuffmanState *hs);
  79. #endif
  80.  
  81. Jbig2HuffmanTable *
  82. jbig2_build_huffman_table (Jbig2Ctx *ctx, const Jbig2HuffmanParams *params);
  83.  
  84. void
  85. jbig2_release_huffman_table (Jbig2Ctx *ctx, Jbig2HuffmanTable *table);
  86.  
  87. /* standard Huffman templates defined by the specification */
  88. extern const Jbig2HuffmanParams jbig2_huffman_params_A; /* Table B.1  */
  89. extern const Jbig2HuffmanParams jbig2_huffman_params_B; /* Table B.2  */
  90. extern const Jbig2HuffmanParams jbig2_huffman_params_C; /* Table B.3  */
  91. extern const Jbig2HuffmanParams jbig2_huffman_params_D; /* Table B.4  */
  92. extern const Jbig2HuffmanParams jbig2_huffman_params_E; /* Table B.5  */
  93. extern const Jbig2HuffmanParams jbig2_huffman_params_F; /* Table B.6  */
  94. extern const Jbig2HuffmanParams jbig2_huffman_params_G; /* Table B.7  */
  95. extern const Jbig2HuffmanParams jbig2_huffman_params_H; /* Table B.8  */
  96. extern const Jbig2HuffmanParams jbig2_huffman_params_I; /* Table B.9  */
  97. extern const Jbig2HuffmanParams jbig2_huffman_params_J; /* Table B.10 */
  98. extern const Jbig2HuffmanParams jbig2_huffman_params_K; /* Table B.11 */
  99. extern const Jbig2HuffmanParams jbig2_huffman_params_L; /* Table B.12 */
  100. extern const Jbig2HuffmanParams jbig2_huffman_params_M; /* Table B.13 */
  101. extern const Jbig2HuffmanParams jbig2_huffman_params_N; /* Table B.14 */
  102. extern const Jbig2HuffmanParams jbig2_huffman_params_O; /* Table B.15 */
  103.  
  104.  
  105. #endif /* JBIG2_HUFFMAN_H */
  106.