ref: 04d17fa29806f730e03290b7ab4ee415600ba9e7
parent: 42ead910c9d9d4e3f6dd69e91be16f5de42ffef7
author: giles <giles@ded80894-8fb9-0310-811b-c03f3676ab4d>
date: Tue May 7 23:03:18 EDT 2002
Code cleanup and rearrangement. git-svn-id: http://svn.ghostscript.com/jbig2dec/trunk@54 ded80894-8fb9-0310-811b-c03f3676ab4d
--- a/jbig2_mmr.c
+++ b/jbig2_mmr.c
@@ -806,7 +806,7 @@
for (y = 0; y < params->GBH; y++)
{
- jbig2_decode_mmr_line(&mmr, gbreg_line);
+ jbig2_decode_mmr_line(&mmr, gbreg_line, NULL);
gbreg_line += rowstride;
}
}
--- a/jbig2_symbol_dict.c
+++ b/jbig2_symbol_dict.c
@@ -7,6 +7,86 @@
#include "jbig2_generic.h"
#include "jbig2_symbol_dict.h"
+#ifdef GILES
+
+struct _Jbig2SymbolDictionary {
+ int16 flags;
+ int8 SDAT_flags[8];
+ byte SDRAT_flags[4];
+ int32 SDNUMEXSYMS;
+ int32 SDNUMNEWSYMS;
+};
+
+/* parse the symbol dictionary starting at ctx->offset
+ a pointer to a new Jbig2SymbolDictionary struct is returned
+
+ the ctx->offset pointer is not advanced; the caller must
+ take care of that, using the data_length field of the
+ segment header.
+*/
+static Jbig2SymbolDictionary *
+jbig2_read_symbol_dictionary (Jbig2Ctx_foo *ctx)
+{
+ Jbig2SymbolDictionary *result = (Jbig2SymbolDictionary *)malloc(sizeof(Jbig2SymbolDictionary));
+ int offset = ctx->offset;
+ bool SDHUFF, SDREFAGG, SDRTEMPLATE;
+ int SDTEMPLATE;
+ int sdat_bytes;
+
+ /* 7.4.2.1.1 */
+ result->flags = get_int16(ctx, offset);
+ offset += 2;
+
+ SDHUFF = result->flags & 1;
+ SDREFAGG = (result->flags >> 1) & 1;
+ SDTEMPLATE = (result->flags >> 10) & 3;
+ SDRTEMPLATE = (result->flags >> 12) & 1;
+
+ /* FIXME: there are quite a few of these conditions to check */
+ /* maybe #ifdef CONFORMANCE and a separate routine */
+ if(!SDHUFF && (result->flags & 0x0006)) {
+ printf("warning: SDHUFF is zero, but contrary to spec SDHUFFDH is not.\n");
+ }
+ if(!SDHUFF && (result->flags & 0x0018)) {
+ printf("warning: SDHUFF is zero, but contrary to spec SDHUFFDW is not.\n");
+ }
+
+ /* 7.4.2.1.2 - Symbol dictionary AT flags */
+ if (!SDHUFF)
+ {
+ int SDTEMPLATE = (result->flags >> 10) & 3;
+ if (SDTEMPLATE == 0)
+ sdat_bytes = 8;
+ else
+ sdat_bytes = 2;
+ }
+ else
+ sdat_bytes = 0;
+ get_bytes(ctx, result->SDAT_flags, sdat_bytes, offset);
+ memset(&result->SDAT_flags + sdat_bytes, 0, 8 - sdat_bytes);
+ offset += sdat_bytes;
+
+ /* 7.4.2.1.3 - Symbol dictionary refinement AT flags */
+ if (SDREFAGG && !SDRTEMPLATE)
+ {
+ get_bytes(ctx, result->SDRAT_flags, 4, offset);
+ offset += 4;
+ }
+
+ /* 7.4.2.1.4 */
+ result->SDNUMEXSYMS = get_int32(ctx, offset);
+
+ /* 7.4.2.1.5 */
+ result->SDNUMNEWSYMS = get_int32(ctx, offset + 4);
+ offset += 8;
+
+ /* hardwire for the first annex-h example */
+
+ return result;
+}
+
+#endif /* Giles */
+
/* Table 13 */
typedef struct {
bool SDHUFF;
--- a/jbig2dec.c
+++ b/jbig2dec.c
@@ -1,7 +1,7 @@
/*
jbig2dec
- Copyright (C) 2002 artofcode LLC.
+ Copyright (C) 2001-2002 artofcode LLC.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -8,7 +8,7 @@
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
- $Id: jbig2dec.c,v 1.16 2002/03/28 08:28:02 giles Exp $
+ $Id: jbig2dec.c,v 1.17 2002/05/08 03:03:18 giles Exp $
*/
#include <stdio.h>
@@ -15,8 +15,13 @@
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
-#include <getopt.h>
+#ifdef HAVE_GETOPT_H
+# include <getopt.h>
+#else
+# include "getopt.h"
+#endif
+
#include "jbig2.h"
typedef enum {
@@ -31,43 +36,8 @@
#ifdef DEAD_CODE
-#include "jbig2dec.h"
-typedef struct _Jbig2SymbolDictionary Jbig2SymbolDictionary;
-typedef struct _Jbig2PageInfo Jbig2PageInfo;
-/* our main 'context' structure for decoding a jbig2 bitstream */
-struct _Jbig2Ctx_foo {
- FILE *f;
- int offset;
- int eof;
-
- int32 n_pages;
- byte flags;
-};
-
-/* useful masks for parsing the flags field */
-#define JBIG2_FILE_FLAGS_SEQUENTIAL_ACCESS 0x01
-#define JBIG2_FILE_FLAGS_PAGECOUNT_UNKNOWN 0x02
-
-
-struct _Jbig2SymbolDictionary {
- int16 flags;
- int8 SDAT_flags[8];
- byte SDRAT_flags[4];
- int32 SDNUMEXSYMS;
- int32 SDNUMNEWSYMS;
-};
-
-struct _Jbig2PageInfo {
- int32 height, width; /* in pixels */
- int32 x_resolution,
- y_resolution; /* in pixels per meter */
- int16 stripe_size;
- bool striped;
- byte flags;
-};
-
int32
get_bytes (Jbig2Ctx_foo *ctx, byte *buf, int size, int off)
{
@@ -80,33 +50,6 @@
return n_bytes;
}
-int16
-get_int16 (Jbig2Ctx_foo *ctx, int off)
-{
- byte buf[2];
-
- get_bytes(ctx, buf, 2, off);
- return (buf[0] << 8) | buf[1];
-}
-
-byte
-get_byte (Jbig2Ctx_foo *ctx, int off)
-{
- byte buf;
-
- get_bytes(ctx, &buf, 1, off);
- return buf;
-}
-
-int32
-get_int32 (Jbig2Ctx_foo *ctx, int off)
-{
- byte buf[4];
-
- get_bytes(ctx, buf, 4, off);
- return (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
-}
-
static Jbig2Ctx_foo *
jbig2_open (FILE *f)
{
@@ -215,249 +158,8 @@
return result;
}
-/* parse the symbol dictionary starting at ctx->offset
- a pointer to a new Jbig2SymbolDictionary struct is returned
-
- the ctx->offset pointer is not advanced; the caller must
- take care of that, using the data_length field of the
- segment header.
-*/
-static Jbig2SymbolDictionary *
-jbig2_read_symbol_dictionary (Jbig2Ctx_foo *ctx)
-{
- Jbig2SymbolDictionary *result = (Jbig2SymbolDictionary *)malloc(sizeof(Jbig2SymbolDictionary));
- int offset = ctx->offset;
- bool SDHUFF, SDREFAGG, SDRTEMPLATE;
- int SDTEMPLATE;
- int sdat_bytes;
-
- /* 7.4.2.1.1 */
- result->flags = get_int16(ctx, offset);
- offset += 2;
-
- SDHUFF = result->flags & 1;
- SDREFAGG = (result->flags >> 1) & 1;
- SDTEMPLATE = (result->flags >> 10) & 3;
- SDRTEMPLATE = (result->flags >> 12) & 1;
-
- /* FIXME: there are quite a few of these conditions to check */
- /* maybe #ifdef CONFORMANCE and a separate routine */
- if(!SDHUFF && (result->flags & 0x0006)) {
- printf("warning: SDHUFF is zero, but contrary to spec SDHUFFDH is not.\n");
- }
- if(!SDHUFF && (result->flags & 0x0018)) {
- printf("warning: SDHUFF is zero, but contrary to spec SDHUFFDW is not.\n");
- }
-
- /* 7.4.2.1.2 - Symbol dictionary AT flags */
- if (!SDHUFF)
- {
- int SDTEMPLATE = (result->flags >> 10) & 3;
- if (SDTEMPLATE == 0)
- sdat_bytes = 8;
- else
- sdat_bytes = 2;
- }
- else
- sdat_bytes = 0;
- get_bytes(ctx, result->SDAT_flags, sdat_bytes, offset);
- memset(&result->SDAT_flags + sdat_bytes, 0, 8 - sdat_bytes);
- offset += sdat_bytes;
-
- /* 7.4.2.1.3 - Symbol dictionary refinement AT flags */
- if (SDREFAGG && !SDRTEMPLATE)
- {
- get_bytes(ctx, result->SDRAT_flags, 4, offset);
- offset += 4;
- }
-
- /* 7.4.2.1.4 */
- result->SDNUMEXSYMS = get_int32(ctx, offset);
-
- /* 7.4.2.1.5 */
- result->SDNUMNEWSYMS = get_int32(ctx, offset + 4);
- offset += 8;
-
- /* hardwire for the first annex-h example */
-
- return result;
-}
-
-/* parse the page info segment data starting at ctx->offset
- a pointer to a new Jbig2PageInfo struct is returned
-
- the ctx->offset pointer is not advanced; the caller must
- take care of that, using the data_length field of the
- segment header.
-*/
-static Jbig2PageInfo *
-jbig2_read_page_info (Jbig2Ctx_foo *ctx) {
- Jbig2PageInfo *info = (Jbig2PageInfo *)malloc(sizeof(Jbig2PageInfo));
- int offset = ctx->offset;
-
- if (info == NULL) {
- printf("unable to allocate memory to parse page info segment\n");
- return NULL;
- }
-
- info->width = get_int32(ctx, offset);
- info->height = get_int32(ctx, offset + 4);
- offset += 8;
-
- info->x_resolution = get_int32(ctx, offset);
- info->y_resolution = get_int32(ctx, offset);
- offset += 8;
-
- get_bytes(ctx, &(info->flags), 1, offset++);
-
- {
- int16 striping = get_int16(ctx, offset);
- if (striping & 0x8000) {
- info->striped = TRUE;
- info->stripe_size = striping & 0x7FFF;
- } else {
- info->striped = FALSE;
- info->stripe_size = 0; /* would info->height be better? */
- }
- offset += 2;
- }
-
- return info;
-}
-
-static void
-dump_symbol_dictionary (Jbig2SymbolDictionary *sd)
-{
- printf ("symbol dictionary: flags = %04x, %d new symbols, %d exported\n",
- sd->flags, sd->SDNUMNEWSYMS, sd->SDNUMEXSYMS);
-}
-
-static void
-dump_page_info(Jbig2PageInfo *info)
-{
- printf("image is %dx%d ", info->width, info->height);
- if (info->x_resolution == 0) {
- printf("(unknown res) ");
- } else if (info->x_resolution == info->y_resolution) {
- printf("(%d ppm) ", info->x_resolution);
- } else {
- printf("(%dx%d ppm) ", info->x_resolution, info->y_resolution);
- }
- if (info->striped) {
- printf("\tmaximum stripe size: %d\n", info->stripe_size);
- } else {
- printf("\tno striping\n");
- }
-}
-
-static bool
-dump_segment (Jbig2Ctx_foo *ctx)
-{
- Jbig2SegmentHeader *sh;
- Jbig2SymbolDictionary *sd;
- Jbig2PageInfo *page_info;
-
- sh = jbig2_read_segment_header(ctx);
- if (sh == NULL)
- return TRUE;
-
- printf("segment %d (%d bytes)\t", sh->segment_number, sh->data_length);
- switch (sh->flags & 63)
- {
- case 0:
- sd = jbig2_read_symbol_dictionary(ctx);
- printf("\n");
- dump_symbol_dictionary(sd);
- break;
- case 4:
- printf("intermediate text region:");
- break;
- case 6:
- printf("immediate text region:");
- break;
- case 7:
- printf("immediate lossless text region:");
- break;
- case 16:
- printf("pattern dictionary:");
- break;
- case 20:
- printf("intermediate halftone region:");
- break;
- case 22:
- printf("immediate halftone region:");
- break;
- case 23:
- printf("immediate lossless halftone region:");
- break;
- case 36:
- printf("intermediate generic region:");
- break;
- case 38:
- printf("immediate generic region:");
- break;
- case 39:
- printf("immediate lossless generic region:");
- break;
- case 40:
- printf("intermediate generic refinement region:");
- break;
- case 42:
- printf("immediate generic refinement region:");
- break;
- case 43:
- printf("immediate lossless generic refinement region:");
- break;
- case 48:
- page_info = jbig2_read_page_info(ctx);
- printf("page info:\n");
- if (page_info) dump_page_info(page_info);
- break;
- case 49:
- printf("end of page");
- break;
- case 50:
- printf("end of stripe");
- break;
- case 51:
- printf("end of file\n");
- return TRUE;
- break;
- case 52:
- printf("profiles:");
- break;
- case 53:
- printf("tables:");
- break;
- case 62:
- printf("extension:");
- break;
- default:
- printf("UNKNOWN SEGMENT TYPE!!!");
- }
- printf("\tflags = %02x, page %d\n",
- sh->flags, sh->page_association);
-
- ctx->offset += sh->data_length;
- return FALSE;
-}
-
-static void
-dump_jbig2 (Jbig2Ctx_foo *ctx)
-{
- bool last;
-
- if (!ctx) return;
-
- printf("Number of pages = %d\n", ctx->n_pages);
- for (;;)
- {
- last = dump_segment(ctx);
- if (last)
- break;
- }
-}
#endif /* DEAD_CODE */
+
static int
print_usage (void)