/src/libjpeg-turbo.main/src/rdpng.c
Line | Count | Source |
1 | | /* |
2 | | * rdpng.c |
3 | | * |
4 | | * This file was part of the Independent JPEG Group's software: |
5 | | * Copyright (C) 1991-1997, Thomas G. Lane. |
6 | | * libjpeg-turbo Modifications: |
7 | | * Copyright (C) 2015-2017, 2020-2026, D. R. Commander. |
8 | | * For conditions of distribution and use, see the accompanying README.ijg |
9 | | * file. |
10 | | * |
11 | | * This file contains routines to read input images in 8-bit-per-channel or |
12 | | * 16-bit-per-channel PNG format. libspng is required to compile this |
13 | | * software. |
14 | | */ |
15 | | |
16 | | #ifdef _MSC_VER |
17 | | #define _CRT_SECURE_NO_DEPRECATE |
18 | | #endif |
19 | | |
20 | | #include "cmyk.h" |
21 | | #include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ |
22 | | #include "spng/spng.h" |
23 | | |
24 | | #if defined(PNG_SUPPORTED) && \ |
25 | | (BITS_IN_JSAMPLE != 16 || defined(C_LOSSLESS_SUPPORTED)) |
26 | | |
27 | | |
28 | | static int alpha_index[JPEG_NUMCS] = { |
29 | | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 3, 0, 0, -1 |
30 | | }; |
31 | | |
32 | | |
33 | 83.8k | #define TRY_SPNG(f) { \ |
34 | 83.8k | int __spng_error = (f); \ |
35 | 83.8k | if (__spng_error) \ |
36 | 83.8k | ERREXITS(cinfo, JERR_PNG_LIBSPNG, spng_strerror(__spng_error)); \ |
37 | 83.8k | } |
38 | | |
39 | | |
40 | | /* Private version of data source object */ |
41 | | |
42 | | typedef struct { |
43 | | struct cjpeg_source_struct pub; /* public fields */ |
44 | | |
45 | | spng_ctx *ctx; |
46 | | uint8_t png_bit_depth, png_color_type; |
47 | | int png_alpha; |
48 | | struct spng_plte colormap; /* PNG colormap */ |
49 | | |
50 | | /* Usually these two pointers point to the same place: */ |
51 | | unsigned char *iobuffer; /* libspng's I/O buffer */ |
52 | | _JSAMPROW pixrow; /* compressor input buffer */ |
53 | | size_t buffer_width; /* width of I/O buffer */ |
54 | | _JSAMPLE *rescale; /* PNG bit depth => data precision remapping |
55 | | array, or NULL */ |
56 | | } png_source_struct; |
57 | | |
58 | | typedef png_source_struct *png_source_ptr; |
59 | | |
60 | | |
61 | | /* |
62 | | * Read one row of pixels. |
63 | | * |
64 | | * We provide several different versions depending on input file format. |
65 | | * In all cases, input is scaled to cinfo->data_precision. |
66 | | * |
67 | | * get_raw_row() is used when the pixel format is JCS_EXT_RGB/JCS_RGB or |
68 | | * JCS_GRAYSCALE, cinfo->data_precision is 8 or 16, and the PNG file doesn't |
69 | | * have an alpha channel. Thus, we can read the pixels directly from the PNG |
70 | | * file. |
71 | | */ |
72 | | |
73 | | METHODDEF(JDIMENSION) |
74 | | get_raw_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo) |
75 | 758k | { |
76 | 758k | png_source_ptr source = (png_source_ptr)sinfo; |
77 | 758k | int spng_error; |
78 | | |
79 | 758k | spng_error = spng_decode_row(source->ctx, source->iobuffer, |
80 | 758k | source->buffer_width); |
81 | 758k | if (spng_error && spng_error != SPNG_EOI) |
82 | 3.69k | ERREXITS(cinfo, JERR_PNG_LIBSPNG, spng_strerror(spng_error)); \ |
83 | 758k | return 1; |
84 | 758k | } Unexecuted instantiation: rdpng-8.c:get_raw_row Line | Count | Source | 75 | 758k | { | 76 | 758k | png_source_ptr source = (png_source_ptr)sinfo; | 77 | 758k | int spng_error; | 78 | | | 79 | 758k | spng_error = spng_decode_row(source->ctx, source->iobuffer, | 80 | 758k | source->buffer_width); | 81 | 758k | if (spng_error && spng_error != SPNG_EOI) | 82 | 3.69k | ERREXITS(cinfo, JERR_PNG_LIBSPNG, spng_strerror(spng_error)); \ | 83 | 758k | return 1; | 84 | 758k | } |
Unexecuted instantiation: rdpng-16.c:get_raw_row |
85 | | |
86 | | |
87 | 146k | #define GRAY_RGB_READ_LOOP(read_op, alpha_set_op, pointer_op) { \ |
88 | 26.8M | for (col = cinfo->image_width; col > 0; col--) { \ |
89 | 26.7M | ptr[rindex] = ptr[gindex] = ptr[bindex] = read_op; \ |
90 | 26.7M | alpha_set_op \ |
91 | 26.7M | ptr += ps; \ |
92 | 26.7M | pointer_op \ |
93 | 26.7M | } \ |
94 | 146k | } |
95 | | |
96 | | |
97 | | METHODDEF(JDIMENSION) |
98 | | get_gray_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo) |
99 | | /* This version is for reading 8-bit-per-channel or 16-bit-per-channel |
100 | | * grayscale or grayscale + alpha PNG files. |
101 | | */ |
102 | 29.2k | { |
103 | 29.2k | png_source_ptr source = (png_source_ptr)sinfo; |
104 | 29.2k | register _JSAMPROW ptr; |
105 | 29.2k | register _JSAMPLE *rescale = source->rescale; |
106 | 29.2k | JDIMENSION col; |
107 | | |
108 | 29.2k | get_raw_row(cinfo, sinfo); |
109 | 29.2k | ptr = source->pub._buffer[0]; |
110 | | #if BITS_IN_JSAMPLE != 12 |
111 | 0 | if (source->png_bit_depth == cinfo->data_precision) { |
112 | 0 | _JSAMPLE *bufferptr = (_JSAMPLE *)source->iobuffer; |
113 | 0 | for (col = cinfo->image_width; col > 0; col--) { |
114 | 0 | *ptr++ = *bufferptr++; |
115 | 0 | bufferptr += source->png_alpha; |
116 | 0 | } |
117 | 0 | } else |
118 | 0 | #endif |
119 | 29.2k | if (source->png_bit_depth == 16) { |
120 | 2.41k | register unsigned short *bufferptr = (unsigned short *)source->iobuffer; |
121 | 100k | for (col = cinfo->image_width; col > 0; col--) { |
122 | 97.6k | *ptr++ = rescale[*bufferptr++]; |
123 | 97.6k | bufferptr += source->png_alpha; |
124 | 97.6k | } |
125 | 26.8k | } else { |
126 | 26.8k | register unsigned char *bufferptr = source->iobuffer; |
127 | 5.27M | for (col = cinfo->image_width; col > 0; col--) { |
128 | 5.24M | *ptr++ = rescale[*bufferptr++]; |
129 | 5.24M | bufferptr += source->png_alpha; |
130 | 5.24M | } |
131 | 26.8k | } |
132 | 29.2k | return 1; |
133 | 29.2k | } Unexecuted instantiation: rdpng-8.c:get_gray_row Line | Count | Source | 102 | 29.2k | { | 103 | 29.2k | png_source_ptr source = (png_source_ptr)sinfo; | 104 | 29.2k | register _JSAMPROW ptr; | 105 | 29.2k | register _JSAMPLE *rescale = source->rescale; | 106 | 29.2k | JDIMENSION col; | 107 | | | 108 | 29.2k | get_raw_row(cinfo, sinfo); | 109 | 29.2k | ptr = source->pub._buffer[0]; | 110 | | #if BITS_IN_JSAMPLE != 12 | 111 | | if (source->png_bit_depth == cinfo->data_precision) { | 112 | | _JSAMPLE *bufferptr = (_JSAMPLE *)source->iobuffer; | 113 | | for (col = cinfo->image_width; col > 0; col--) { | 114 | | *ptr++ = *bufferptr++; | 115 | | bufferptr += source->png_alpha; | 116 | | } | 117 | | } else | 118 | | #endif | 119 | 29.2k | if (source->png_bit_depth == 16) { | 120 | 2.41k | register unsigned short *bufferptr = (unsigned short *)source->iobuffer; | 121 | 100k | for (col = cinfo->image_width; col > 0; col--) { | 122 | 97.6k | *ptr++ = rescale[*bufferptr++]; | 123 | 97.6k | bufferptr += source->png_alpha; | 124 | 97.6k | } | 125 | 26.8k | } else { | 126 | 26.8k | register unsigned char *bufferptr = source->iobuffer; | 127 | 5.27M | for (col = cinfo->image_width; col > 0; col--) { | 128 | 5.24M | *ptr++ = rescale[*bufferptr++]; | 129 | 5.24M | bufferptr += source->png_alpha; | 130 | 5.24M | } | 131 | 26.8k | } | 132 | 29.2k | return 1; | 133 | 29.2k | } |
Unexecuted instantiation: rdpng-16.c:get_gray_row |
134 | | |
135 | | |
136 | | METHODDEF(JDIMENSION) |
137 | | get_gray_rgb_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo) |
138 | | /* This version is for reading 8-bit-per-channel or 16-bit-per-channel |
139 | | * grayscale or grayscale + alpha PNG files and converting to extended RGB. |
140 | | */ |
141 | 146k | { |
142 | 146k | png_source_ptr source = (png_source_ptr)sinfo; |
143 | 146k | register _JSAMPROW ptr; |
144 | 146k | register _JSAMPLE *rescale = source->rescale; |
145 | 146k | JDIMENSION col; |
146 | 146k | register int rindex = rgb_red[cinfo->in_color_space]; |
147 | 146k | register int gindex = rgb_green[cinfo->in_color_space]; |
148 | 146k | register int bindex = rgb_blue[cinfo->in_color_space]; |
149 | 146k | register int aindex = alpha_index[cinfo->in_color_space]; |
150 | 146k | register int ps = rgb_pixelsize[cinfo->in_color_space]; |
151 | | |
152 | 146k | get_raw_row(cinfo, sinfo); |
153 | 146k | ptr = source->pub._buffer[0]; |
154 | | #if BITS_IN_JSAMPLE != 12 |
155 | 0 | if (source->png_bit_depth == cinfo->data_precision) { |
156 | 0 | _JSAMPLE *bufferptr = (_JSAMPLE *)source->iobuffer; |
157 | 0 | if (aindex >= 0) |
158 | 0 | GRAY_RGB_READ_LOOP(*bufferptr++, ptr[aindex] = _MAXJSAMPLE;, |
159 | 0 | bufferptr += source->png_alpha;) |
160 | 0 | else |
161 | 0 | GRAY_RGB_READ_LOOP(*bufferptr++, {}, bufferptr += source->png_alpha;) |
162 | 0 | } else |
163 | 0 | #endif |
164 | 146k | if (source->png_bit_depth == 16) { |
165 | 12.0k | register unsigned short *bufferptr = (unsigned short *)source->iobuffer; |
166 | 12.0k | if (aindex >= 0) |
167 | 2.41k | GRAY_RGB_READ_LOOP(rescale[*bufferptr++], |
168 | 12.0k | ptr[aindex] = (1 << cinfo->data_precision) - 1;, |
169 | 12.0k | bufferptr += source->png_alpha;) |
170 | 9.67k | else |
171 | 9.67k | GRAY_RGB_READ_LOOP(rescale[*bufferptr++], {}, |
172 | 12.0k | bufferptr += source->png_alpha;) |
173 | 134k | } else { |
174 | 134k | register unsigned char *bufferptr = source->iobuffer; |
175 | 134k | if (aindex >= 0) |
176 | 26.5k | GRAY_RGB_READ_LOOP(rescale[*bufferptr++], |
177 | 134k | ptr[aindex] = (1 << cinfo->data_precision) - 1;, |
178 | 134k | bufferptr += source->png_alpha;) |
179 | 107k | else |
180 | 107k | GRAY_RGB_READ_LOOP(rescale[*bufferptr++], {}, |
181 | 134k | bufferptr += source->png_alpha;) |
182 | 134k | } |
183 | 146k | return 1; |
184 | 146k | } Unexecuted instantiation: rdpng-8.c:get_gray_rgb_row rdpng-12.c:get_gray_rgb_row Line | Count | Source | 141 | 146k | { | 142 | 146k | png_source_ptr source = (png_source_ptr)sinfo; | 143 | 146k | register _JSAMPROW ptr; | 144 | 146k | register _JSAMPLE *rescale = source->rescale; | 145 | 146k | JDIMENSION col; | 146 | 146k | register int rindex = rgb_red[cinfo->in_color_space]; | 147 | 146k | register int gindex = rgb_green[cinfo->in_color_space]; | 148 | 146k | register int bindex = rgb_blue[cinfo->in_color_space]; | 149 | 146k | register int aindex = alpha_index[cinfo->in_color_space]; | 150 | 146k | register int ps = rgb_pixelsize[cinfo->in_color_space]; | 151 | | | 152 | 146k | get_raw_row(cinfo, sinfo); | 153 | 146k | ptr = source->pub._buffer[0]; | 154 | | #if BITS_IN_JSAMPLE != 12 | 155 | | if (source->png_bit_depth == cinfo->data_precision) { | 156 | | _JSAMPLE *bufferptr = (_JSAMPLE *)source->iobuffer; | 157 | | if (aindex >= 0) | 158 | | GRAY_RGB_READ_LOOP(*bufferptr++, ptr[aindex] = _MAXJSAMPLE;, | 159 | | bufferptr += source->png_alpha;) | 160 | | else | 161 | | GRAY_RGB_READ_LOOP(*bufferptr++, {}, bufferptr += source->png_alpha;) | 162 | | } else | 163 | | #endif | 164 | 146k | if (source->png_bit_depth == 16) { | 165 | 12.0k | register unsigned short *bufferptr = (unsigned short *)source->iobuffer; | 166 | 12.0k | if (aindex >= 0) | 167 | 2.41k | GRAY_RGB_READ_LOOP(rescale[*bufferptr++], | 168 | 12.0k | ptr[aindex] = (1 << cinfo->data_precision) - 1;, | 169 | 12.0k | bufferptr += source->png_alpha;) | 170 | 9.67k | else | 171 | 9.67k | GRAY_RGB_READ_LOOP(rescale[*bufferptr++], {}, | 172 | 12.0k | bufferptr += source->png_alpha;) | 173 | 134k | } else { | 174 | 134k | register unsigned char *bufferptr = source->iobuffer; | 175 | 134k | if (aindex >= 0) | 176 | 26.5k | GRAY_RGB_READ_LOOP(rescale[*bufferptr++], | 177 | 134k | ptr[aindex] = (1 << cinfo->data_precision) - 1;, | 178 | 134k | bufferptr += source->png_alpha;) | 179 | 107k | else | 180 | 107k | GRAY_RGB_READ_LOOP(rescale[*bufferptr++], {}, | 181 | 134k | bufferptr += source->png_alpha;) | 182 | 134k | } | 183 | 146k | return 1; | 184 | 146k | } |
Unexecuted instantiation: rdpng-16.c:get_gray_rgb_row |
185 | | |
186 | | |
187 | | METHODDEF(JDIMENSION) |
188 | | get_gray_cmyk_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo) |
189 | | /* This version is for reading 8-bit-per-channel or 16-bit-per-channel |
190 | | * grayscale or grayscale + alpha PNG files and converting to CMYK. |
191 | | */ |
192 | 29.2k | { |
193 | 29.2k | png_source_ptr source = (png_source_ptr)sinfo; |
194 | 29.2k | register _JSAMPROW ptr; |
195 | 29.2k | register _JSAMPLE *rescale = source->rescale; |
196 | 29.2k | JDIMENSION col; |
197 | | |
198 | 29.2k | get_raw_row(cinfo, sinfo); |
199 | 29.2k | ptr = source->pub._buffer[0]; |
200 | | #if BITS_IN_JSAMPLE != 12 |
201 | 0 | if (source->png_bit_depth == cinfo->data_precision) { |
202 | 0 | register _JSAMPLE *bufferptr = (_JSAMPLE *)source->iobuffer; |
203 | 0 | for (col = cinfo->image_width; col > 0; col--) { |
204 | 0 | _JSAMPLE gray = *bufferptr++; |
205 | 0 | bufferptr += source->png_alpha; |
206 | 0 | rgb_to_cmyk(_MAXJSAMPLE, gray, gray, gray, ptr, ptr + 1, ptr + 2, |
207 | 0 | ptr + 3); |
208 | 0 | ptr += 4; |
209 | 0 | } |
210 | 0 | } else |
211 | 0 | #endif |
212 | 29.2k | if (source->png_bit_depth == 16) { |
213 | 2.41k | unsigned short *bufferptr = (unsigned short *)source->iobuffer; |
214 | 100k | for (col = cinfo->image_width; col > 0; col--) { |
215 | 97.6k | _JSAMPLE gray = rescale[*bufferptr++]; |
216 | 97.6k | bufferptr += source->png_alpha; |
217 | 97.6k | rgb_to_cmyk((1 << cinfo->data_precision) - 1, gray, gray, gray, ptr, |
218 | 97.6k | ptr + 1, ptr + 2, ptr + 3); |
219 | 97.6k | ptr += 4; |
220 | 97.6k | } |
221 | 26.8k | } else { |
222 | 26.8k | register unsigned char *bufferptr = source->iobuffer; |
223 | 5.27M | for (col = cinfo->image_width; col > 0; col--) { |
224 | 5.24M | _JSAMPLE gray = rescale[*bufferptr++]; |
225 | 5.24M | bufferptr += source->png_alpha; |
226 | 5.24M | rgb_to_cmyk((1 << cinfo->data_precision) - 1, gray, gray, gray, ptr, |
227 | 5.24M | ptr + 1, ptr + 2, ptr + 3); |
228 | 5.24M | ptr += 4; |
229 | 5.24M | } |
230 | 26.8k | } |
231 | 29.2k | return 1; |
232 | 29.2k | } Unexecuted instantiation: rdpng-8.c:get_gray_cmyk_row rdpng-12.c:get_gray_cmyk_row Line | Count | Source | 192 | 29.2k | { | 193 | 29.2k | png_source_ptr source = (png_source_ptr)sinfo; | 194 | 29.2k | register _JSAMPROW ptr; | 195 | 29.2k | register _JSAMPLE *rescale = source->rescale; | 196 | 29.2k | JDIMENSION col; | 197 | | | 198 | 29.2k | get_raw_row(cinfo, sinfo); | 199 | 29.2k | ptr = source->pub._buffer[0]; | 200 | | #if BITS_IN_JSAMPLE != 12 | 201 | | if (source->png_bit_depth == cinfo->data_precision) { | 202 | | register _JSAMPLE *bufferptr = (_JSAMPLE *)source->iobuffer; | 203 | | for (col = cinfo->image_width; col > 0; col--) { | 204 | | _JSAMPLE gray = *bufferptr++; | 205 | | bufferptr += source->png_alpha; | 206 | | rgb_to_cmyk(_MAXJSAMPLE, gray, gray, gray, ptr, ptr + 1, ptr + 2, | 207 | | ptr + 3); | 208 | | ptr += 4; | 209 | | } | 210 | | } else | 211 | | #endif | 212 | 29.2k | if (source->png_bit_depth == 16) { | 213 | 2.41k | unsigned short *bufferptr = (unsigned short *)source->iobuffer; | 214 | 100k | for (col = cinfo->image_width; col > 0; col--) { | 215 | 97.6k | _JSAMPLE gray = rescale[*bufferptr++]; | 216 | 97.6k | bufferptr += source->png_alpha; | 217 | 97.6k | rgb_to_cmyk((1 << cinfo->data_precision) - 1, gray, gray, gray, ptr, | 218 | 97.6k | ptr + 1, ptr + 2, ptr + 3); | 219 | 97.6k | ptr += 4; | 220 | 97.6k | } | 221 | 26.8k | } else { | 222 | 26.8k | register unsigned char *bufferptr = source->iobuffer; | 223 | 5.27M | for (col = cinfo->image_width; col > 0; col--) { | 224 | 5.24M | _JSAMPLE gray = rescale[*bufferptr++]; | 225 | 5.24M | bufferptr += source->png_alpha; | 226 | 5.24M | rgb_to_cmyk((1 << cinfo->data_precision) - 1, gray, gray, gray, ptr, | 227 | 5.24M | ptr + 1, ptr + 2, ptr + 3); | 228 | 5.24M | ptr += 4; | 229 | 5.24M | } | 230 | 26.8k | } | 231 | 29.2k | return 1; | 232 | 29.2k | } |
Unexecuted instantiation: rdpng-16.c:get_gray_cmyk_row |
233 | | |
234 | | |
235 | 453k | #define RGB_READ_LOOP(read_op, alpha_set_op, pointer_op) { \ |
236 | 74.1M | for (col = cinfo->image_width; col > 0; col--) { \ |
237 | 73.7M | ptr[rindex] = read_op; \ |
238 | 73.7M | ptr[gindex] = read_op; \ |
239 | 73.7M | ptr[bindex] = read_op; \ |
240 | 73.7M | alpha_set_op \ |
241 | 73.7M | pointer_op \ |
242 | 73.7M | ptr += ps; \ |
243 | 73.7M | } \ |
244 | 453k | } |
245 | | |
246 | | |
247 | | METHODDEF(JDIMENSION) |
248 | | get_rgb_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo) |
249 | | /* This version is for reading 8-bit-per-channel or 16-bit-per-channel |
250 | | * truecolor or truecolor + alpha PNG files and converting to extended RGB. |
251 | | */ |
252 | 453k | { |
253 | 453k | png_source_ptr source = (png_source_ptr)sinfo; |
254 | 453k | register _JSAMPROW ptr; |
255 | 453k | register _JSAMPLE *rescale = source->rescale; |
256 | 453k | JDIMENSION col; |
257 | 453k | register int rindex = rgb_red[cinfo->in_color_space]; |
258 | 453k | register int gindex = rgb_green[cinfo->in_color_space]; |
259 | 453k | register int bindex = rgb_blue[cinfo->in_color_space]; |
260 | 453k | register int aindex = alpha_index[cinfo->in_color_space]; |
261 | 453k | register int ps = rgb_pixelsize[cinfo->in_color_space]; |
262 | | |
263 | 453k | get_raw_row(cinfo, sinfo); |
264 | 453k | ptr = source->pub._buffer[0]; |
265 | | #if BITS_IN_JSAMPLE != 12 |
266 | 0 | if (source->png_bit_depth == cinfo->data_precision) { |
267 | 0 | register _JSAMPLE *bufferptr = (_JSAMPLE *)source->iobuffer; |
268 | 0 | if (aindex >= 0) |
269 | 0 | RGB_READ_LOOP(*bufferptr++, ptr[aindex] = _MAXJSAMPLE;, |
270 | 0 | bufferptr += source->png_alpha;) |
271 | 0 | else |
272 | 0 | RGB_READ_LOOP(*bufferptr++, {}, bufferptr += source->png_alpha;) |
273 | 0 | } else |
274 | 0 | #endif |
275 | 453k | if (source->png_bit_depth == 16) { |
276 | 220k | unsigned short *bufferptr = (unsigned short *)source->iobuffer; |
277 | 220k | if (aindex >= 0) |
278 | 44.0k | RGB_READ_LOOP(rescale[*bufferptr++], |
279 | 220k | ptr[aindex] = (1 << cinfo->data_precision) - 1;, |
280 | 220k | bufferptr += source->png_alpha;) |
281 | 176k | else |
282 | 176k | RGB_READ_LOOP(rescale[*bufferptr++], {}, |
283 | 220k | bufferptr += source->png_alpha;) |
284 | 233k | } else { |
285 | 233k | register unsigned char *bufferptr = source->iobuffer; |
286 | 233k | if (aindex >= 0) |
287 | 46.2k | RGB_READ_LOOP(rescale[*bufferptr++], |
288 | 233k | ptr[aindex] = (1 << cinfo->data_precision) - 1;, |
289 | 233k | bufferptr += source->png_alpha;) |
290 | 186k | else |
291 | 186k | RGB_READ_LOOP(rescale[*bufferptr++], {}, |
292 | 233k | bufferptr += source->png_alpha;) |
293 | 233k | } |
294 | 453k | return 1; |
295 | 453k | } Unexecuted instantiation: rdpng-8.c:get_rgb_row Line | Count | Source | 252 | 453k | { | 253 | 453k | png_source_ptr source = (png_source_ptr)sinfo; | 254 | 453k | register _JSAMPROW ptr; | 255 | 453k | register _JSAMPLE *rescale = source->rescale; | 256 | 453k | JDIMENSION col; | 257 | 453k | register int rindex = rgb_red[cinfo->in_color_space]; | 258 | 453k | register int gindex = rgb_green[cinfo->in_color_space]; | 259 | 453k | register int bindex = rgb_blue[cinfo->in_color_space]; | 260 | 453k | register int aindex = alpha_index[cinfo->in_color_space]; | 261 | 453k | register int ps = rgb_pixelsize[cinfo->in_color_space]; | 262 | | | 263 | 453k | get_raw_row(cinfo, sinfo); | 264 | 453k | ptr = source->pub._buffer[0]; | 265 | | #if BITS_IN_JSAMPLE != 12 | 266 | | if (source->png_bit_depth == cinfo->data_precision) { | 267 | | register _JSAMPLE *bufferptr = (_JSAMPLE *)source->iobuffer; | 268 | | if (aindex >= 0) | 269 | | RGB_READ_LOOP(*bufferptr++, ptr[aindex] = _MAXJSAMPLE;, | 270 | | bufferptr += source->png_alpha;) | 271 | | else | 272 | | RGB_READ_LOOP(*bufferptr++, {}, bufferptr += source->png_alpha;) | 273 | | } else | 274 | | #endif | 275 | 453k | if (source->png_bit_depth == 16) { | 276 | 220k | unsigned short *bufferptr = (unsigned short *)source->iobuffer; | 277 | 220k | if (aindex >= 0) | 278 | 44.0k | RGB_READ_LOOP(rescale[*bufferptr++], | 279 | 220k | ptr[aindex] = (1 << cinfo->data_precision) - 1;, | 280 | 220k | bufferptr += source->png_alpha;) | 281 | 176k | else | 282 | 176k | RGB_READ_LOOP(rescale[*bufferptr++], {}, | 283 | 220k | bufferptr += source->png_alpha;) | 284 | 233k | } else { | 285 | 233k | register unsigned char *bufferptr = source->iobuffer; | 286 | 233k | if (aindex >= 0) | 287 | 46.2k | RGB_READ_LOOP(rescale[*bufferptr++], | 288 | 233k | ptr[aindex] = (1 << cinfo->data_precision) - 1;, | 289 | 233k | bufferptr += source->png_alpha;) | 290 | 186k | else | 291 | 186k | RGB_READ_LOOP(rescale[*bufferptr++], {}, | 292 | 233k | bufferptr += source->png_alpha;) | 293 | 233k | } | 294 | 453k | return 1; | 295 | 453k | } |
Unexecuted instantiation: rdpng-16.c:get_rgb_row |
296 | | |
297 | | |
298 | | METHODDEF(JDIMENSION) |
299 | | get_rgb_cmyk_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo) |
300 | | /* This version is for reading 8-bit-per-channel or 16-bit-per-channel |
301 | | * truecolor or truecolor + alpha PNG files and converting to CMYK. |
302 | | */ |
303 | 90.6k | { |
304 | 90.6k | png_source_ptr source = (png_source_ptr)sinfo; |
305 | 90.6k | register _JSAMPROW ptr; |
306 | 90.6k | register _JSAMPLE *rescale = source->rescale; |
307 | 90.6k | JDIMENSION col; |
308 | | |
309 | 90.6k | get_raw_row(cinfo, sinfo); |
310 | 90.6k | ptr = source->pub._buffer[0]; |
311 | | #if BITS_IN_JSAMPLE != 12 |
312 | 0 | if (source->png_bit_depth == cinfo->data_precision) { |
313 | 0 | register _JSAMPLE *bufferptr = (_JSAMPLE *)source->iobuffer; |
314 | 0 | for (col = cinfo->image_width; col > 0; col--) { |
315 | 0 | _JSAMPLE r = *bufferptr++; |
316 | 0 | _JSAMPLE g = *bufferptr++; |
317 | 0 | _JSAMPLE b = *bufferptr++; |
318 | 0 | bufferptr += source->png_alpha; |
319 | 0 | rgb_to_cmyk(_MAXJSAMPLE, r, g, b, ptr, ptr + 1, ptr + 2, ptr + 3); |
320 | 0 | ptr += 4; |
321 | 0 | } |
322 | 0 | } else |
323 | 0 | #endif |
324 | 90.6k | if (source->png_bit_depth == 16) { |
325 | 44.0k | unsigned short *bufferptr = (unsigned short *)source->iobuffer; |
326 | 3.35M | for (col = cinfo->image_width; col > 0; col--) { |
327 | 3.31M | _JSAMPLE r = rescale[*bufferptr++]; |
328 | 3.31M | _JSAMPLE g = rescale[*bufferptr++]; |
329 | 3.31M | _JSAMPLE b = rescale[*bufferptr++]; |
330 | 3.31M | bufferptr += source->png_alpha; |
331 | 3.31M | rgb_to_cmyk((1 << cinfo->data_precision) - 1, r, g, b, ptr, ptr + 1, |
332 | 3.31M | ptr + 2, ptr + 3); |
333 | 3.31M | ptr += 4; |
334 | 3.31M | } |
335 | 46.6k | } else { |
336 | 46.6k | register unsigned char *bufferptr = source->iobuffer; |
337 | 11.4M | for (col = cinfo->image_width; col > 0; col--) { |
338 | 11.4M | _JSAMPLE r = rescale[*bufferptr++]; |
339 | 11.4M | _JSAMPLE g = rescale[*bufferptr++]; |
340 | 11.4M | _JSAMPLE b = rescale[*bufferptr++]; |
341 | 11.4M | bufferptr += source->png_alpha; |
342 | 11.4M | rgb_to_cmyk((1 << cinfo->data_precision) - 1, r, g, b, ptr, ptr + 1, |
343 | 11.4M | ptr + 2, ptr + 3); |
344 | 11.4M | ptr += 4; |
345 | 11.4M | } |
346 | 46.6k | } |
347 | 90.6k | return 1; |
348 | 90.6k | } Unexecuted instantiation: rdpng-8.c:get_rgb_cmyk_row rdpng-12.c:get_rgb_cmyk_row Line | Count | Source | 303 | 90.6k | { | 304 | 90.6k | png_source_ptr source = (png_source_ptr)sinfo; | 305 | 90.6k | register _JSAMPROW ptr; | 306 | 90.6k | register _JSAMPLE *rescale = source->rescale; | 307 | 90.6k | JDIMENSION col; | 308 | | | 309 | 90.6k | get_raw_row(cinfo, sinfo); | 310 | 90.6k | ptr = source->pub._buffer[0]; | 311 | | #if BITS_IN_JSAMPLE != 12 | 312 | | if (source->png_bit_depth == cinfo->data_precision) { | 313 | | register _JSAMPLE *bufferptr = (_JSAMPLE *)source->iobuffer; | 314 | | for (col = cinfo->image_width; col > 0; col--) { | 315 | | _JSAMPLE r = *bufferptr++; | 316 | | _JSAMPLE g = *bufferptr++; | 317 | | _JSAMPLE b = *bufferptr++; | 318 | | bufferptr += source->png_alpha; | 319 | | rgb_to_cmyk(_MAXJSAMPLE, r, g, b, ptr, ptr + 1, ptr + 2, ptr + 3); | 320 | | ptr += 4; | 321 | | } | 322 | | } else | 323 | | #endif | 324 | 90.6k | if (source->png_bit_depth == 16) { | 325 | 44.0k | unsigned short *bufferptr = (unsigned short *)source->iobuffer; | 326 | 3.35M | for (col = cinfo->image_width; col > 0; col--) { | 327 | 3.31M | _JSAMPLE r = rescale[*bufferptr++]; | 328 | 3.31M | _JSAMPLE g = rescale[*bufferptr++]; | 329 | 3.31M | _JSAMPLE b = rescale[*bufferptr++]; | 330 | 3.31M | bufferptr += source->png_alpha; | 331 | 3.31M | rgb_to_cmyk((1 << cinfo->data_precision) - 1, r, g, b, ptr, ptr + 1, | 332 | 3.31M | ptr + 2, ptr + 3); | 333 | 3.31M | ptr += 4; | 334 | 3.31M | } | 335 | 46.6k | } else { | 336 | 46.6k | register unsigned char *bufferptr = source->iobuffer; | 337 | 11.4M | for (col = cinfo->image_width; col > 0; col--) { | 338 | 11.4M | _JSAMPLE r = rescale[*bufferptr++]; | 339 | 11.4M | _JSAMPLE g = rescale[*bufferptr++]; | 340 | 11.4M | _JSAMPLE b = rescale[*bufferptr++]; | 341 | 11.4M | bufferptr += source->png_alpha; | 342 | 11.4M | rgb_to_cmyk((1 << cinfo->data_precision) - 1, r, g, b, ptr, ptr + 1, | 343 | 11.4M | ptr + 2, ptr + 3); | 344 | 11.4M | ptr += 4; | 345 | 11.4M | } | 346 | 46.6k | } | 347 | 90.6k | return 1; | 348 | 90.6k | } |
Unexecuted instantiation: rdpng-16.c:get_rgb_cmyk_row |
349 | | |
350 | | |
351 | | METHODDEF(JDIMENSION) |
352 | | get_indexed_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo) |
353 | 9.94k | { |
354 | | /* This version is for reading 8-bit-per-channel indexed-color PNG files and |
355 | | * converting to extended RGB or CMYK. |
356 | | */ |
357 | 9.94k | png_source_ptr source = (png_source_ptr)sinfo; |
358 | 9.94k | register _JSAMPROW ptr; |
359 | 9.94k | register JSAMPLE *bufferptr = (JSAMPLE *)source->iobuffer; |
360 | 9.94k | register _JSAMPLE *rescale = source->rescale; |
361 | 9.94k | JDIMENSION col; |
362 | | |
363 | 9.94k | get_raw_row(cinfo, sinfo); |
364 | 9.94k | ptr = source->pub._buffer[0]; |
365 | | #if BITS_IN_JSAMPLE == 8 |
366 | 0 | if (source->png_bit_depth == cinfo->data_precision) { |
367 | 0 | if (cinfo->in_color_space == JCS_GRAYSCALE) { |
368 | 0 | for (col = cinfo->image_width; col > 0; col--) { |
369 | 0 | JSAMPLE index = *bufferptr++; |
370 | | |
371 | 0 | if (index >= source->colormap.n_entries) |
372 | 0 | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); |
373 | 0 | *ptr++ = source->colormap.entries[index].red; |
374 | 0 | } |
375 | 0 | } else if (cinfo->in_color_space == JCS_CMYK) { |
376 | 0 | for (col = cinfo->image_width; col > 0; col--) { |
377 | 0 | JSAMPLE index = *bufferptr++; |
378 | |
|
379 | 0 | if (index >= source->colormap.n_entries) |
380 | 0 | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); |
381 | 0 | rgb_to_cmyk(_MAXJSAMPLE, source->colormap.entries[index].red, |
382 | 0 | source->colormap.entries[index].green, |
383 | 0 | source->colormap.entries[index].blue, ptr, ptr + 1, |
384 | 0 | ptr + 2, ptr + 3); |
385 | 0 | ptr += 4; |
386 | 0 | } |
387 | 0 | } else { |
388 | 0 | register int rindex = rgb_red[cinfo->in_color_space]; |
389 | 0 | register int gindex = rgb_green[cinfo->in_color_space]; |
390 | 0 | register int bindex = rgb_blue[cinfo->in_color_space]; |
391 | 0 | register int aindex = alpha_index[cinfo->in_color_space]; |
392 | 0 | register int ps = rgb_pixelsize[cinfo->in_color_space]; |
393 | |
|
394 | 0 | for (col = cinfo->image_width; col > 0; col--) { |
395 | 0 | JSAMPLE index = *bufferptr++; |
396 | |
|
397 | 0 | if (index >= source->colormap.n_entries) |
398 | 0 | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); |
399 | 0 | ptr[rindex] = source->colormap.entries[index].red; |
400 | 0 | ptr[gindex] = source->colormap.entries[index].green; |
401 | 0 | ptr[bindex] = source->colormap.entries[index].blue; |
402 | 0 | if (aindex >= 0) |
403 | 0 | ptr[aindex] = _MAXJSAMPLE; |
404 | 0 | ptr += ps; |
405 | 0 | } |
406 | 0 | } |
407 | 0 | } else |
408 | 0 | #endif |
409 | 0 | { |
410 | 9.94k | if (cinfo->in_color_space == JCS_GRAYSCALE) { |
411 | 204 | for (col = cinfo->image_width; col > 0; col--) { |
412 | 179 | JSAMPLE index = *bufferptr++; |
413 | | |
414 | 179 | if (index >= source->colormap.n_entries) |
415 | 5 | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); |
416 | 179 | *ptr++ = rescale[source->colormap.entries[index].red]; |
417 | 179 | } |
418 | 9.91k | } else if (cinfo->in_color_space == JCS_CMYK) { |
419 | 4.04M | for (col = cinfo->image_width; col > 0; col--) { |
420 | 4.03M | JSAMPLE index = *bufferptr++; |
421 | | |
422 | 4.03M | if (index >= source->colormap.n_entries) |
423 | 23 | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); |
424 | 4.03M | rgb_to_cmyk((1 << cinfo->data_precision) - 1, |
425 | 4.03M | rescale[source->colormap.entries[index].red], |
426 | 4.03M | rescale[source->colormap.entries[index].green], |
427 | 4.03M | rescale[source->colormap.entries[index].blue], ptr, |
428 | 4.03M | ptr + 1, ptr + 2, ptr + 3); |
429 | 4.03M | ptr += 4; |
430 | 4.03M | } |
431 | 8.58k | } else { |
432 | 1.32k | register int rindex = rgb_red[cinfo->in_color_space]; |
433 | 1.32k | register int gindex = rgb_green[cinfo->in_color_space]; |
434 | 1.32k | register int bindex = rgb_blue[cinfo->in_color_space]; |
435 | 1.32k | register int aindex = alpha_index[cinfo->in_color_space]; |
436 | 1.32k | register int ps = rgb_pixelsize[cinfo->in_color_space]; |
437 | | |
438 | 134k | for (col = cinfo->image_width; col > 0; col--) { |
439 | 132k | JSAMPLE index = *bufferptr++; |
440 | | |
441 | 132k | if (index >= source->colormap.n_entries) |
442 | 180 | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); |
443 | 132k | ptr[rindex] = rescale[source->colormap.entries[index].red]; |
444 | 132k | ptr[gindex] = rescale[source->colormap.entries[index].green]; |
445 | 132k | ptr[bindex] = rescale[source->colormap.entries[index].blue]; |
446 | 132k | if (aindex >= 0) |
447 | 26.7k | ptr[aindex] = (1 << cinfo->data_precision) - 1; |
448 | 132k | ptr += ps; |
449 | 132k | } |
450 | 1.32k | } |
451 | 0 | } |
452 | 9.94k | return 1; |
453 | 9.94k | } Unexecuted instantiation: rdpng-8.c:get_indexed_row rdpng-12.c:get_indexed_row Line | Count | Source | 353 | 9.94k | { | 354 | | /* This version is for reading 8-bit-per-channel indexed-color PNG files and | 355 | | * converting to extended RGB or CMYK. | 356 | | */ | 357 | 9.94k | png_source_ptr source = (png_source_ptr)sinfo; | 358 | 9.94k | register _JSAMPROW ptr; | 359 | 9.94k | register JSAMPLE *bufferptr = (JSAMPLE *)source->iobuffer; | 360 | 9.94k | register _JSAMPLE *rescale = source->rescale; | 361 | 9.94k | JDIMENSION col; | 362 | | | 363 | 9.94k | get_raw_row(cinfo, sinfo); | 364 | 9.94k | ptr = source->pub._buffer[0]; | 365 | | #if BITS_IN_JSAMPLE == 8 | 366 | | if (source->png_bit_depth == cinfo->data_precision) { | 367 | | if (cinfo->in_color_space == JCS_GRAYSCALE) { | 368 | | for (col = cinfo->image_width; col > 0; col--) { | 369 | | JSAMPLE index = *bufferptr++; | 370 | | | 371 | | if (index >= source->colormap.n_entries) | 372 | | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); | 373 | | *ptr++ = source->colormap.entries[index].red; | 374 | | } | 375 | | } else if (cinfo->in_color_space == JCS_CMYK) { | 376 | | for (col = cinfo->image_width; col > 0; col--) { | 377 | | JSAMPLE index = *bufferptr++; | 378 | | | 379 | | if (index >= source->colormap.n_entries) | 380 | | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); | 381 | | rgb_to_cmyk(_MAXJSAMPLE, source->colormap.entries[index].red, | 382 | | source->colormap.entries[index].green, | 383 | | source->colormap.entries[index].blue, ptr, ptr + 1, | 384 | | ptr + 2, ptr + 3); | 385 | | ptr += 4; | 386 | | } | 387 | | } else { | 388 | | register int rindex = rgb_red[cinfo->in_color_space]; | 389 | | register int gindex = rgb_green[cinfo->in_color_space]; | 390 | | register int bindex = rgb_blue[cinfo->in_color_space]; | 391 | | register int aindex = alpha_index[cinfo->in_color_space]; | 392 | | register int ps = rgb_pixelsize[cinfo->in_color_space]; | 393 | | | 394 | | for (col = cinfo->image_width; col > 0; col--) { | 395 | | JSAMPLE index = *bufferptr++; | 396 | | | 397 | | if (index >= source->colormap.n_entries) | 398 | | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); | 399 | | ptr[rindex] = source->colormap.entries[index].red; | 400 | | ptr[gindex] = source->colormap.entries[index].green; | 401 | | ptr[bindex] = source->colormap.entries[index].blue; | 402 | | if (aindex >= 0) | 403 | | ptr[aindex] = _MAXJSAMPLE; | 404 | | ptr += ps; | 405 | | } | 406 | | } | 407 | | } else | 408 | | #endif | 409 | 9.94k | { | 410 | 9.94k | if (cinfo->in_color_space == JCS_GRAYSCALE) { | 411 | 204 | for (col = cinfo->image_width; col > 0; col--) { | 412 | 179 | JSAMPLE index = *bufferptr++; | 413 | | | 414 | 179 | if (index >= source->colormap.n_entries) | 415 | 5 | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); | 416 | 179 | *ptr++ = rescale[source->colormap.entries[index].red]; | 417 | 179 | } | 418 | 9.91k | } else if (cinfo->in_color_space == JCS_CMYK) { | 419 | 4.04M | for (col = cinfo->image_width; col > 0; col--) { | 420 | 4.03M | JSAMPLE index = *bufferptr++; | 421 | | | 422 | 4.03M | if (index >= source->colormap.n_entries) | 423 | 23 | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); | 424 | 4.03M | rgb_to_cmyk((1 << cinfo->data_precision) - 1, | 425 | 4.03M | rescale[source->colormap.entries[index].red], | 426 | 4.03M | rescale[source->colormap.entries[index].green], | 427 | 4.03M | rescale[source->colormap.entries[index].blue], ptr, | 428 | 4.03M | ptr + 1, ptr + 2, ptr + 3); | 429 | 4.03M | ptr += 4; | 430 | 4.03M | } | 431 | 8.58k | } else { | 432 | 1.32k | register int rindex = rgb_red[cinfo->in_color_space]; | 433 | 1.32k | register int gindex = rgb_green[cinfo->in_color_space]; | 434 | 1.32k | register int bindex = rgb_blue[cinfo->in_color_space]; | 435 | 1.32k | register int aindex = alpha_index[cinfo->in_color_space]; | 436 | 1.32k | register int ps = rgb_pixelsize[cinfo->in_color_space]; | 437 | | | 438 | 134k | for (col = cinfo->image_width; col > 0; col--) { | 439 | 132k | JSAMPLE index = *bufferptr++; | 440 | | | 441 | 132k | if (index >= source->colormap.n_entries) | 442 | 180 | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); | 443 | 132k | ptr[rindex] = rescale[source->colormap.entries[index].red]; | 444 | 132k | ptr[gindex] = rescale[source->colormap.entries[index].green]; | 445 | 132k | ptr[bindex] = rescale[source->colormap.entries[index].blue]; | 446 | 132k | if (aindex >= 0) | 447 | 26.7k | ptr[aindex] = (1 << cinfo->data_precision) - 1; | 448 | 132k | ptr += ps; | 449 | 132k | } | 450 | 1.32k | } | 451 | 9.94k | } | 452 | 9.94k | return 1; | 453 | 9.94k | } |
Unexecuted instantiation: rdpng-16.c:get_indexed_row |
454 | | |
455 | | |
456 | | #ifdef ZERO_BUFFERS |
457 | | |
458 | | static void *spng_malloc(size_t size) |
459 | | { |
460 | | return calloc(1, size); |
461 | | } |
462 | | |
463 | | #endif |
464 | | |
465 | | |
466 | | /* |
467 | | * Read the file header; return image size and component count. |
468 | | */ |
469 | | |
470 | | METHODDEF(void) |
471 | | start_input_png(j_compress_ptr cinfo, cjpeg_source_ptr sinfo) |
472 | 32.3k | { |
473 | 32.3k | png_source_ptr source = (png_source_ptr)sinfo; |
474 | 32.3k | struct spng_ihdr ihdr; |
475 | 32.3k | int png_components = 3; |
476 | 32.3k | boolean use_raw_buffer; |
477 | | #ifdef ZERO_BUFFERS |
478 | | struct spng_alloc alloc; |
479 | | |
480 | | alloc.malloc_fn = spng_malloc; |
481 | | alloc.realloc_fn = realloc; |
482 | | alloc.calloc_fn = calloc; |
483 | | alloc.free_fn = free; |
484 | | source->ctx = spng_ctx_new2(&alloc, 0); |
485 | | #else |
486 | 32.3k | source->ctx = spng_ctx_new(0); |
487 | 32.3k | #endif |
488 | 32.3k | if (!source->ctx) |
489 | 0 | ERREXITS(cinfo, JERR_PNG_LIBSPNG, "Could not create context"); |
490 | | |
491 | 32.3k | TRY_SPNG(spng_set_png_file(source->ctx, sinfo->input_file)); |
492 | | |
493 | 32.3k | TRY_SPNG(spng_get_ihdr(source->ctx, &ihdr)); |
494 | | |
495 | 32.3k | if (ihdr.width > JPEG_MAX_DIMENSION || ihdr.height > JPEG_MAX_DIMENSION) |
496 | 3.79k | ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, JPEG_MAX_DIMENSION); |
497 | 32.3k | if (ihdr.bit_depth != 8 && ihdr.bit_depth != 16) |
498 | 6.54k | ERREXIT(cinfo, JERR_PNG_BADDEPTH); |
499 | 32.3k | if (sinfo->max_pixels && |
500 | 20.6k | (unsigned long long)ihdr.width * ihdr.height > sinfo->max_pixels) |
501 | 252 | ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, sinfo->max_pixels); |
502 | | |
503 | 32.3k | cinfo->image_width = (JDIMENSION)ihdr.width; |
504 | 32.3k | cinfo->image_height = (JDIMENSION)ihdr.height; |
505 | 32.3k | source->png_bit_depth = ihdr.bit_depth; |
506 | 32.3k | source->png_color_type = ihdr.color_type; |
507 | | |
508 | | /* initialize flags to most common settings */ |
509 | 32.3k | use_raw_buffer = FALSE; /* do we map input buffer onto I/O buffer? */ |
510 | | |
511 | 32.3k | switch (ihdr.color_type) { |
512 | 1.21k | case SPNG_COLOR_TYPE_GRAYSCALE_ALPHA: |
513 | 8.08k | case SPNG_COLOR_TYPE_GRAYSCALE: |
514 | 8.08k | if (cinfo->in_color_space == JCS_UNKNOWN || |
515 | 8.08k | cinfo->in_color_space == JCS_RGB) |
516 | 0 | cinfo->in_color_space = JCS_GRAYSCALE; |
517 | 8.08k | TRACEMS3(cinfo, 1, JTRC_PNG_GRAYSCALE, ihdr.width, ihdr.height, |
518 | 8.08k | ihdr.bit_depth); |
519 | 8.08k | if (cinfo->in_color_space == JCS_GRAYSCALE) { |
520 | 1.15k | if (ihdr.color_type == SPNG_COLOR_TYPE_GRAYSCALE && |
521 | 981 | cinfo->data_precision == ihdr.bit_depth) { |
522 | 0 | source->pub.get_pixel_rows = get_raw_row; |
523 | 0 | use_raw_buffer = TRUE; |
524 | 0 | } else |
525 | 1.15k | source->pub.get_pixel_rows = get_gray_row; |
526 | 6.93k | } else if (IsExtRGB(cinfo->in_color_space)) |
527 | 5.77k | source->pub.get_pixel_rows = get_gray_rgb_row; |
528 | 1.15k | else if (cinfo->in_color_space == JCS_CMYK) |
529 | 1.15k | source->pub.get_pixel_rows = get_gray_cmyk_row; |
530 | 0 | else |
531 | 0 | ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); |
532 | 8.08k | if (ihdr.color_type == SPNG_COLOR_TYPE_GRAYSCALE_ALPHA) { |
533 | 1.21k | png_components = 2; |
534 | 1.21k | source->png_alpha = 1; |
535 | 6.86k | } else { |
536 | 6.86k | png_components = 1; |
537 | 6.86k | source->png_alpha = 0; |
538 | 6.86k | } |
539 | 8.08k | break; |
540 | | |
541 | 8.50k | case SPNG_COLOR_TYPE_TRUECOLOR: |
542 | 11.5k | case SPNG_COLOR_TYPE_TRUECOLOR_ALPHA: |
543 | 11.5k | if (cinfo->in_color_space == JCS_UNKNOWN) |
544 | 0 | cinfo->in_color_space = JCS_EXT_RGB; |
545 | 11.5k | TRACEMS3(cinfo, 1, JTRC_PNG_TRUECOLOR, ihdr.width, ihdr.height, |
546 | 11.5k | ihdr.bit_depth); |
547 | 11.5k | if (ihdr.color_type == SPNG_COLOR_TYPE_TRUECOLOR && |
548 | 8.50k | cinfo->data_precision == ihdr.bit_depth && |
549 | 0 | #if RGB_RED == 0 && RGB_GREEN == 1 && RGB_BLUE == 2 && RGB_PIXELSIZE == 3 |
550 | 0 | (cinfo->in_color_space == JCS_EXT_RGB || |
551 | 0 | cinfo->in_color_space == JCS_RGB)) { |
552 | | #else |
553 | | cinfo->in_color_space == JCS_EXT_RGB) { |
554 | | #endif |
555 | 0 | source->pub.get_pixel_rows = get_raw_row; |
556 | 0 | use_raw_buffer = TRUE; |
557 | 11.5k | } else if (IsExtRGB(cinfo->in_color_space)) |
558 | 8.25k | source->pub.get_pixel_rows = get_rgb_row; |
559 | 3.30k | else if (cinfo->in_color_space == JCS_CMYK) |
560 | 1.65k | source->pub.get_pixel_rows = get_rgb_cmyk_row; |
561 | 1.65k | else |
562 | 1.65k | ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); |
563 | 11.5k | if (ihdr.color_type == SPNG_COLOR_TYPE_TRUECOLOR_ALPHA) { |
564 | 2.61k | png_components = 4; |
565 | 2.61k | source->png_alpha = 1; |
566 | 8.94k | } else { |
567 | 8.94k | png_components = 3; |
568 | 8.94k | source->png_alpha = 0; |
569 | 8.94k | } |
570 | 11.5k | break; |
571 | | |
572 | 756 | case SPNG_COLOR_TYPE_INDEXED: |
573 | 756 | { |
574 | 756 | int i, gray = 1; |
575 | | |
576 | 756 | TRACEMS3(cinfo, 1, JTRC_PNG_INDEXED, ihdr.width, ihdr.height, |
577 | 756 | ihdr.bit_depth); |
578 | 756 | TRY_SPNG(spng_get_plte(source->ctx, &source->colormap)); |
579 | 756 | if (source->png_bit_depth != 8 || source->colormap.n_entries > 256) |
580 | 0 | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); |
581 | | |
582 | 66.3k | for (i = 0; i < (int)source->colormap.n_entries; i++) { |
583 | 65.5k | if (source->colormap.entries[i].red != |
584 | 65.5k | source->colormap.entries[i].green || |
585 | 8.26k | source->colormap.entries[i].green != |
586 | 8.26k | source->colormap.entries[i].blue) |
587 | 58.7k | gray = 0; |
588 | 65.5k | } |
589 | | |
590 | 756 | if ((cinfo->in_color_space == JCS_UNKNOWN || |
591 | 441 | cinfo->in_color_space == JCS_RGB) && gray) |
592 | 0 | cinfo->in_color_space = JCS_GRAYSCALE; |
593 | 756 | else if (cinfo->in_color_space == JCS_UNKNOWN) |
594 | 0 | cinfo->in_color_space = JCS_EXT_RGB; |
595 | 756 | if (cinfo->in_color_space == JCS_GRAYSCALE && !gray) |
596 | 53 | ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); |
597 | | |
598 | 756 | source->pub.get_pixel_rows = get_indexed_row; |
599 | 756 | png_components = 1; |
600 | 756 | source->png_alpha = 0; |
601 | 756 | break; |
602 | 8.50k | } |
603 | | |
604 | 0 | default: |
605 | 0 | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); |
606 | 32.3k | } |
607 | | |
608 | 18.3k | if (IsExtRGB(cinfo->in_color_space)) |
609 | 14.3k | cinfo->input_components = rgb_pixelsize[cinfo->in_color_space]; |
610 | 4.03k | else if (cinfo->in_color_space == JCS_GRAYSCALE) |
611 | 1.16k | cinfo->input_components = 1; |
612 | 2.86k | else if (cinfo->in_color_space == JCS_CMYK) |
613 | 2.86k | cinfo->input_components = 4; |
614 | | |
615 | | /* Allocate space for I/O buffer: 1 or 3 bytes or words/pixel. */ |
616 | 18.3k | source->buffer_width = |
617 | 18.3k | (size_t)ihdr.width * png_components * source->png_bit_depth / 8; |
618 | 18.3k | source->iobuffer = (unsigned char *) |
619 | 18.3k | (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, |
620 | 18.3k | source->buffer_width); |
621 | | |
622 | | /* Create compressor input buffer. */ |
623 | 18.3k | if (use_raw_buffer) { |
624 | | /* For unscaled raw-input case, we can just map it onto the I/O buffer. */ |
625 | | /* Synthesize a _JSAMPARRAY pointer structure */ |
626 | 0 | source->pixrow = (_JSAMPROW)source->iobuffer; |
627 | 0 | source->pub._buffer = &source->pixrow; |
628 | 0 | source->pub.buffer_height = 1; |
629 | 18.3k | } else { |
630 | 18.3k | unsigned int maxval = source->png_bit_depth == 16 ? 65535 : 255; |
631 | 18.3k | size_t val, half_maxval; |
632 | | |
633 | | /* Need to translate anyway, so make a separate sample buffer. */ |
634 | 18.3k | source->pub._buffer = (_JSAMPARRAY)(*cinfo->mem->alloc_sarray) |
635 | 18.3k | ((j_common_ptr)cinfo, JPOOL_IMAGE, |
636 | 18.3k | (JDIMENSION)ihdr.width * cinfo->input_components, (JDIMENSION)1); |
637 | 18.3k | source->pub.buffer_height = 1; |
638 | | |
639 | | /* Compute the rescaling array. */ |
640 | 18.3k | source->rescale = (_JSAMPLE *) |
641 | 18.3k | (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, |
642 | 18.3k | (maxval + 1L) * sizeof(_JSAMPLE)); |
643 | 18.3k | memset(source->rescale, 0, (maxval + 1L) * sizeof(_JSAMPLE)); |
644 | 18.3k | half_maxval = maxval / 2; |
645 | 329M | for (val = 0; val <= maxval; val++) { |
646 | | /* The multiplication here must be done in 32 bits to avoid overflow */ |
647 | 329M | source->rescale[val] = |
648 | 329M | (_JSAMPLE)((val * ((1 << cinfo->data_precision) - 1) + half_maxval) / |
649 | 329M | maxval); |
650 | 329M | } |
651 | 18.3k | } |
652 | | |
653 | 18.3k | TRY_SPNG(spng_decode_image(source->ctx, NULL, 0, SPNG_FMT_PNG, |
654 | 18.3k | SPNG_DECODE_PROGRESSIVE)); |
655 | 18.3k | } Unexecuted instantiation: rdpng-8.c:start_input_png rdpng-12.c:start_input_png Line | Count | Source | 472 | 32.3k | { | 473 | 32.3k | png_source_ptr source = (png_source_ptr)sinfo; | 474 | 32.3k | struct spng_ihdr ihdr; | 475 | 32.3k | int png_components = 3; | 476 | 32.3k | boolean use_raw_buffer; | 477 | | #ifdef ZERO_BUFFERS | 478 | | struct spng_alloc alloc; | 479 | | | 480 | | alloc.malloc_fn = spng_malloc; | 481 | | alloc.realloc_fn = realloc; | 482 | | alloc.calloc_fn = calloc; | 483 | | alloc.free_fn = free; | 484 | | source->ctx = spng_ctx_new2(&alloc, 0); | 485 | | #else | 486 | 32.3k | source->ctx = spng_ctx_new(0); | 487 | 32.3k | #endif | 488 | 32.3k | if (!source->ctx) | 489 | 0 | ERREXITS(cinfo, JERR_PNG_LIBSPNG, "Could not create context"); | 490 | | | 491 | 32.3k | TRY_SPNG(spng_set_png_file(source->ctx, sinfo->input_file)); | 492 | | | 493 | 32.3k | TRY_SPNG(spng_get_ihdr(source->ctx, &ihdr)); | 494 | | | 495 | 32.3k | if (ihdr.width > JPEG_MAX_DIMENSION || ihdr.height > JPEG_MAX_DIMENSION) | 496 | 3.79k | ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, JPEG_MAX_DIMENSION); | 497 | 32.3k | if (ihdr.bit_depth != 8 && ihdr.bit_depth != 16) | 498 | 6.54k | ERREXIT(cinfo, JERR_PNG_BADDEPTH); | 499 | 32.3k | if (sinfo->max_pixels && | 500 | 20.6k | (unsigned long long)ihdr.width * ihdr.height > sinfo->max_pixels) | 501 | 252 | ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, sinfo->max_pixels); | 502 | | | 503 | 32.3k | cinfo->image_width = (JDIMENSION)ihdr.width; | 504 | 32.3k | cinfo->image_height = (JDIMENSION)ihdr.height; | 505 | 32.3k | source->png_bit_depth = ihdr.bit_depth; | 506 | 32.3k | source->png_color_type = ihdr.color_type; | 507 | | | 508 | | /* initialize flags to most common settings */ | 509 | 32.3k | use_raw_buffer = FALSE; /* do we map input buffer onto I/O buffer? */ | 510 | | | 511 | 32.3k | switch (ihdr.color_type) { | 512 | 1.21k | case SPNG_COLOR_TYPE_GRAYSCALE_ALPHA: | 513 | 8.08k | case SPNG_COLOR_TYPE_GRAYSCALE: | 514 | 8.08k | if (cinfo->in_color_space == JCS_UNKNOWN || | 515 | 8.08k | cinfo->in_color_space == JCS_RGB) | 516 | 0 | cinfo->in_color_space = JCS_GRAYSCALE; | 517 | 8.08k | TRACEMS3(cinfo, 1, JTRC_PNG_GRAYSCALE, ihdr.width, ihdr.height, | 518 | 8.08k | ihdr.bit_depth); | 519 | 8.08k | if (cinfo->in_color_space == JCS_GRAYSCALE) { | 520 | 1.15k | if (ihdr.color_type == SPNG_COLOR_TYPE_GRAYSCALE && | 521 | 981 | cinfo->data_precision == ihdr.bit_depth) { | 522 | 0 | source->pub.get_pixel_rows = get_raw_row; | 523 | 0 | use_raw_buffer = TRUE; | 524 | 0 | } else | 525 | 1.15k | source->pub.get_pixel_rows = get_gray_row; | 526 | 6.93k | } else if (IsExtRGB(cinfo->in_color_space)) | 527 | 5.77k | source->pub.get_pixel_rows = get_gray_rgb_row; | 528 | 1.15k | else if (cinfo->in_color_space == JCS_CMYK) | 529 | 1.15k | source->pub.get_pixel_rows = get_gray_cmyk_row; | 530 | 0 | else | 531 | 0 | ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); | 532 | 8.08k | if (ihdr.color_type == SPNG_COLOR_TYPE_GRAYSCALE_ALPHA) { | 533 | 1.21k | png_components = 2; | 534 | 1.21k | source->png_alpha = 1; | 535 | 6.86k | } else { | 536 | 6.86k | png_components = 1; | 537 | 6.86k | source->png_alpha = 0; | 538 | 6.86k | } | 539 | 8.08k | break; | 540 | | | 541 | 8.50k | case SPNG_COLOR_TYPE_TRUECOLOR: | 542 | 11.5k | case SPNG_COLOR_TYPE_TRUECOLOR_ALPHA: | 543 | 11.5k | if (cinfo->in_color_space == JCS_UNKNOWN) | 544 | 0 | cinfo->in_color_space = JCS_EXT_RGB; | 545 | 11.5k | TRACEMS3(cinfo, 1, JTRC_PNG_TRUECOLOR, ihdr.width, ihdr.height, | 546 | 11.5k | ihdr.bit_depth); | 547 | 11.5k | if (ihdr.color_type == SPNG_COLOR_TYPE_TRUECOLOR && | 548 | 8.50k | cinfo->data_precision == ihdr.bit_depth && | 549 | 0 | #if RGB_RED == 0 && RGB_GREEN == 1 && RGB_BLUE == 2 && RGB_PIXELSIZE == 3 | 550 | 0 | (cinfo->in_color_space == JCS_EXT_RGB || | 551 | 0 | cinfo->in_color_space == JCS_RGB)) { | 552 | | #else | 553 | | cinfo->in_color_space == JCS_EXT_RGB) { | 554 | | #endif | 555 | 0 | source->pub.get_pixel_rows = get_raw_row; | 556 | 0 | use_raw_buffer = TRUE; | 557 | 11.5k | } else if (IsExtRGB(cinfo->in_color_space)) | 558 | 8.25k | source->pub.get_pixel_rows = get_rgb_row; | 559 | 3.30k | else if (cinfo->in_color_space == JCS_CMYK) | 560 | 1.65k | source->pub.get_pixel_rows = get_rgb_cmyk_row; | 561 | 1.65k | else | 562 | 1.65k | ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); | 563 | 11.5k | if (ihdr.color_type == SPNG_COLOR_TYPE_TRUECOLOR_ALPHA) { | 564 | 2.61k | png_components = 4; | 565 | 2.61k | source->png_alpha = 1; | 566 | 8.94k | } else { | 567 | 8.94k | png_components = 3; | 568 | 8.94k | source->png_alpha = 0; | 569 | 8.94k | } | 570 | 11.5k | break; | 571 | | | 572 | 756 | case SPNG_COLOR_TYPE_INDEXED: | 573 | 756 | { | 574 | 756 | int i, gray = 1; | 575 | | | 576 | 756 | TRACEMS3(cinfo, 1, JTRC_PNG_INDEXED, ihdr.width, ihdr.height, | 577 | 756 | ihdr.bit_depth); | 578 | 756 | TRY_SPNG(spng_get_plte(source->ctx, &source->colormap)); | 579 | 756 | if (source->png_bit_depth != 8 || source->colormap.n_entries > 256) | 580 | 0 | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); | 581 | | | 582 | 66.3k | for (i = 0; i < (int)source->colormap.n_entries; i++) { | 583 | 65.5k | if (source->colormap.entries[i].red != | 584 | 65.5k | source->colormap.entries[i].green || | 585 | 8.26k | source->colormap.entries[i].green != | 586 | 8.26k | source->colormap.entries[i].blue) | 587 | 58.7k | gray = 0; | 588 | 65.5k | } | 589 | | | 590 | 756 | if ((cinfo->in_color_space == JCS_UNKNOWN || | 591 | 441 | cinfo->in_color_space == JCS_RGB) && gray) | 592 | 0 | cinfo->in_color_space = JCS_GRAYSCALE; | 593 | 756 | else if (cinfo->in_color_space == JCS_UNKNOWN) | 594 | 0 | cinfo->in_color_space = JCS_EXT_RGB; | 595 | 756 | if (cinfo->in_color_space == JCS_GRAYSCALE && !gray) | 596 | 53 | ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); | 597 | | | 598 | 756 | source->pub.get_pixel_rows = get_indexed_row; | 599 | 756 | png_components = 1; | 600 | 756 | source->png_alpha = 0; | 601 | 756 | break; | 602 | 8.50k | } | 603 | | | 604 | 0 | default: | 605 | 0 | ERREXIT(cinfo, JERR_PNG_OUTOFRANGE); | 606 | 32.3k | } | 607 | | | 608 | 18.3k | if (IsExtRGB(cinfo->in_color_space)) | 609 | 14.3k | cinfo->input_components = rgb_pixelsize[cinfo->in_color_space]; | 610 | 4.03k | else if (cinfo->in_color_space == JCS_GRAYSCALE) | 611 | 1.16k | cinfo->input_components = 1; | 612 | 2.86k | else if (cinfo->in_color_space == JCS_CMYK) | 613 | 2.86k | cinfo->input_components = 4; | 614 | | | 615 | | /* Allocate space for I/O buffer: 1 or 3 bytes or words/pixel. */ | 616 | 18.3k | source->buffer_width = | 617 | 18.3k | (size_t)ihdr.width * png_components * source->png_bit_depth / 8; | 618 | 18.3k | source->iobuffer = (unsigned char *) | 619 | 18.3k | (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, | 620 | 18.3k | source->buffer_width); | 621 | | | 622 | | /* Create compressor input buffer. */ | 623 | 18.3k | if (use_raw_buffer) { | 624 | | /* For unscaled raw-input case, we can just map it onto the I/O buffer. */ | 625 | | /* Synthesize a _JSAMPARRAY pointer structure */ | 626 | 0 | source->pixrow = (_JSAMPROW)source->iobuffer; | 627 | 0 | source->pub._buffer = &source->pixrow; | 628 | 0 | source->pub.buffer_height = 1; | 629 | 18.3k | } else { | 630 | 18.3k | unsigned int maxval = source->png_bit_depth == 16 ? 65535 : 255; | 631 | 18.3k | size_t val, half_maxval; | 632 | | | 633 | | /* Need to translate anyway, so make a separate sample buffer. */ | 634 | 18.3k | source->pub._buffer = (_JSAMPARRAY)(*cinfo->mem->alloc_sarray) | 635 | 18.3k | ((j_common_ptr)cinfo, JPOOL_IMAGE, | 636 | 18.3k | (JDIMENSION)ihdr.width * cinfo->input_components, (JDIMENSION)1); | 637 | 18.3k | source->pub.buffer_height = 1; | 638 | | | 639 | | /* Compute the rescaling array. */ | 640 | 18.3k | source->rescale = (_JSAMPLE *) | 641 | 18.3k | (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, | 642 | 18.3k | (maxval + 1L) * sizeof(_JSAMPLE)); | 643 | 18.3k | memset(source->rescale, 0, (maxval + 1L) * sizeof(_JSAMPLE)); | 644 | 18.3k | half_maxval = maxval / 2; | 645 | 329M | for (val = 0; val <= maxval; val++) { | 646 | | /* The multiplication here must be done in 32 bits to avoid overflow */ | 647 | 329M | source->rescale[val] = | 648 | 329M | (_JSAMPLE)((val * ((1 << cinfo->data_precision) - 1) + half_maxval) / | 649 | 329M | maxval); | 650 | 329M | } | 651 | 18.3k | } | 652 | | | 653 | 18.3k | TRY_SPNG(spng_decode_image(source->ctx, NULL, 0, SPNG_FMT_PNG, | 654 | 18.3k | SPNG_DECODE_PROGRESSIVE)); | 655 | 18.3k | } |
Unexecuted instantiation: rdpng-16.c:start_input_png |
656 | | |
657 | | |
658 | | /* |
659 | | * Return the ICC profile (if any) embedded in the PNG image. |
660 | | */ |
661 | | |
662 | | METHODDEF(boolean) |
663 | | read_icc_profile_png(j_compress_ptr cinfo, cjpeg_source_ptr sinfo, |
664 | | JOCTET **icc_data_ptr, unsigned int *icc_data_len) |
665 | 7.52k | { |
666 | 7.52k | png_source_ptr source = (png_source_ptr)sinfo; |
667 | 7.52k | struct spng_iccp iccp; |
668 | | |
669 | 7.52k | if (!icc_data_ptr || !icc_data_len) |
670 | 0 | ERREXIT(cinfo, JERR_BUFFER_SIZE); |
671 | | |
672 | 7.52k | if (source->ctx && spng_get_iccp(source->ctx, &iccp) == 0) { |
673 | 7 | *icc_data_ptr = (JOCTET *)iccp.profile; |
674 | 7 | *icc_data_len = (unsigned int)iccp.profile_len; |
675 | 7 | return TRUE; |
676 | 7 | } |
677 | | |
678 | 7.51k | return FALSE; |
679 | 7.52k | } Unexecuted instantiation: rdpng-8.c:read_icc_profile_png rdpng-12.c:read_icc_profile_png Line | Count | Source | 665 | 7.52k | { | 666 | 7.52k | png_source_ptr source = (png_source_ptr)sinfo; | 667 | 7.52k | struct spng_iccp iccp; | 668 | | | 669 | 7.52k | if (!icc_data_ptr || !icc_data_len) | 670 | 0 | ERREXIT(cinfo, JERR_BUFFER_SIZE); | 671 | | | 672 | 7.52k | if (source->ctx && spng_get_iccp(source->ctx, &iccp) == 0) { | 673 | 7 | *icc_data_ptr = (JOCTET *)iccp.profile; | 674 | 7 | *icc_data_len = (unsigned int)iccp.profile_len; | 675 | 7 | return TRUE; | 676 | 7 | } | 677 | | | 678 | 7.51k | return FALSE; | 679 | 7.52k | } |
Unexecuted instantiation: rdpng-16.c:read_icc_profile_png |
680 | | |
681 | | |
682 | | /* |
683 | | * Finish up at the end of the file. |
684 | | */ |
685 | | |
686 | | METHODDEF(void) |
687 | | finish_input_png(j_compress_ptr cinfo, cjpeg_source_ptr sinfo) |
688 | 32.3k | { |
689 | 32.3k | png_source_ptr source = (png_source_ptr)sinfo; |
690 | | |
691 | 32.3k | if (source->ctx) { |
692 | 32.3k | spng_decode_chunks(source->ctx); |
693 | 32.3k | spng_ctx_free(source->ctx); |
694 | 32.3k | source->ctx = NULL; |
695 | 32.3k | } |
696 | 32.3k | } Unexecuted instantiation: rdpng-8.c:finish_input_png rdpng-12.c:finish_input_png Line | Count | Source | 688 | 32.3k | { | 689 | 32.3k | png_source_ptr source = (png_source_ptr)sinfo; | 690 | | | 691 | 32.3k | if (source->ctx) { | 692 | 32.3k | spng_decode_chunks(source->ctx); | 693 | 32.3k | spng_ctx_free(source->ctx); | 694 | | source->ctx = NULL; | 695 | 32.3k | } | 696 | 32.3k | } |
Unexecuted instantiation: rdpng-16.c:finish_input_png |
697 | | |
698 | | |
699 | | /* |
700 | | * The module selection routine for PNG format input. |
701 | | */ |
702 | | |
703 | | GLOBAL(cjpeg_source_ptr) |
704 | | _jinit_read_png(j_compress_ptr cinfo) |
705 | 32.3k | { |
706 | 32.3k | png_source_ptr source; |
707 | | |
708 | | #if BITS_IN_JSAMPLE == 8 |
709 | 0 | if (cinfo->data_precision > BITS_IN_JSAMPLE || cinfo->data_precision < 2) |
710 | | #else |
711 | 32.3k | if (cinfo->data_precision > BITS_IN_JSAMPLE || |
712 | 32.3k | cinfo->data_precision < BITS_IN_JSAMPLE - 3) |
713 | 0 | #endif |
714 | 0 | ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); |
715 | | |
716 | | /* Create module interface object */ |
717 | 32.3k | source = (png_source_ptr) |
718 | 32.3k | (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, |
719 | 32.3k | sizeof(png_source_struct)); |
720 | | /* Fill in method ptrs, except get_pixel_rows which start_input sets */ |
721 | 32.3k | source->pub.start_input = start_input_png; |
722 | 32.3k | source->pub.read_icc_profile = read_icc_profile_png; |
723 | 32.3k | source->pub.finish_input = finish_input_png; |
724 | 32.3k | source->pub.max_pixels = 0; |
725 | | |
726 | 32.3k | return (cjpeg_source_ptr)source; |
727 | 32.3k | } Unexecuted instantiation: jinit_read_png Line | Count | Source | 705 | 32.3k | { | 706 | 32.3k | png_source_ptr source; | 707 | | | 708 | | #if BITS_IN_JSAMPLE == 8 | 709 | | if (cinfo->data_precision > BITS_IN_JSAMPLE || cinfo->data_precision < 2) | 710 | | #else | 711 | 32.3k | if (cinfo->data_precision > BITS_IN_JSAMPLE || | 712 | 32.3k | cinfo->data_precision < BITS_IN_JSAMPLE - 3) | 713 | 0 | #endif | 714 | 0 | ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); | 715 | | | 716 | | /* Create module interface object */ | 717 | 32.3k | source = (png_source_ptr) | 718 | 32.3k | (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, | 719 | 32.3k | sizeof(png_source_struct)); | 720 | | /* Fill in method ptrs, except get_pixel_rows which start_input sets */ | 721 | 32.3k | source->pub.start_input = start_input_png; | 722 | 32.3k | source->pub.read_icc_profile = read_icc_profile_png; | 723 | 32.3k | source->pub.finish_input = finish_input_png; | 724 | 32.3k | source->pub.max_pixels = 0; | 725 | | | 726 | 32.3k | return (cjpeg_source_ptr)source; | 727 | 32.3k | } |
Unexecuted instantiation: j16init_read_png |
728 | | |
729 | | #endif /* defined(PNG_SUPPORTED) && |
730 | | (BITS_IN_JSAMPLE != 16 || defined(C_LOSSLESS_SUPPORTED)) */ |