More tweaks to spandsp

This commit is contained in:
Steve Underwood 2013-07-24 02:19:40 +08:00
parent 1912bf013a
commit 7c90396294

View File

@ -663,31 +663,31 @@ SPAN_DECLARE(int) t4_rx_put_bit(t4_rx_state_t *s, int bit)
SPAN_DECLARE(int) t4_rx_put(t4_rx_state_t *s, const uint8_t buf[], size_t len) SPAN_DECLARE(int) t4_rx_put(t4_rx_state_t *s, const uint8_t buf[], size_t len)
{ {
uint8_t *buf2;
s->line_image_size += 8*len; s->line_image_size += 8*len;
switch (s->metadata.compression)
if (s->pre_encoded_len > 0)
{ {
case T4_COMPRESSION_T4_1D: if (s->pre_encoded_len < s->pre_encoded_ptr + 65536)
case T4_COMPRESSION_T4_2D: {
case T4_COMPRESSION_T6: s->pre_encoded_len += 65536;
return t4_t6_decode_put(&s->decoder.t4_t6, buf, len); if ((buf2 = realloc(s->pre_encoded_buf, s->pre_encoded_len)) == NULL)
case T4_COMPRESSION_T85: {
case T4_COMPRESSION_T85_L0: if (s->pre_encoded_buf)
return t85_decode_put(&s->decoder.t85, buf, len); free(s->pre_encoded_buf);
#if defined(SPANDSP_SUPPORT_T88) return -1;
case T4_COMPRESSION_T88:
break;
#endif
case T4_COMPRESSION_T42_T81:
return t42_decode_put(&s->decoder.t42, buf, len);
#if defined(SPANDSP_SUPPORT_T43)
case T4_COMPRESSION_T43:
return t43_decode_put(&s->decoder.t43, buf, len);
#endif
#if defined(SPANDSP_SUPPORT_T45)
case T4_COMPRESSION_T45:
break;
#endif
} }
s->pre_encoded_buf = buf2;
}
memcpy(&s->pre_encoded_buf[s->pre_encoded_ptr], buf, len);
s->pre_encoded_ptr += len;
return T4_DECODE_MORE_DATA;
}
if (s->image_put_handler)
return s->image_put_handler((void *) &s->decoder, buf, len);
return T4_DECODE_OK; return T4_DECODE_OK;
} }
/*- End of function --------------------------------------------------------*/ /*- End of function --------------------------------------------------------*/
@ -977,31 +977,42 @@ SPAN_DECLARE(int) t4_rx_start_page(t4_rx_state_t *s)
switch (s->metadata.compression) switch (s->metadata.compression)
{ {
case 0:
s->pre_encoded_ptr = 0;
s->pre_encoded_len = 0;
s->image_put_handler = NULL;
break;
case T4_COMPRESSION_T4_1D: case T4_COMPRESSION_T4_1D:
case T4_COMPRESSION_T4_2D: case T4_COMPRESSION_T4_2D:
case T4_COMPRESSION_T6: case T4_COMPRESSION_T6:
t4_t6_decode_restart(&s->decoder.t4_t6, s->metadata.image_width); t4_t6_decode_restart(&s->decoder.t4_t6, s->metadata.image_width);
s->image_put_handler = (t4_image_put_handler_t) t4_t6_decode_put;
break; break;
case T4_COMPRESSION_T85: case T4_COMPRESSION_T85:
case T4_COMPRESSION_T85_L0: case T4_COMPRESSION_T85_L0:
t85_decode_restart(&s->decoder.t85); t85_decode_restart(&s->decoder.t85);
s->image_put_handler = (t4_image_put_handler_t) t85_decode_put;
break; break;
#if defined(SPANDSP_SUPPORT_T88) #if defined(SPANDSP_SUPPORT_T88)
case T4_COMPRESSION_T88: case T4_COMPRESSION_T88:
t88_decode_restart(&s->decoder.t88); t88_decode_restart(&s->decoder.t88);
s->image_put_handler = (t4_image_put_handler_t) t88_decode_put;
break; break;
#endif #endif
case T4_COMPRESSION_T42_T81: case T4_COMPRESSION_T42_T81:
t42_decode_restart(&s->decoder.t42); t42_decode_restart(&s->decoder.t42);
s->image_put_handler = (t4_image_put_handler_t) t42_decode_put;
break; break;
#if defined(SPANDSP_SUPPORT_T43) #if defined(SPANDSP_SUPPORT_T43)
case T4_COMPRESSION_T43: case T4_COMPRESSION_T43:
t43_decode_restart(&s->decoder.t43); t43_decode_restart(&s->decoder.t43);
s->image_put_handler = (t4_image_put_handler_t) t43_decode_put;
break; break;
#endif #endif
#if defined(SPANDSP_SUPPORT_T45) #if defined(SPANDSP_SUPPORT_T45)
case T4_COMPRESSION_T45: case T4_COMPRESSION_T45:
t45_decode_restart(&s->decoder.t45); t45_decode_restart(&s->decoder.t45);
s->image_put_handler = (t4_image_put_handler_t) t45_decode_put;
break; break;
#endif #endif
} }
@ -1041,27 +1052,25 @@ SPAN_DECLARE(int) t4_rx_end_page(t4_rx_state_t *s)
int length; int length;
length = 0; length = 0;
if (s->image_put_handler)
s->image_put_handler((void *) &s->decoder, NULL, 0);
switch (s->metadata.compression) switch (s->metadata.compression)
{ {
case T4_COMPRESSION_T4_1D: case T4_COMPRESSION_T4_1D:
case T4_COMPRESSION_T4_2D: case T4_COMPRESSION_T4_2D:
case T4_COMPRESSION_T6: case T4_COMPRESSION_T6:
t4_t6_decode_put(&s->decoder.t4_t6, NULL, 0);
length = t4_t6_decode_get_image_length(&s->decoder.t4_t6); length = t4_t6_decode_get_image_length(&s->decoder.t4_t6);
break; break;
case T4_COMPRESSION_T85: case T4_COMPRESSION_T85:
case T4_COMPRESSION_T85_L0: case T4_COMPRESSION_T85_L0:
t85_decode_put(&s->decoder.t85, NULL, 0);
length = t85_decode_get_image_length(&s->decoder.t85); length = t85_decode_get_image_length(&s->decoder.t85);
break; break;
#if defined(SPANDSP_SUPPORT_T88) #if defined(SPANDSP_SUPPORT_T88)
case T4_COMPRESSION_T88: case T4_COMPRESSION_T88:
t88_decode_put(&s->decoder.t88, NULL, 0);
length = t88_decode_get_image_length(&s->decoder.t88); length = t88_decode_get_image_length(&s->decoder.t88);
break; break;
#endif #endif
case T4_COMPRESSION_T42_T81: case T4_COMPRESSION_T42_T81:
t42_decode_put(&s->decoder.t42, NULL, 0);
length = t42_decode_get_image_length(&s->decoder.t42); length = t42_decode_get_image_length(&s->decoder.t42);
if (s->decoder.t42.samples_per_pixel == 3) if (s->decoder.t42.samples_per_pixel == 3)
select_tiff_compression(s, T4_IMAGE_TYPE_COLOUR_8BIT); select_tiff_compression(s, T4_IMAGE_TYPE_COLOUR_8BIT);
@ -1070,13 +1079,11 @@ SPAN_DECLARE(int) t4_rx_end_page(t4_rx_state_t *s)
break; break;
#if defined(SPANDSP_SUPPORT_T43) #if defined(SPANDSP_SUPPORT_T43)
case T4_COMPRESSION_T43: case T4_COMPRESSION_T43:
t43_decode_put(&s->decoder.t43, NULL, 0);
length = t43_decode_get_image_length(&s->decoder.t43); length = t43_decode_get_image_length(&s->decoder.t43);
break; break;
#endif #endif
#if defined(SPANDSP_SUPPORT_T45) #if defined(SPANDSP_SUPPORT_T45)
case T4_COMPRESSION_T45: case T4_COMPRESSION_T45:
t45_decode_put(&s->decoder.t45, NULL, 0);
length = t45_decode_get_image_length(&s->decoder.t45); length = t45_decode_get_image_length(&s->decoder.t45);
break; break;
#endif #endif