Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
7640 views
1
#include "mupdf/fitz.h"
2
3
/* This code needs to be kept out of stm_buffer.c to avoid it being
4
* pulled into cmapdump.c */
5
6
void
7
fz_drop_compressed_buffer(fz_context *ctx, fz_compressed_buffer *buf)
8
{
9
if (!buf)
10
return;
11
12
fz_drop_buffer(ctx, buf->buffer);
13
fz_free(ctx, buf);
14
}
15
16
fz_stream *
17
fz_open_image_decomp_stream_from_buffer(fz_context *ctx, fz_compressed_buffer *buffer, int *l2factor)
18
{
19
fz_stream *chain = fz_open_buffer(ctx, buffer->buffer);
20
21
return fz_open_image_decomp_stream(ctx, chain, &buffer->params, l2factor);
22
}
23
24
fz_stream *
25
fz_open_image_decomp_stream(fz_context *ctx, fz_stream *chain, fz_compression_params *params, int *l2factor)
26
{
27
switch (params->type)
28
{
29
case FZ_IMAGE_FAX:
30
if (l2factor)
31
*l2factor = 0;
32
return fz_open_faxd(ctx, chain,
33
params->u.fax.k,
34
params->u.fax.end_of_line,
35
params->u.fax.encoded_byte_align,
36
params->u.fax.columns,
37
params->u.fax.rows,
38
params->u.fax.end_of_block,
39
params->u.fax.black_is_1);
40
case FZ_IMAGE_JPEG:
41
if (l2factor && *l2factor > 3)
42
*l2factor = 3;
43
return fz_open_dctd(ctx, chain, params->u.jpeg.color_transform, l2factor ? *l2factor : 0, NULL);
44
case FZ_IMAGE_RLD:
45
if (l2factor)
46
*l2factor = 0;
47
return fz_open_rld(ctx, chain);
48
case FZ_IMAGE_FLATE:
49
if (l2factor)
50
*l2factor = 0;
51
chain = fz_open_flated(ctx, chain, 15);
52
if (params->u.flate.predictor > 1)
53
chain = fz_open_predict(ctx, chain, params->u.flate.predictor, params->u.flate.columns, params->u.flate.colors, params->u.flate.bpc);
54
return chain;
55
case FZ_IMAGE_LZW:
56
if (l2factor)
57
*l2factor = 0;
58
chain = fz_open_lzwd(ctx, chain, params->u.lzw.early_change);
59
if (params->u.lzw.predictor > 1)
60
chain = fz_open_predict(ctx, chain, params->u.lzw.predictor, params->u.lzw.columns, params->u.lzw.colors, params->u.lzw.bpc);
61
return chain;
62
default:
63
if (l2factor)
64
*l2factor = 0;
65
break;
66
}
67
68
return chain;
69
}
70
71
fz_stream *
72
fz_open_compressed_buffer(fz_context *ctx, fz_compressed_buffer *buffer)
73
{
74
int l2factor = 0;
75
76
return fz_open_image_decomp_stream_from_buffer(ctx, buffer, &l2factor);
77
}
78
79
unsigned int
80
fz_compressed_buffer_size(fz_compressed_buffer *buffer)
81
{
82
if (!buffer || !buffer->buffer)
83
return 0;
84
return (unsigned int)buffer->buffer->cap;
85
}
86
87