Update of /cvsroot/jbig2dec/jbig2dec
In directory usw-pr-cvs1:/tmp/cvs-serv10229
Modified Files:
jbig2_generic.c jbig2_image.c jbig2_priv.h jbig2_symbol_dict.c
jbig2_text.c
Log Message:
checkpointing work on text region decoder.
Index: jbig2_generic.c
===================================================================
RCS file: /cvsroot/jbig2dec/jbig2dec/jbig2_generic.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- jbig2_generic.c 22 Jun 2002 16:05:45 -0000 1.8
+++ jbig2_generic.c 24 Jun 2002 15:51:57 -0000 1.9
@@ -437,7 +437,8 @@
/* todo: free ws, as */
- jbig2_image_compose(ctx, ctx->pages[ctx->current_page].image, image, rsi.x,
rsi.y);
+ jbig2_image_compose(ctx, ctx->pages[ctx->current_page].image, image,
+ rsi.x, rsi.y, JBIG2_COMPOSE_OR);
jbig2_image_free(ctx, image);
jbig2_free(ctx->allocator, GB_stats);
Index: jbig2_image.c
===================================================================
RCS file: /cvsroot/jbig2dec/jbig2dec/jbig2_image.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- jbig2_image.c 21 Jun 2002 19:10:02 -0000 1.6
+++ jbig2_image.c 24 Jun 2002 15:51:57 -0000 1.7
@@ -58,8 +58,8 @@
}
/* composite one jbig2_image onto another */
-// FIXME: need to add a drawing mode argument
-int jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int
x, int y)
+int jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src,
+ int x, int y, Jbig2ComposeOp op)
{
/* special case complete replacement */
if ((x == 0) && (y == 0) && (src->width == dst->width) && (src->height ==
dst->height)) {
Index: jbig2_priv.h
===================================================================
RCS file: /cvsroot/jbig2dec/jbig2dec/jbig2_priv.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- jbig2_priv.h 22 Jun 2002 16:05:45 -0000 1.8
+++ jbig2_priv.h 24 Jun 2002 15:51:57 -0000 1.9
@@ -109,7 +109,14 @@
int jbig2_read_page_info (Jbig2Ctx *ctx, Jbig2Segment *segment, const byte
*segment_data);
int jbig2_complete_page (Jbig2Ctx *ctx, Jbig2Segment *segment, const byte
*segment_data);
-int jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int
x, int y);
+typedef enum {
+ JBIG2_COMPOSE_OR,
+ JBIG2_COMPOSE_AND,
+ JBIG2_COMPOSE_XOR,
+ JBIG2_COMPOSE_XNOR
+} Jbig2ComposeOp;
+
+int jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int
x, int y, Jbig2ComposeOp op);
/* region segment info */
Index: jbig2_symbol_dict.c
===================================================================
RCS file: /cvsroot/jbig2dec/jbig2dec/jbig2_symbol_dict.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- jbig2_symbol_dict.c 22 Jun 2002 21:20:38 -0000 1.11
+++ jbig2_symbol_dict.c 24 Jun 2002 15:51:57 -0000 1.12
@@ -290,7 +290,7 @@
segment->data_length - offset,
GB_stats);
#ifdef HAVE_LIBPNG
- jbig2_dump_symbol_dict(segment->result);
+// jbig2_dump_symbol_dict(segment->result);
#endif
return 0;
Index: jbig2_text.c
===================================================================
RCS file: /cvsroot/jbig2dec/jbig2dec/jbig2_text.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- jbig2_text.c 22 Jun 2002 16:05:45 -0000 1.2
+++ jbig2_text.c 24 Jun 2002 15:51:57 -0000 1.3
@@ -21,6 +21,49 @@
#include "jbig2_generic.h"
#include "jbig2_symbol_dict.h"
+typedef enum {
+ JBIG2_CORNER_BOTTOMLEFT = 0,
+ JBIG2_CORNER_TOPLEFT = 1,
+ JBIG2_CORNER_BOTTOMRIGHT = 2,
+ JBIG2_CORNER_TOPRIGHT = 3
+} Jbig2RefCorner;
+
+typedef struct {
+ bool SBHUFF;
+ bool SBREFINE;
+ bool SBDEFPIXEL;
+ Jbig2ComposeOp SBCOMBOP;
+ bool TRANSPOSED;
+ Jbig2RefCorner REFCORNER;
+ int SBDOFFSET;
+ /* SBW */
+ /* SBH */
+ uint32_t SBNUMINSTANCES;
+ int SBSTRIPS;
+ /* SBNUMSYMS */
+ int *SBSYMCODES;
+ /* SBSYMCODELEN */
+ /* SBSYMS */
+ int SBHUFFFS;
+ int SBHUFFDS;
+ int SBHUFFDT;
+ int SBHUFFRDW;
+ int SBHUFFRDH;
+ int SBHUFFRDX;
+ int SBHUFFRDY;
+ bool SBHUFFRSIZE;
+ bool SBRTEMPLATE;
+ int8_t sbrat[4];
+} Jbig2TextRegionParams;
+
+int jbig2_decode_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment,
+ const Jbig2TextRegionParams *params,
+ const Jbig2RegionSegmentInfo *info,
+ Jbig2Image *image,
+ const byte *data, size_t size)
+{
+}
+
/**
* jbig2_read_text_info: read a text region segment header
**/
@@ -29,12 +72,17 @@
{
int offset = 0;
Jbig2RegionSegmentInfo region_info;
+ Jbig2TextRegionParams params;
+ Jbig2Image *image, *page_image;
+ int code;
uint32_t num_instances;
uint16_t segment_flags;
uint16_t huffman_flags;
- int8_t sbrat[4]; /* FIXME: needs to be explicitly signed? */
+ int8_t sbrat[4];
/* 7.4.1 */
+ if (segment->data_length < 17)
+ goto too_short;
jbig2_get_region_segment_info(®ion_info, segment_data);
offset += 17;
@@ -42,7 +90,7 @@
segment_flags = jbig2_get_int16(segment_data + offset);
offset += 2;
- if (segment_flags & 1) /* Huffman coding */
+ if (segment_flags & 0x01) /* Huffman coding */
{
/* 7.4.3.1.2 */
huffman_flags = jbig2_get_int16(segment_data + offset);
@@ -75,4 +123,24 @@
region_info.width, region_info.height,
region_info.x, region_info.y, num_instances);
}
+
+ page_image = ctx->pages[ctx->current_page].image;
+ image = jbig2_image_new(ctx, region_info.width, region_info.height);
+
+ code = jbig2_decode_text_region(ctx, segment, ¶ms,
+ ®ion_info, image,
+ segment_data + offset, segment->data_length - offset);
+
+ /* todo: check errors */
+
+ jbig2_image_compose(ctx, page_image, image, region_info.x, region_info.y,
JBIG2_COMPOSE_OR);
+ if (image != page_image)
+ jbig2_image_free(ctx, image);
+
+ /* success */
+ return 0;
+
+ too_short:
+ return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number,
+ "Segment too short");
}
|