jbig2dec
Ralph Giles <[email protected]> Mon, 24 Jun 2002 11:40:03 -0700
| Newsgroups | gmane.comp.printing.ghostscript.jbig2dec.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/jbig2dec/jbig2dec
In directory usw-pr-cvs1:/tmp/cvs-serv16541
Modified Files:
jbig2_segment.c
Log Message:
Save referred-to segment numbers. (untested)
Index: jbig2_segment.c
===================================================================
RCS file: /cvsroot/jbig2dec/jbig2dec/jbig2_segment.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- jbig2_segment.c 22 Jun 2002 16:05:45 -0000 1.6
+++ jbig2_segment.c 24 Jun 2002 18:40:01 -0000 1.7
@@ -26,6 +26,7 @@
Jbig2Segment *result;
uint8_t rtscarf;
uint32_t rtscarf_long;
+ uint32_t *referred_to_segments;
int referred_to_segment_count;
int referred_to_segment_size;
int pa_size;
@@ -60,13 +61,25 @@
result->referred_to_segment_count = referred_to_segment_count;
/* 7.2.5 */
- /* todo: read referred to segment numbers */
- /* For now, we skip them. */
- referred_to_segment_size = result->number <= 256 ? 1:
- result->number <= 65536 ? 2:
- 4;
- offset += referred_to_segment_count * referred_to_segment_size;
+ if (referred_to_segment_count)
+ {
+ int i;
+ referred_to_segment_size = result->number <= 256 ? 1:
+ result->number <= 65536 ? 2 : 4;
+ referred_to_segments = jbig2_alloc(ctx->allocator, referred_to_segment_count * referred_to_segment_size);
+
+ for (i = 0; i < referred_to_segment_count; i++) {
+ referred_to_segments[i] = jbig2_get_int32(buf + offset);
+ offset += referred_to_segment_size;
+ }
+ result->referred_to_segments = referred_to_segments;
+ }
+ else /* no referred-to segments */
+ {
+ result->referred_to_segments = NULL;
+ }
+
/* 7.2.6 */
pa_size = result->flags & 0x40 ? 4 : 1;
@@ -75,7 +88,7 @@
jbig2_free (ctx->allocator, result);
return NULL;
}
-
+
if (result->flags & 0x40) {
result->page_association = jbig2_get_int32(buf + offset);
offset += 4;
@@ -93,6 +106,10 @@
void
jbig2_free_segment (Jbig2Ctx *ctx, Jbig2Segment *segment)
{
+ if (segment->referred_to_segments != NULL) {
+ jbig2_free(ctx->allocator, segment->referred_to_segments);
+ }
+ /* todo: free result */
jbig2_free (ctx->allocator, segment);
}