stm_comp_buf.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include "fitz-internal.h"
  2. /* This code needs to be kept out of stm_buffer.c to avoid it being
  3. * pulled into cmapdump.c */
  4. void
  5. fz_free_compressed_buffer(fz_context *ctx, fz_compressed_buffer *buf)
  6. {
  7. if (!buf)
  8. return;
  9. fz_drop_buffer(ctx, buf->buffer);
  10. fz_free(ctx, buf);
  11. }
  12. fz_stream *
  13. fz_open_image_decomp_stream(fz_context *ctx, fz_compressed_buffer *buffer, int *l2factor)
  14. {
  15. fz_stream *chain = fz_open_buffer(ctx, buffer->buffer);
  16. fz_compression_params *params = &buffer->params;
  17. switch (params->type)
  18. {
  19. case FZ_IMAGE_FAX:
  20. *l2factor = 0;
  21. return fz_open_faxd(chain,
  22. params->u.fax.k,
  23. params->u.fax.end_of_line,
  24. params->u.fax.encoded_byte_align,
  25. params->u.fax.columns,
  26. params->u.fax.rows,
  27. params->u.fax.end_of_block,
  28. params->u.fax.black_is_1);
  29. case FZ_IMAGE_JPEG:
  30. if (*l2factor > 3)
  31. *l2factor = 3;
  32. return fz_open_resized_dctd(chain, params->u.jpeg.color_transform, *l2factor);
  33. case FZ_IMAGE_RLD:
  34. *l2factor = 0;
  35. return fz_open_rld(chain);
  36. case FZ_IMAGE_FLATE:
  37. *l2factor = 0;
  38. chain = fz_open_flated(chain);
  39. if (params->u.flate.predictor > 1)
  40. chain = fz_open_predict(chain, params->u.flate.predictor, params->u.flate.columns, params->u.flate.colors, params->u.flate.bpc);
  41. return chain;
  42. case FZ_IMAGE_LZW:
  43. *l2factor = 0;
  44. chain = fz_open_lzwd(chain, params->u.lzw.early_change);
  45. if (params->u.lzw.predictor > 1)
  46. chain = fz_open_predict(chain, params->u.lzw.predictor, params->u.lzw.columns, params->u.lzw.colors, params->u.lzw.bpc);
  47. return chain;
  48. default:
  49. *l2factor = 0;
  50. break;
  51. }
  52. return chain;
  53. }
  54. fz_stream *
  55. fz_open_compressed_buffer(fz_context *ctx, fz_compressed_buffer *buffer)
  56. {
  57. int l2factor = 0;
  58. return fz_open_image_decomp_stream(ctx, buffer, &l2factor);
  59. }
  60. unsigned int
  61. fz_compressed_buffer_size(fz_compressed_buffer *buffer)
  62. {
  63. if (!buffer || !buffer->buffer)
  64. return 0;
  65. return (unsigned int)buffer->buffer->cap;
  66. }