rev 427 - trunk
[email protected] Tue, 16 Aug 2005 14:16:23 -0700 (PDT)
| Newsgroups | gmane.comp.printing.ghostscript.jbig2dec.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: giles
Date: 2005-08-16 14:16:22 -0700 (Tue, 16 Aug 2005)
New Revision: 427
Modified:
trunk/jbig2_symbol_dict.c
Log:
Implement reading an uncompressed collective symbol bitmap.
Modified: trunk/jbig2_symbol_dict.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/jbig2_symbol_dict.c 2005-08-16 20:38:03 UTC (rev 426)
+++ trunk/jbig2_symbol_dict.c 2005-08-16 21:16:22 UTC (rev 427)
@@ -475,7 +475,6 @@
/* 6.5.5 (4d) */
if (params->SDHUFF && !params->SDREFAGG) {
/* 6.5.9 */
- Jbig2GenericRegionParams rparams;
Jbig2Image *image;
int BMSIZE =3D jbig2_huffman_get(hs, params->SDHUFFBMSIZE, &code);
if (code || (BMSIZE < 0)) {
@@ -492,23 +491,30 @@
/* todo: memory cleanup */
return NULL;
}
- /* todo: if BMSIZE =3D=3D 0 bitmap is uncompressed */
- if (BMSIZE =3D=3D 0) {
- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number,
- "uncompressed collective bitmap NYI!");
- return NULL;
- }
jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number,
- "reading %dx%d collective bitmap for %d symbols"
- " (%d bytes at data offset %d)",
+ "reading %dx%d collective bitmap for %d symbols (%d bytes)",
image->width, image->height, NSYMSDECODED - HCFIRSTSYM,
- BMSIZE, jbig2_huffman_offset(hs));
- rparams.MMR =3D 1;
- code =3D jbig2_decode_generic_mmr(ctx, segment, &rparams,
+ BMSIZE);
+ if (BMSIZE =3D=3D 0) {
+ /* if BMSIZE =3D=3D 0 bitmap is uncompressed */
+ const byte *src =3D data + jbig2_huffman_offset(hs);
+ const int stride =3D (image->width >> 3) +=20
+ (image->width & 7) ? 1 : 0;
+ byte *dst =3D image->data;
+ int j;
+ for (j =3D 0; j < image->height; j++) {
+ memcpy(dst, src, stride);
+ dst +=3D image->stride;
+ src +=3D stride;
+ }
+ BMSIZE =3D image->height * stride;
+ } else {
+ Jbig2GenericRegionParams rparams;
+ rparams.MMR =3D 1;
+ code =3D jbig2_decode_generic_mmr(ctx, segment, &rparams,
data + jbig2_huffman_offset(hs), BMSIZE, image);
-#ifdef OUTPUT_PBM
- jbig2_image_write_pbm_file(image, "collective.pbm");
-#endif
+ }
+ /* advance past the data we've just read */
jbig2_huffman_advance(hs, BMSIZE);
}
=20