summaryrefslogtreecommitdiffstats
path: root/kernel/kls_jbig/libjbig/jbig.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kls_jbig/libjbig/jbig.h')
-rw-r--r--kernel/kls_jbig/libjbig/jbig.h270
1 files changed, 270 insertions, 0 deletions
diff --git a/kernel/kls_jbig/libjbig/jbig.h b/kernel/kls_jbig/libjbig/jbig.h
new file mode 100644
index 0000000..1129ac0
--- /dev/null
+++ b/kernel/kls_jbig/libjbig/jbig.h
@@ -0,0 +1,270 @@
+/*
+ * Header file for the portable free JBIG compression library
+ *
+ * Markus Kuhn -- http://www.cl.cam.ac.uk/~mgk25/
+ *
+ * $Id: jbig.h,v 1.17 2004-06-11 15:18:21+01 mgk25 Exp $
+ */
+
+#ifndef JBG_H
+#define JBG_H
+
+#include <stddef.h>
+
+/*
+ * JBIG-KIT version number
+ */
+
+#define JBG_VERSION "1.6"
+
+/*
+ * Buffer block for SDEs which are temporarily stored by encoder
+ */
+
+#define JBG_BUFSIZE 4000
+
+struct jbg_buf {
+ unsigned char d[JBG_BUFSIZE]; /* one block of a buffer list */
+ int len; /* length of the data in this block */
+ struct jbg_buf *next; /* pointer to next block */
+ struct jbg_buf *previous; /* pointer to previous block *
+ * (unused in freelist) */
+ struct jbg_buf *last; /* only used in list head: final block of list */
+ struct jbg_buf **free_list; /* pointer to pointer to head of free list */
+};
+
+/*
+ * Maximum number of ATMOVEs per stripe that decoder can handle
+ */
+
+#define JBG_ATMOVES_MAX 64
+
+/*
+ * Option and order flags
+ */
+
+#define JBG_HITOLO 0x08
+#define JBG_SEQ 0x04
+#define JBG_ILEAVE 0x02
+#define JBG_SMID 0x01
+
+#define JBG_LRLTWO 0x40
+#define JBG_VLENGTH 0x20
+#define JBG_TPDON 0x10
+#define JBG_TPBON 0x08
+#define JBG_DPON 0x04
+#define JBG_DPPRIV 0x02
+#define JBG_DPLAST 0x01
+
+#define JBG_DELAY_AT 0x100 /* delay ATMOVE until the first line of the next
+ * stripe. Option available for compatibility
+ * with conformance test example in clause 7.2.*/
+
+
+/*
+ * Possible error code return values
+ */
+
+#define JBG_EOK 0
+#define JBG_EOK_INTR 1
+#define JBG_EAGAIN 2
+#define JBG_ENOMEM 3
+#define JBG_EABORT 4
+#define JBG_EMARKER 5
+#define JBG_ENOCONT 6
+#define JBG_EINVAL 7
+#define JBG_EIMPL 8
+
+/*
+ * Language code for error message strings (based on ISO 639 2-letter
+ * standard language name abbreviations).
+ */
+
+#define JBG_EN 0 /* English */
+#define JBG_DE_8859_1 1 /* German in ISO Latin 1 character set */
+#define JBG_DE_UTF_8 2 /* German in Unicode UTF-8 encoding */
+
+/*
+ * Status description of an arithmetic encoder
+ */
+
+struct jbg_arenc_state {
+ unsigned char st[4096]; /* probability status for contexts, MSB = MPS */
+ unsigned long c; /* C register, base of coding intervall, *
+ * layout as in Table 23 */
+ unsigned long a; /* A register, normalized size of coding intervall */
+ long sc; /* counter for buffered 0xff values which might overflow */
+ int ct; /* bit shift counter, determines when next byte will be written */
+ int buffer; /* buffer for most recent output byte != 0xff */
+ void (*byte_out)(int, void *); /* function which receives all PSCD bytes */
+ void *file; /* parameter passed to byte_out */
+};
+
+
+/*
+ * Status description of an arithmetic decoder
+ */
+
+enum jbg_ardec_result {
+ JBG_OK, /* symbol has been successfully decoded */
+ JBG_READY, /* no more bytes of this PSCD required, marker *
+ * encountered, probably more symbols available */
+ JBG_MORE, /* more PSCD data bytes required to decode a symbol */
+ JBG_MARKER /* more PSCD data bytes required, ignored final 0xff byte */
+};
+
+struct jbg_ardec_state {
+ unsigned char st[4096]; /* probability status for contexts, MSB = MPS */
+ unsigned long c; /* C register, base of coding intervall, *
+ * layout as in Table 25 */
+ unsigned long a; /* A register, normalized size of coding intervall */
+ int ct; /* bit shift counter, determines when next byte will be read */
+ unsigned char *pscd_ptr; /* pointer to next PSCD data byte */
+ unsigned char *pscd_end; /* pointer to byte after PSCD */
+ enum jbg_ardec_result result; /* result of previous decode call */
+ int startup; /* controls initial fill of s->c */
+};
+
+/*
+ * Status of a JBIG encoder
+ */
+
+struct jbg_enc_state {
+ int d; /* resolution layer of the input image */
+ unsigned long xd, yd; /* size of the input image (resolution layer d) */
+ unsigned long yd1; /* BIH announced height of image, use yd1 != yd to
+ emulate T.85-style NEWLEN height updates for tests */
+ int planes; /* number of different bitmap planes */
+ int dl; /* lowest resolution layer in the next BIE */
+ int dh; /* highest resolution layer in the next BIE */
+ unsigned long l0; /* number of lines per stripe at lowest *
+ * resolution layer 0 */
+ unsigned long stripes; /* number of stripes required (determ. by l0) */
+ unsigned char **lhp[2]; /* pointers to lower/higher resolution images */
+ int *highres; /* index [plane] of highres image in lhp[] */
+ int order; /* SDE ordering parameters */
+ int options; /* encoding parameters */
+ unsigned mx, my; /* maximum ATMOVE window size */
+ int *tx; /* array [plane] with x-offset of adaptive template pixel */
+ char *dppriv; /* optional private deterministic prediction table */
+ char *res_tab; /* table for the resolution reduction algorithm */
+ struct jbg_buf ****sde; /* array [stripe][layer][plane] pointers to *
+ * buffers for stored SDEs */
+ struct jbg_arenc_state *s; /* array [planes] for arithm. encoder status */
+ struct jbg_buf *free_list; /* list of currently unused SDE block buffers */
+ void (*data_out)(unsigned char *start, size_t len, void *file);
+ /* data write callback */
+ void *file; /* parameter passed to data_out() */
+ char *tp; /* buffer for temp. values used by diff. typical prediction */
+};
+
+
+/*
+ * Status of a JBIG decoder
+ */
+
+struct jbg_dec_state {
+ /* data from BIH */
+ int d; /* resolution layer of the full image */
+ int dl; /* first resolution layer in this BIE */
+ unsigned long xd, yd; /* size of the full image (resolution layer d) */
+ int planes; /* number of different bitmap planes */
+ unsigned long l0; /* number of lines per stripe at lowest *
+ * resolution layer 0 */
+ unsigned long stripes; /* number of stripes required (determ. by l0) */
+ int order; /* SDE ordering parameters */
+ int options; /* encoding parameters */
+ int mx, my; /* maximum ATMOVE window size */
+ char *dppriv; /* optional private deterministic prediction table */
+
+ /* loop variables */
+ unsigned long ii[3]; /* current stripe, layer, plane (outer loop first) */
+
+ /*
+ * Pointers to array [planes] of lower/higher resolution images.
+ * lhp[d & 1] contains image of layer d.
+ */
+ unsigned char **lhp[2];
+
+ /* status information */
+ int **tx, **ty; /* array [plane][layer-dl] with x,y-offset of AT pixel */
+ struct jbg_ardec_state **s; /* array [plane][layer-dl] for arithmetic *
+ * decoder status */
+ int **reset; /* array [plane][layer-dl] remembers if previous stripe *
+ * in that plane/resolution ended with SDRST. */
+ unsigned long bie_len; /* number of bytes read so far */
+ unsigned char buffer[20]; /* used to store BIH or marker segments fragm. */
+ int buf_len; /* number of bytes in buffer */
+ unsigned long comment_skip; /* remaining bytes of a COMMENT segment */
+ unsigned long x; /* x position of next pixel in current SDE */
+ unsigned long i; /* line in current SDE (first line of each stripe is 0) */
+ int at_moves; /* number of AT moves in the current stripe */
+ unsigned long at_line[JBG_ATMOVES_MAX]; /* lines at which an *
+ * AT move will happen */
+ int at_tx[JBG_ATMOVES_MAX], at_ty[JBG_ATMOVES_MAX]; /* ATMOVE offsets in *
+ * current stripe */
+ unsigned long line_h1, line_h2, line_h3; /* variables of decode_pscd */
+ unsigned long line_l1, line_l2, line_l3;
+ int pseudo; /* flag for TPBON/TPDON: next pixel is pseudo pixel */
+ int **lntp; /* flag [plane][layer-dl] for TP: line is not typical */
+
+ unsigned long xmax, ymax; /* if possible abort before image gets *
+ * larger than this size */
+ int dmax; /* abort after this layer */
+};
+
+
+/* some macros (too trivial for a function) */
+
+#define jbg_dec_getplanes(s) ((s)->planes)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* function prototypes */
+
+void jbg_enc_init(struct jbg_enc_state *s, unsigned long x, unsigned long y,
+ int planes, unsigned char **p,
+ void (*data_out)(unsigned char *start, size_t len,
+ void *file),
+ void *file);
+int jbg_enc_lrlmax(struct jbg_enc_state *s, unsigned long mwidth,
+ unsigned long mheight);
+void jbg_enc_layers(struct jbg_enc_state *s, int d);
+int jbg_enc_lrange(struct jbg_enc_state *s, int dl, int dh);
+void jbg_enc_options(struct jbg_enc_state *s, int order, int options,
+ unsigned long l0, int mx, int my);
+void jbg_enc_out(struct jbg_enc_state *s);
+void jbg_enc_free(struct jbg_enc_state *s);
+
+void jbg_dec_init(struct jbg_dec_state *s);
+void jbg_dec_maxsize(struct jbg_dec_state *s, unsigned long xmax,
+ unsigned long ymax);
+int jbg_dec_in(struct jbg_dec_state *s, unsigned char *data, size_t len,
+ size_t *cnt);
+long jbg_dec_getwidth(const struct jbg_dec_state *s);
+long jbg_dec_getheight(const struct jbg_dec_state *s);
+unsigned char *jbg_dec_getimage(const struct jbg_dec_state *s, int plane);
+long jbg_dec_getsize(const struct jbg_dec_state *s);
+void jbg_dec_merge_planes(const struct jbg_dec_state *s, int use_graycode,
+ void (*data_out)(unsigned char *start, size_t len,
+ void *file), void *file);
+long jbg_dec_getsize_merged(const struct jbg_dec_state *s);
+void jbg_dec_free(struct jbg_dec_state *s);
+
+const char *jbg_strerror(int errnum, int language);
+void jbg_int2dppriv(unsigned char *dptable, const char *internal);
+void jbg_dppriv2int(char *internal, const unsigned char *dptable);
+unsigned long jbg_ceil_half(unsigned long x, int n);
+void jbg_split_planes(unsigned long x, unsigned long y, int has_planes,
+ int encode_planes,
+ const unsigned char *src, unsigned char **dest,
+ int use_graycode);
+int jbg_newlen(unsigned char *bie, size_t len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* JBG_H */