Coverage Report

Created: 2026-07-16 06:47

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libjpeg-turbo.main/src/rdppm.c
Line
Count
Source
1
/*
2
 * rdppm.c
3
 *
4
 * This file was part of the Independent JPEG Group's software:
5
 * Copyright (C) 1991-1997, Thomas G. Lane.
6
 * Modified 2009 by Bill Allombert, Guido Vollbeding.
7
 * libjpeg-turbo Modifications:
8
 * Copyright (C) 2015-2017, 2020-2026, D. R. Commander.
9
 * For conditions of distribution and use, see the accompanying README.ijg
10
 * file.
11
 *
12
 * This file contains routines to read input images in PPM/PGM format.
13
 * The extended 2-byte-per-sample raw PPM/PGM formats are supported.
14
 * The PBMPLUS library is NOT required to compile this software
15
 * (but it is highly useful as a set of PPM image manipulation programs).
16
 *
17
 * These routines may need modification for non-Unix environments or
18
 * specialized applications.  As they stand, they assume input from
19
 * an ordinary stdio stream.  They further assume that reading begins
20
 * at the start of the file; start_input may need work if the
21
 * user interface has already read some data (e.g., to determine that
22
 * the file is indeed PPM format).
23
 */
24
25
#include "cmyk.h"
26
#include "cdjpeg.h"             /* Common decls for cjpeg/djpeg applications */
27
28
#if defined(PPM_SUPPORTED) && \
29
    (BITS_IN_JSAMPLE != 16 || defined(C_LOSSLESS_SUPPORTED))
30
31
32
/* Portions of this code are based on the PBMPLUS library, which is:
33
**
34
** Copyright (C) 1988 by Jef Poskanzer.
35
**
36
** Permission to use, copy, modify, and distribute this software and its
37
** documentation for any purpose and without fee is hereby granted, provided
38
** that the above copyright notice appear in all copies and that both that
39
** copyright notice and this permission notice appear in supporting
40
** documentation.  This software is provided "as is" without express or
41
** implied warranty.
42
*/
43
44
45
#define ReadOK(file, buffer, len) \
46
25.3M
  (fread(buffer, 1, len, file) == ((size_t)(len)))
47
48
static int alpha_index[JPEG_NUMCS] = {
49
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 3, 0, 0, -1
50
};
51
52
53
/* Private version of data source object */
54
55
typedef struct {
56
  struct cjpeg_source_struct pub; /* public fields */
57
58
  /* Usually these two pointers point to the same place: */
59
  unsigned char *iobuffer;      /* fread's I/O buffer */
60
  _JSAMPROW pixrow;             /* compressor input buffer */
61
  size_t buffer_width;          /* width of I/O buffer */
62
  _JSAMPLE *rescale;            /* => maxval-remapping array, or NULL */
63
  unsigned int maxval;
64
} ppm_source_struct;
65
66
typedef ppm_source_struct *ppm_source_ptr;
67
68
69
LOCAL(int)
70
pbm_getc(FILE *infile)
71
/* Read next char, skipping over any comments */
72
/* A comment/newline sequence is returned as a newline */
73
294k
{
74
294k
  register int ch;
75
76
294k
  ch = getc(infile);
77
294k
  if (ch == '#') {
78
33.8k
    do {
79
33.8k
      ch = getc(infile);
80
33.8k
    } while (ch != '\n' && ch != EOF);
81
3.59k
  }
82
294k
  return ch;
83
294k
}
rdppm-8.c:pbm_getc
Line
Count
Source
73
294k
{
74
294k
  register int ch;
75
76
294k
  ch = getc(infile);
77
294k
  if (ch == '#') {
78
33.8k
    do {
79
33.8k
      ch = getc(infile);
80
33.8k
    } while (ch != '\n' && ch != EOF);
81
3.59k
  }
82
294k
  return ch;
83
294k
}
Unexecuted instantiation: rdppm-12.c:pbm_getc
Unexecuted instantiation: rdppm-16.c:pbm_getc
84
85
86
LOCAL(unsigned int)
87
read_pbm_integer(j_compress_ptr cinfo, FILE *infile, unsigned int maxval)
88
/* Read an unsigned decimal integer from the PPM file */
89
/* Swallows one trailing character after the integer */
90
/* Note that on a 16-bit-int machine, only values up to 64k can be read. */
91
/* This should not be a problem in practice. */
92
123k
{
93
123k
  register int ch;
94
123k
  register unsigned int val;
95
96
  /* Skip any leading whitespace */
97
130k
  do {
98
130k
    ch = pbm_getc(infile);
99
130k
    if (ch == EOF)
100
2.75k
      ERREXIT(cinfo, JERR_INPUT_EOF);
101
130k
  } while (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r');
102
103
123k
  if (ch < '0' || ch > '9')
104
247
    ERREXIT(cinfo, JERR_PPM_NONNUMERIC);
105
106
123k
  val = ch - '0';
107
167k
  while ((ch = pbm_getc(infile)) >= '0' && ch <= '9') {
108
44.2k
    val *= 10;
109
44.2k
    val += ch - '0';
110
44.2k
    if (val > maxval)
111
132
      ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
112
44.2k
  }
113
114
123k
  return val;
115
123k
}
rdppm-8.c:read_pbm_integer
Line
Count
Source
92
123k
{
93
123k
  register int ch;
94
123k
  register unsigned int val;
95
96
  /* Skip any leading whitespace */
97
130k
  do {
98
130k
    ch = pbm_getc(infile);
99
130k
    if (ch == EOF)
100
2.75k
      ERREXIT(cinfo, JERR_INPUT_EOF);
101
130k
  } while (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r');
102
103
123k
  if (ch < '0' || ch > '9')
104
247
    ERREXIT(cinfo, JERR_PPM_NONNUMERIC);
105
106
123k
  val = ch - '0';
107
167k
  while ((ch = pbm_getc(infile)) >= '0' && ch <= '9') {
108
44.2k
    val *= 10;
109
44.2k
    val += ch - '0';
110
44.2k
    if (val > maxval)
111
132
      ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
112
44.2k
  }
113
114
123k
  return val;
115
123k
}
Unexecuted instantiation: rdppm-12.c:read_pbm_integer
Unexecuted instantiation: rdppm-16.c:read_pbm_integer
116
117
118
/*
119
 * Read one row of pixels.
120
 *
121
 * We provide several different versions depending on input file format.
122
 * In all cases, input is scaled to cinfo->data_precision.
123
 *
124
 * A really fast path is provided for reading byte/sample raw files with
125
 * maxval <= _MAXJSAMPLE and maxval == (1U << cinfo->data_precision) - 1U,
126
 * which is the normal case for 8-bit data.
127
 */
128
129
130
METHODDEF(JDIMENSION)
131
get_text_gray_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
132
/* This version is for reading text-format PGM files with any maxval */
133
1.29k
{
134
1.29k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
135
1.29k
  FILE *infile = source->pub.input_file;
136
1.29k
  register _JSAMPROW ptr;
137
1.29k
  register _JSAMPLE *rescale = source->rescale;
138
1.29k
  JDIMENSION col;
139
1.29k
  unsigned int maxval = source->maxval;
140
141
1.29k
  ptr = source->pub._buffer[0];
142
3.83k
  for (col = cinfo->image_width; col > 0; col--) {
143
2.53k
    *ptr++ = rescale[read_pbm_integer(cinfo, infile, maxval)];
144
2.53k
  }
145
1.29k
  return 1;
146
1.29k
}
rdppm-8.c:get_text_gray_row
Line
Count
Source
133
1.29k
{
134
1.29k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
135
1.29k
  FILE *infile = source->pub.input_file;
136
1.29k
  register _JSAMPROW ptr;
137
1.29k
  register _JSAMPLE *rescale = source->rescale;
138
1.29k
  JDIMENSION col;
139
1.29k
  unsigned int maxval = source->maxval;
140
141
1.29k
  ptr = source->pub._buffer[0];
142
3.83k
  for (col = cinfo->image_width; col > 0; col--) {
143
2.53k
    *ptr++ = rescale[read_pbm_integer(cinfo, infile, maxval)];
144
2.53k
  }
145
1.29k
  return 1;
146
1.29k
}
Unexecuted instantiation: rdppm-12.c:get_text_gray_row
Unexecuted instantiation: rdppm-16.c:get_text_gray_row
147
148
149
18.0M
#define GRAY_RGB_READ_LOOP(read_op, alpha_set_op) { \
150
94.5M
  for (col = cinfo->image_width; col > 0; col--) { \
151
76.5M
    ptr[rindex] = ptr[gindex] = ptr[bindex] = read_op; \
152
76.5M
    alpha_set_op \
153
76.5M
    ptr += ps; \
154
76.5M
  } \
155
18.0M
}
156
157
METHODDEF(JDIMENSION)
158
get_text_gray_rgb_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
159
/* This version is for reading text-format PGM files with any maxval and
160
   converting to extended RGB */
161
6.47k
{
162
6.47k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
163
6.47k
  FILE *infile = source->pub.input_file;
164
6.47k
  register _JSAMPROW ptr;
165
6.47k
  register _JSAMPLE *rescale = source->rescale;
166
6.47k
  JDIMENSION col;
167
6.47k
  unsigned int maxval = source->maxval;
168
6.47k
  register int rindex = rgb_red[cinfo->in_color_space];
169
6.47k
  register int gindex = rgb_green[cinfo->in_color_space];
170
6.47k
  register int bindex = rgb_blue[cinfo->in_color_space];
171
6.47k
  register int aindex = alpha_index[cinfo->in_color_space];
172
6.47k
  register int ps = rgb_pixelsize[cinfo->in_color_space];
173
174
6.47k
  ptr = source->pub._buffer[0];
175
6.47k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
176
1.28k
    if (aindex >= 0)
177
256
      GRAY_RGB_READ_LOOP((_JSAMPLE)read_pbm_integer(cinfo, infile, maxval),
178
1.28k
                         ptr[aindex] = (_JSAMPLE)maxval;)
179
1.02k
    else
180
1.02k
      GRAY_RGB_READ_LOOP((_JSAMPLE)read_pbm_integer(cinfo, infile, maxval), {})
181
5.19k
  } else {
182
5.19k
    if (aindex >= 0)
183
1.03k
      GRAY_RGB_READ_LOOP(rescale[read_pbm_integer(cinfo, infile, maxval)],
184
5.19k
                         ptr[aindex] = (1 << cinfo->data_precision) - 1;)
185
4.15k
    else
186
4.15k
      GRAY_RGB_READ_LOOP(rescale[read_pbm_integer(cinfo, infile, maxval)], {})
187
5.19k
  }
188
6.47k
  return 1;
189
6.47k
}
rdppm-8.c:get_text_gray_rgb_row
Line
Count
Source
161
6.47k
{
162
6.47k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
163
6.47k
  FILE *infile = source->pub.input_file;
164
6.47k
  register _JSAMPROW ptr;
165
6.47k
  register _JSAMPLE *rescale = source->rescale;
166
6.47k
  JDIMENSION col;
167
6.47k
  unsigned int maxval = source->maxval;
168
6.47k
  register int rindex = rgb_red[cinfo->in_color_space];
169
6.47k
  register int gindex = rgb_green[cinfo->in_color_space];
170
6.47k
  register int bindex = rgb_blue[cinfo->in_color_space];
171
6.47k
  register int aindex = alpha_index[cinfo->in_color_space];
172
6.47k
  register int ps = rgb_pixelsize[cinfo->in_color_space];
173
174
6.47k
  ptr = source->pub._buffer[0];
175
6.47k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
176
1.28k
    if (aindex >= 0)
177
256
      GRAY_RGB_READ_LOOP((_JSAMPLE)read_pbm_integer(cinfo, infile, maxval),
178
1.28k
                         ptr[aindex] = (_JSAMPLE)maxval;)
179
1.02k
    else
180
1.02k
      GRAY_RGB_READ_LOOP((_JSAMPLE)read_pbm_integer(cinfo, infile, maxval), {})
181
5.19k
  } else {
182
5.19k
    if (aindex >= 0)
183
1.03k
      GRAY_RGB_READ_LOOP(rescale[read_pbm_integer(cinfo, infile, maxval)],
184
5.19k
                         ptr[aindex] = (1 << cinfo->data_precision) - 1;)
185
4.15k
    else
186
4.15k
      GRAY_RGB_READ_LOOP(rescale[read_pbm_integer(cinfo, infile, maxval)], {})
187
5.19k
  }
188
6.47k
  return 1;
189
6.47k
}
Unexecuted instantiation: rdppm-12.c:get_text_gray_rgb_row
Unexecuted instantiation: rdppm-16.c:get_text_gray_rgb_row
190
191
192
METHODDEF(JDIMENSION)
193
get_text_gray_cmyk_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
194
/* This version is for reading text-format PGM files with any maxval and
195
   converting to CMYK */
196
1.29k
{
197
1.29k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
198
1.29k
  FILE *infile = source->pub.input_file;
199
1.29k
  register _JSAMPROW ptr;
200
1.29k
  register _JSAMPLE *rescale = source->rescale;
201
1.29k
  JDIMENSION col;
202
1.29k
  unsigned int maxval = source->maxval;
203
204
1.29k
  ptr = source->pub._buffer[0];
205
1.29k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
206
915
    for (col = cinfo->image_width; col > 0; col--) {
207
659
      _JSAMPLE gray = (_JSAMPLE)read_pbm_integer(cinfo, infile, maxval);
208
659
      rgb_to_cmyk(maxval, gray, gray, gray, ptr, ptr + 1, ptr + 2, ptr + 3);
209
659
      ptr += 4;
210
659
    }
211
1.03k
  } else {
212
2.91k
    for (col = cinfo->image_width; col > 0; col--) {
213
1.87k
      _JSAMPLE gray = rescale[read_pbm_integer(cinfo, infile, maxval)];
214
1.87k
      rgb_to_cmyk((1 << cinfo->data_precision) - 1, gray, gray, gray, ptr,
215
1.87k
                  ptr + 1, ptr + 2, ptr + 3);
216
1.87k
      ptr += 4;
217
1.87k
    }
218
1.03k
  }
219
1.29k
  return 1;
220
1.29k
}
rdppm-8.c:get_text_gray_cmyk_row
Line
Count
Source
196
1.29k
{
197
1.29k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
198
1.29k
  FILE *infile = source->pub.input_file;
199
1.29k
  register _JSAMPROW ptr;
200
1.29k
  register _JSAMPLE *rescale = source->rescale;
201
1.29k
  JDIMENSION col;
202
1.29k
  unsigned int maxval = source->maxval;
203
204
1.29k
  ptr = source->pub._buffer[0];
205
1.29k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
206
915
    for (col = cinfo->image_width; col > 0; col--) {
207
659
      _JSAMPLE gray = (_JSAMPLE)read_pbm_integer(cinfo, infile, maxval);
208
659
      rgb_to_cmyk(maxval, gray, gray, gray, ptr, ptr + 1, ptr + 2, ptr + 3);
209
659
      ptr += 4;
210
659
    }
211
1.03k
  } else {
212
2.91k
    for (col = cinfo->image_width; col > 0; col--) {
213
1.87k
      _JSAMPLE gray = rescale[read_pbm_integer(cinfo, infile, maxval)];
214
1.87k
      rgb_to_cmyk((1 << cinfo->data_precision) - 1, gray, gray, gray, ptr,
215
1.87k
                  ptr + 1, ptr + 2, ptr + 3);
216
1.87k
      ptr += 4;
217
1.87k
    }
218
1.03k
  }
219
1.29k
  return 1;
220
1.29k
}
Unexecuted instantiation: rdppm-12.c:get_text_gray_cmyk_row
Unexecuted instantiation: rdppm-16.c:get_text_gray_cmyk_row
221
222
223
84.6k
#define RGB_READ_LOOP(read_op, alpha_set_op) { \
224
236k
  for (col = cinfo->image_width; col > 0; col--) { \
225
152k
    ptr[rindex] = read_op; \
226
152k
    ptr[gindex] = read_op; \
227
152k
    ptr[bindex] = read_op; \
228
152k
    alpha_set_op \
229
152k
    ptr += ps; \
230
152k
  } \
231
84.6k
}
232
233
METHODDEF(JDIMENSION)
234
get_text_rgb_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
235
/* This version is for reading text-format PPM files with any maxval */
236
8.78k
{
237
8.78k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
238
8.78k
  FILE *infile = source->pub.input_file;
239
8.78k
  register _JSAMPROW ptr;
240
8.78k
  register _JSAMPLE *rescale = source->rescale;
241
8.78k
  JDIMENSION col;
242
8.78k
  unsigned int maxval = source->maxval;
243
8.78k
  register int rindex = rgb_red[cinfo->in_color_space];
244
8.78k
  register int gindex = rgb_green[cinfo->in_color_space];
245
8.78k
  register int bindex = rgb_blue[cinfo->in_color_space];
246
8.78k
  register int aindex = alpha_index[cinfo->in_color_space];
247
8.78k
  register int ps = rgb_pixelsize[cinfo->in_color_space];
248
249
8.78k
  ptr = source->pub._buffer[0];
250
8.78k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
251
2.64k
    if (aindex >= 0)
252
528
      RGB_READ_LOOP((_JSAMPLE)read_pbm_integer(cinfo, infile, maxval),
253
2.64k
                    ptr[aindex] = (_JSAMPLE)maxval;)
254
2.11k
    else
255
2.11k
      RGB_READ_LOOP((_JSAMPLE)read_pbm_integer(cinfo, infile, maxval), {})
256
6.14k
  } else {
257
6.14k
    if (aindex >= 0)
258
1.22k
      RGB_READ_LOOP(rescale[read_pbm_integer(cinfo, infile, maxval)],
259
6.14k
                    ptr[aindex] = (1 << cinfo->data_precision) - 1;)
260
4.91k
    else
261
4.91k
      RGB_READ_LOOP(rescale[read_pbm_integer(cinfo, infile, maxval)], {})
262
6.14k
  }
263
8.78k
  return 1;
264
8.78k
}
rdppm-8.c:get_text_rgb_row
Line
Count
Source
236
8.78k
{
237
8.78k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
238
8.78k
  FILE *infile = source->pub.input_file;
239
8.78k
  register _JSAMPROW ptr;
240
8.78k
  register _JSAMPLE *rescale = source->rescale;
241
8.78k
  JDIMENSION col;
242
8.78k
  unsigned int maxval = source->maxval;
243
8.78k
  register int rindex = rgb_red[cinfo->in_color_space];
244
8.78k
  register int gindex = rgb_green[cinfo->in_color_space];
245
8.78k
  register int bindex = rgb_blue[cinfo->in_color_space];
246
8.78k
  register int aindex = alpha_index[cinfo->in_color_space];
247
8.78k
  register int ps = rgb_pixelsize[cinfo->in_color_space];
248
249
8.78k
  ptr = source->pub._buffer[0];
250
8.78k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
251
2.64k
    if (aindex >= 0)
252
528
      RGB_READ_LOOP((_JSAMPLE)read_pbm_integer(cinfo, infile, maxval),
253
2.64k
                    ptr[aindex] = (_JSAMPLE)maxval;)
254
2.11k
    else
255
2.11k
      RGB_READ_LOOP((_JSAMPLE)read_pbm_integer(cinfo, infile, maxval), {})
256
6.14k
  } else {
257
6.14k
    if (aindex >= 0)
258
1.22k
      RGB_READ_LOOP(rescale[read_pbm_integer(cinfo, infile, maxval)],
259
6.14k
                    ptr[aindex] = (1 << cinfo->data_precision) - 1;)
260
4.91k
    else
261
4.91k
      RGB_READ_LOOP(rescale[read_pbm_integer(cinfo, infile, maxval)], {})
262
6.14k
  }
263
8.78k
  return 1;
264
8.78k
}
Unexecuted instantiation: rdppm-12.c:get_text_rgb_row
Unexecuted instantiation: rdppm-16.c:get_text_rgb_row
265
266
267
METHODDEF(JDIMENSION)
268
get_text_rgb_cmyk_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
269
/* This version is for reading text-format PPM files with any maxval and
270
   converting to CMYK */
271
1.75k
{
272
1.75k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
273
1.75k
  FILE *infile = source->pub.input_file;
274
1.75k
  register _JSAMPROW ptr;
275
1.75k
  register _JSAMPLE *rescale = source->rescale;
276
1.75k
  JDIMENSION col;
277
1.75k
  unsigned int maxval = source->maxval;
278
279
1.75k
  ptr = source->pub._buffer[0];
280
1.75k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
281
1.51k
    for (col = cinfo->image_width; col > 0; col--) {
282
990
      _JSAMPLE r = (_JSAMPLE)read_pbm_integer(cinfo, infile, maxval);
283
990
      _JSAMPLE g = (_JSAMPLE)read_pbm_integer(cinfo, infile, maxval);
284
990
      _JSAMPLE b = (_JSAMPLE)read_pbm_integer(cinfo, infile, maxval);
285
990
      rgb_to_cmyk(maxval, r, g, b, ptr, ptr + 1, ptr + 2, ptr + 3);
286
990
      ptr += 4;
287
990
    }
288
1.22k
  } else {
289
3.24k
    for (col = cinfo->image_width; col > 0; col--) {
290
2.01k
      _JSAMPLE r = rescale[read_pbm_integer(cinfo, infile, maxval)];
291
2.01k
      _JSAMPLE g = rescale[read_pbm_integer(cinfo, infile, maxval)];
292
2.01k
      _JSAMPLE b = rescale[read_pbm_integer(cinfo, infile, maxval)];
293
2.01k
      rgb_to_cmyk((1 << cinfo->data_precision) - 1, r, g, b, ptr, ptr + 1,
294
2.01k
                  ptr + 2, ptr + 3);
295
2.01k
      ptr += 4;
296
2.01k
    }
297
1.22k
  }
298
1.75k
  return 1;
299
1.75k
}
rdppm-8.c:get_text_rgb_cmyk_row
Line
Count
Source
271
1.75k
{
272
1.75k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
273
1.75k
  FILE *infile = source->pub.input_file;
274
1.75k
  register _JSAMPROW ptr;
275
1.75k
  register _JSAMPLE *rescale = source->rescale;
276
1.75k
  JDIMENSION col;
277
1.75k
  unsigned int maxval = source->maxval;
278
279
1.75k
  ptr = source->pub._buffer[0];
280
1.75k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
281
1.51k
    for (col = cinfo->image_width; col > 0; col--) {
282
990
      _JSAMPLE r = (_JSAMPLE)read_pbm_integer(cinfo, infile, maxval);
283
990
      _JSAMPLE g = (_JSAMPLE)read_pbm_integer(cinfo, infile, maxval);
284
990
      _JSAMPLE b = (_JSAMPLE)read_pbm_integer(cinfo, infile, maxval);
285
990
      rgb_to_cmyk(maxval, r, g, b, ptr, ptr + 1, ptr + 2, ptr + 3);
286
990
      ptr += 4;
287
990
    }
288
1.22k
  } else {
289
3.24k
    for (col = cinfo->image_width; col > 0; col--) {
290
2.01k
      _JSAMPLE r = rescale[read_pbm_integer(cinfo, infile, maxval)];
291
2.01k
      _JSAMPLE g = rescale[read_pbm_integer(cinfo, infile, maxval)];
292
2.01k
      _JSAMPLE b = rescale[read_pbm_integer(cinfo, infile, maxval)];
293
2.01k
      rgb_to_cmyk((1 << cinfo->data_precision) - 1, r, g, b, ptr, ptr + 1,
294
2.01k
                  ptr + 2, ptr + 3);
295
2.01k
      ptr += 4;
296
2.01k
    }
297
1.22k
  }
298
1.75k
  return 1;
299
1.75k
}
Unexecuted instantiation: rdppm-12.c:get_text_rgb_cmyk_row
Unexecuted instantiation: rdppm-16.c:get_text_rgb_cmyk_row
300
301
302
METHODDEF(JDIMENSION)
303
get_scaled_gray_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
304
/* This version is for reading raw-byte-format PGM files with any maxval */
305
3.37M
{
306
3.37M
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
307
3.37M
  register _JSAMPROW ptr;
308
3.37M
  register unsigned char *bufferptr;
309
3.37M
  register _JSAMPLE *rescale = source->rescale;
310
3.37M
  JDIMENSION col;
311
312
3.37M
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
313
74
    ERREXIT(cinfo, JERR_INPUT_EOF);
314
3.37M
  ptr = source->pub._buffer[0];
315
3.37M
  bufferptr = source->iobuffer;
316
18.2M
  for (col = cinfo->image_width; col > 0; col--) {
317
14.8M
    *ptr++ = rescale[*bufferptr++];
318
14.8M
  }
319
3.37M
  return 1;
320
3.37M
}
rdppm-8.c:get_scaled_gray_row
Line
Count
Source
305
3.37M
{
306
3.37M
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
307
3.37M
  register _JSAMPROW ptr;
308
3.37M
  register unsigned char *bufferptr;
309
3.37M
  register _JSAMPLE *rescale = source->rescale;
310
3.37M
  JDIMENSION col;
311
312
3.37M
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
313
74
    ERREXIT(cinfo, JERR_INPUT_EOF);
314
3.37M
  ptr = source->pub._buffer[0];
315
3.37M
  bufferptr = source->iobuffer;
316
18.2M
  for (col = cinfo->image_width; col > 0; col--) {
317
14.8M
    *ptr++ = rescale[*bufferptr++];
318
14.8M
  }
319
3.37M
  return 1;
320
3.37M
}
Unexecuted instantiation: rdppm-12.c:get_scaled_gray_row
Unexecuted instantiation: rdppm-16.c:get_scaled_gray_row
321
322
323
METHODDEF(JDIMENSION)
324
get_gray_rgb_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
325
/* This version is for reading raw-byte-format PGM files with any maxval
326
   and converting to extended RGB */
327
18.0M
{
328
18.0M
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
329
18.0M
  register _JSAMPROW ptr;
330
18.0M
  register unsigned char *bufferptr;
331
18.0M
  register _JSAMPLE *rescale = source->rescale;
332
18.0M
  JDIMENSION col;
333
18.0M
  unsigned int maxval = source->maxval;
334
18.0M
  register int rindex = rgb_red[cinfo->in_color_space];
335
18.0M
  register int gindex = rgb_green[cinfo->in_color_space];
336
18.0M
  register int bindex = rgb_blue[cinfo->in_color_space];
337
18.0M
  register int aindex = alpha_index[cinfo->in_color_space];
338
18.0M
  register int ps = rgb_pixelsize[cinfo->in_color_space];
339
340
18.0M
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
341
515
    ERREXIT(cinfo, JERR_INPUT_EOF);
342
18.0M
  ptr = source->pub._buffer[0];
343
18.0M
  bufferptr = source->iobuffer;
344
18.0M
  if (maxval == (1U << cinfo->data_precision) - 1U) {
345
1.15M
    if (aindex >= 0)
346
231k
      GRAY_RGB_READ_LOOP(*bufferptr++, ptr[aindex] = (_JSAMPLE)maxval;)
347
924k
    else
348
924k
      GRAY_RGB_READ_LOOP(*bufferptr++, {})
349
16.8M
  } else {
350
16.8M
    if (aindex >= 0)
351
3.37M
      GRAY_RGB_READ_LOOP(rescale[*bufferptr++],
352
16.8M
                         ptr[aindex] = (1 << cinfo->data_precision) - 1;)
353
13.5M
    else
354
13.5M
      GRAY_RGB_READ_LOOP(rescale[*bufferptr++], {})
355
16.8M
  }
356
18.0M
  return 1;
357
18.0M
}
rdppm-8.c:get_gray_rgb_row
Line
Count
Source
327
18.0M
{
328
18.0M
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
329
18.0M
  register _JSAMPROW ptr;
330
18.0M
  register unsigned char *bufferptr;
331
18.0M
  register _JSAMPLE *rescale = source->rescale;
332
18.0M
  JDIMENSION col;
333
18.0M
  unsigned int maxval = source->maxval;
334
18.0M
  register int rindex = rgb_red[cinfo->in_color_space];
335
18.0M
  register int gindex = rgb_green[cinfo->in_color_space];
336
18.0M
  register int bindex = rgb_blue[cinfo->in_color_space];
337
18.0M
  register int aindex = alpha_index[cinfo->in_color_space];
338
18.0M
  register int ps = rgb_pixelsize[cinfo->in_color_space];
339
340
18.0M
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
341
515
    ERREXIT(cinfo, JERR_INPUT_EOF);
342
18.0M
  ptr = source->pub._buffer[0];
343
18.0M
  bufferptr = source->iobuffer;
344
18.0M
  if (maxval == (1U << cinfo->data_precision) - 1U) {
345
1.15M
    if (aindex >= 0)
346
231k
      GRAY_RGB_READ_LOOP(*bufferptr++, ptr[aindex] = (_JSAMPLE)maxval;)
347
924k
    else
348
924k
      GRAY_RGB_READ_LOOP(*bufferptr++, {})
349
16.8M
  } else {
350
16.8M
    if (aindex >= 0)
351
3.37M
      GRAY_RGB_READ_LOOP(rescale[*bufferptr++],
352
16.8M
                         ptr[aindex] = (1 << cinfo->data_precision) - 1;)
353
13.5M
    else
354
13.5M
      GRAY_RGB_READ_LOOP(rescale[*bufferptr++], {})
355
16.8M
  }
356
18.0M
  return 1;
357
18.0M
}
Unexecuted instantiation: rdppm-12.c:get_gray_rgb_row
Unexecuted instantiation: rdppm-16.c:get_gray_rgb_row
358
359
360
METHODDEF(JDIMENSION)
361
get_gray_cmyk_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
362
/* This version is for reading raw-byte-format PGM files with any maxval
363
   and converting to CMYK */
364
3.60M
{
365
3.60M
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
366
3.60M
  register _JSAMPROW ptr;
367
3.60M
  register unsigned char *bufferptr;
368
3.60M
  register _JSAMPLE *rescale = source->rescale;
369
3.60M
  JDIMENSION col;
370
3.60M
  unsigned int maxval = source->maxval;
371
372
3.60M
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
373
103
    ERREXIT(cinfo, JERR_INPUT_EOF);
374
3.60M
  ptr = source->pub._buffer[0];
375
3.60M
  bufferptr = source->iobuffer;
376
3.60M
  if (maxval == (1U << cinfo->data_precision) - 1U) {
377
692k
    for (col = cinfo->image_width; col > 0; col--) {
378
461k
      _JSAMPLE gray = *bufferptr++;
379
461k
      rgb_to_cmyk(maxval, gray, gray, gray, ptr, ptr + 1, ptr + 2, ptr + 3);
380
461k
      ptr += 4;
381
461k
    }
382
3.37M
  } else {
383
18.2M
    for (col = cinfo->image_width; col > 0; col--) {
384
14.8M
      _JSAMPLE gray = rescale[*bufferptr++];
385
14.8M
      rgb_to_cmyk((1 << cinfo->data_precision) - 1, gray, gray, gray, ptr,
386
14.8M
                  ptr + 1, ptr + 2, ptr + 3);
387
14.8M
      ptr += 4;
388
14.8M
    }
389
3.37M
  }
390
3.60M
  return 1;
391
3.60M
}
rdppm-8.c:get_gray_cmyk_row
Line
Count
Source
364
3.60M
{
365
3.60M
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
366
3.60M
  register _JSAMPROW ptr;
367
3.60M
  register unsigned char *bufferptr;
368
3.60M
  register _JSAMPLE *rescale = source->rescale;
369
3.60M
  JDIMENSION col;
370
3.60M
  unsigned int maxval = source->maxval;
371
372
3.60M
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
373
103
    ERREXIT(cinfo, JERR_INPUT_EOF);
374
3.60M
  ptr = source->pub._buffer[0];
375
3.60M
  bufferptr = source->iobuffer;
376
3.60M
  if (maxval == (1U << cinfo->data_precision) - 1U) {
377
692k
    for (col = cinfo->image_width; col > 0; col--) {
378
461k
      _JSAMPLE gray = *bufferptr++;
379
461k
      rgb_to_cmyk(maxval, gray, gray, gray, ptr, ptr + 1, ptr + 2, ptr + 3);
380
461k
      ptr += 4;
381
461k
    }
382
3.37M
  } else {
383
18.2M
    for (col = cinfo->image_width; col > 0; col--) {
384
14.8M
      _JSAMPLE gray = rescale[*bufferptr++];
385
14.8M
      rgb_to_cmyk((1 << cinfo->data_precision) - 1, gray, gray, gray, ptr,
386
14.8M
                  ptr + 1, ptr + 2, ptr + 3);
387
14.8M
      ptr += 4;
388
14.8M
    }
389
3.37M
  }
390
3.60M
  return 1;
391
3.60M
}
Unexecuted instantiation: rdppm-12.c:get_gray_cmyk_row
Unexecuted instantiation: rdppm-16.c:get_gray_cmyk_row
392
393
394
METHODDEF(JDIMENSION)
395
get_rgb_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
396
/* This version is for reading raw-byte-format PPM files with any maxval */
397
75.8k
{
398
75.8k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
399
75.8k
  register _JSAMPROW ptr;
400
75.8k
  register unsigned char *bufferptr;
401
75.8k
  register _JSAMPLE *rescale = source->rescale;
402
75.8k
  JDIMENSION col;
403
75.8k
  unsigned int maxval = source->maxval;
404
75.8k
  register int rindex = rgb_red[cinfo->in_color_space];
405
75.8k
  register int gindex = rgb_green[cinfo->in_color_space];
406
75.8k
  register int bindex = rgb_blue[cinfo->in_color_space];
407
75.8k
  register int aindex = alpha_index[cinfo->in_color_space];
408
75.8k
  register int ps = rgb_pixelsize[cinfo->in_color_space];
409
410
75.8k
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
411
690
    ERREXIT(cinfo, JERR_INPUT_EOF);
412
75.8k
  ptr = source->pub._buffer[0];
413
75.8k
  bufferptr = source->iobuffer;
414
75.8k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
415
17.2k
    if (aindex >= 0)
416
4.31k
      RGB_READ_LOOP(*bufferptr++, ptr[aindex] = (_JSAMPLE)maxval;)
417
12.9k
    else
418
12.9k
      RGB_READ_LOOP(*bufferptr++, {})
419
58.5k
  } else {
420
58.5k
    if (aindex >= 0)
421
11.5k
      RGB_READ_LOOP(rescale[*bufferptr++],
422
58.5k
                    ptr[aindex] = (1 << cinfo->data_precision) - 1;)
423
47.0k
    else
424
47.0k
      RGB_READ_LOOP(rescale[*bufferptr++], {})
425
58.5k
  }
426
75.8k
  return 1;
427
75.8k
}
rdppm-8.c:get_rgb_row
Line
Count
Source
397
75.8k
{
398
75.8k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
399
75.8k
  register _JSAMPROW ptr;
400
75.8k
  register unsigned char *bufferptr;
401
75.8k
  register _JSAMPLE *rescale = source->rescale;
402
75.8k
  JDIMENSION col;
403
75.8k
  unsigned int maxval = source->maxval;
404
75.8k
  register int rindex = rgb_red[cinfo->in_color_space];
405
75.8k
  register int gindex = rgb_green[cinfo->in_color_space];
406
75.8k
  register int bindex = rgb_blue[cinfo->in_color_space];
407
75.8k
  register int aindex = alpha_index[cinfo->in_color_space];
408
75.8k
  register int ps = rgb_pixelsize[cinfo->in_color_space];
409
410
75.8k
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
411
690
    ERREXIT(cinfo, JERR_INPUT_EOF);
412
75.8k
  ptr = source->pub._buffer[0];
413
75.8k
  bufferptr = source->iobuffer;
414
75.8k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
415
17.2k
    if (aindex >= 0)
416
4.31k
      RGB_READ_LOOP(*bufferptr++, ptr[aindex] = (_JSAMPLE)maxval;)
417
12.9k
    else
418
12.9k
      RGB_READ_LOOP(*bufferptr++, {})
419
58.5k
  } else {
420
58.5k
    if (aindex >= 0)
421
11.5k
      RGB_READ_LOOP(rescale[*bufferptr++],
422
58.5k
                    ptr[aindex] = (1 << cinfo->data_precision) - 1;)
423
47.0k
    else
424
47.0k
      RGB_READ_LOOP(rescale[*bufferptr++], {})
425
58.5k
  }
426
75.8k
  return 1;
427
75.8k
}
Unexecuted instantiation: rdppm-12.c:get_rgb_row
Unexecuted instantiation: rdppm-16.c:get_rgb_row
428
429
430
METHODDEF(JDIMENSION)
431
get_rgb_cmyk_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
432
/* This version is for reading raw-byte-format PPM files with any maxval and
433
   converting to CMYK */
434
16.0k
{
435
16.0k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
436
16.0k
  register _JSAMPROW ptr;
437
16.0k
  register unsigned char *bufferptr;
438
16.0k
  register _JSAMPLE *rescale = source->rescale;
439
16.0k
  JDIMENSION col;
440
16.0k
  unsigned int maxval = source->maxval;
441
442
16.0k
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
443
147
    ERREXIT(cinfo, JERR_INPUT_EOF);
444
16.0k
  ptr = source->pub._buffer[0];
445
16.0k
  bufferptr = source->iobuffer;
446
16.0k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
447
10.5k
    for (col = cinfo->image_width; col > 0; col--) {
448
6.20k
      _JSAMPLE r = *bufferptr++;
449
6.20k
      _JSAMPLE g = *bufferptr++;
450
6.20k
      _JSAMPLE b = *bufferptr++;
451
6.20k
      rgb_to_cmyk(maxval, r, g, b, ptr, ptr + 1, ptr + 2, ptr + 3);
452
6.20k
      ptr += 4;
453
6.20k
    }
454
11.7k
  } else {
455
34.1k
    for (col = cinfo->image_width; col > 0; col--) {
456
22.4k
      _JSAMPLE r = rescale[*bufferptr++];
457
22.4k
      _JSAMPLE g = rescale[*bufferptr++];
458
22.4k
      _JSAMPLE b = rescale[*bufferptr++];
459
22.4k
      rgb_to_cmyk((1 << cinfo->data_precision) - 1, r, g, b, ptr, ptr + 1,
460
22.4k
                  ptr + 2, ptr + 3);
461
22.4k
      ptr += 4;
462
22.4k
    }
463
11.7k
  }
464
16.0k
  return 1;
465
16.0k
}
rdppm-8.c:get_rgb_cmyk_row
Line
Count
Source
434
16.0k
{
435
16.0k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
436
16.0k
  register _JSAMPROW ptr;
437
16.0k
  register unsigned char *bufferptr;
438
16.0k
  register _JSAMPLE *rescale = source->rescale;
439
16.0k
  JDIMENSION col;
440
16.0k
  unsigned int maxval = source->maxval;
441
442
16.0k
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
443
147
    ERREXIT(cinfo, JERR_INPUT_EOF);
444
16.0k
  ptr = source->pub._buffer[0];
445
16.0k
  bufferptr = source->iobuffer;
446
16.0k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
447
10.5k
    for (col = cinfo->image_width; col > 0; col--) {
448
6.20k
      _JSAMPLE r = *bufferptr++;
449
6.20k
      _JSAMPLE g = *bufferptr++;
450
6.20k
      _JSAMPLE b = *bufferptr++;
451
6.20k
      rgb_to_cmyk(maxval, r, g, b, ptr, ptr + 1, ptr + 2, ptr + 3);
452
6.20k
      ptr += 4;
453
6.20k
    }
454
11.7k
  } else {
455
34.1k
    for (col = cinfo->image_width; col > 0; col--) {
456
22.4k
      _JSAMPLE r = rescale[*bufferptr++];
457
22.4k
      _JSAMPLE g = rescale[*bufferptr++];
458
22.4k
      _JSAMPLE b = rescale[*bufferptr++];
459
22.4k
      rgb_to_cmyk((1 << cinfo->data_precision) - 1, r, g, b, ptr, ptr + 1,
460
22.4k
                  ptr + 2, ptr + 3);
461
22.4k
      ptr += 4;
462
22.4k
    }
463
11.7k
  }
464
16.0k
  return 1;
465
16.0k
}
Unexecuted instantiation: rdppm-12.c:get_rgb_cmyk_row
Unexecuted instantiation: rdppm-16.c:get_rgb_cmyk_row
466
467
468
#if BITS_IN_JSAMPLE == 8
469
470
METHODDEF(JDIMENSION)
471
get_raw_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
472
/* This version is for reading raw-byte-format files with
473
 * maxval <= _MAXJSAMPLE and maxval == (1U << cinfo->data_precision) - 1U.
474
 * In this case we just read right into the _JSAMPLE buffer!
475
 * Note that same code works for PPM and PGM files.
476
 */
477
235k
{
478
235k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
479
480
235k
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
481
74
    ERREXIT(cinfo, JERR_INPUT_EOF);
482
235k
  return 1;
483
235k
}
484
485
#endif
486
487
488
METHODDEF(JDIMENSION)
489
get_word_gray_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
490
/* This version is for reading raw-word-format PGM files with any maxval */
491
1.56k
{
492
1.56k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
493
1.56k
  register _JSAMPROW ptr;
494
1.56k
  register unsigned char *bufferptr;
495
1.56k
  register _JSAMPLE *rescale = source->rescale;
496
1.56k
  JDIMENSION col;
497
1.56k
  unsigned int maxval = source->maxval;
498
499
1.56k
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
500
63
    ERREXIT(cinfo, JERR_INPUT_EOF);
501
1.56k
  ptr = source->pub._buffer[0];
502
1.56k
  bufferptr = source->iobuffer;
503
4.06k
  for (col = cinfo->image_width; col > 0; col--) {
504
2.50k
    register unsigned int temp;
505
2.50k
    temp  = (*bufferptr++) << 8;
506
2.50k
    temp |= (*bufferptr++);
507
2.50k
    if (temp > maxval)
508
33
      ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
509
2.50k
    *ptr++ = rescale[temp];
510
2.50k
  }
511
1.56k
  return 1;
512
1.56k
}
rdppm-8.c:get_word_gray_row
Line
Count
Source
491
1.56k
{
492
1.56k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
493
1.56k
  register _JSAMPROW ptr;
494
1.56k
  register unsigned char *bufferptr;
495
1.56k
  register _JSAMPLE *rescale = source->rescale;
496
1.56k
  JDIMENSION col;
497
1.56k
  unsigned int maxval = source->maxval;
498
499
1.56k
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
500
63
    ERREXIT(cinfo, JERR_INPUT_EOF);
501
1.56k
  ptr = source->pub._buffer[0];
502
1.56k
  bufferptr = source->iobuffer;
503
4.06k
  for (col = cinfo->image_width; col > 0; col--) {
504
2.50k
    register unsigned int temp;
505
2.50k
    temp  = (*bufferptr++) << 8;
506
2.50k
    temp |= (*bufferptr++);
507
2.50k
    if (temp > maxval)
508
33
      ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
509
2.50k
    *ptr++ = rescale[temp];
510
2.50k
  }
511
1.56k
  return 1;
512
1.56k
}
Unexecuted instantiation: rdppm-12.c:get_word_gray_row
Unexecuted instantiation: rdppm-16.c:get_word_gray_row
513
514
515
METHODDEF(JDIMENSION)
516
get_word_gray_rgb_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
517
/* This version is for reading raw-word-format PGM files with any maxval */
518
7.81k
{
519
7.81k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
520
7.81k
  register _JSAMPROW ptr;
521
7.81k
  register unsigned char *bufferptr;
522
7.81k
  register _JSAMPLE *rescale = source->rescale;
523
7.81k
  JDIMENSION col;
524
7.81k
  unsigned int maxval = source->maxval;
525
7.81k
  register int rindex = rgb_red[cinfo->in_color_space];
526
7.81k
  register int gindex = rgb_green[cinfo->in_color_space];
527
7.81k
  register int bindex = rgb_blue[cinfo->in_color_space];
528
7.81k
  register int aindex = alpha_index[cinfo->in_color_space];
529
7.81k
  register int ps = rgb_pixelsize[cinfo->in_color_space];
530
531
7.81k
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
532
315
    ERREXIT(cinfo, JERR_INPUT_EOF);
533
7.81k
  ptr = source->pub._buffer[0];
534
7.81k
  bufferptr = source->iobuffer;
535
20.3k
  for (col = cinfo->image_width; col > 0; col--) {
536
12.5k
    register unsigned int temp;
537
12.5k
    temp  = (*bufferptr++) << 8;
538
12.5k
    temp |= (*bufferptr++);
539
12.5k
    if (temp > maxval)
540
165
      ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
541
12.5k
    ptr[rindex] = ptr[gindex] = ptr[bindex] = rescale[temp];
542
12.5k
    if (aindex >= 0)
543
2.46k
      ptr[aindex] = (1 << cinfo->data_precision) - 1;
544
12.5k
    ptr += ps;
545
12.5k
  }
546
7.81k
  return 1;
547
7.81k
}
rdppm-8.c:get_word_gray_rgb_row
Line
Count
Source
518
7.81k
{
519
7.81k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
520
7.81k
  register _JSAMPROW ptr;
521
7.81k
  register unsigned char *bufferptr;
522
7.81k
  register _JSAMPLE *rescale = source->rescale;
523
7.81k
  JDIMENSION col;
524
7.81k
  unsigned int maxval = source->maxval;
525
7.81k
  register int rindex = rgb_red[cinfo->in_color_space];
526
7.81k
  register int gindex = rgb_green[cinfo->in_color_space];
527
7.81k
  register int bindex = rgb_blue[cinfo->in_color_space];
528
7.81k
  register int aindex = alpha_index[cinfo->in_color_space];
529
7.81k
  register int ps = rgb_pixelsize[cinfo->in_color_space];
530
531
7.81k
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
532
315
    ERREXIT(cinfo, JERR_INPUT_EOF);
533
7.81k
  ptr = source->pub._buffer[0];
534
7.81k
  bufferptr = source->iobuffer;
535
20.3k
  for (col = cinfo->image_width; col > 0; col--) {
536
12.5k
    register unsigned int temp;
537
12.5k
    temp  = (*bufferptr++) << 8;
538
12.5k
    temp |= (*bufferptr++);
539
12.5k
    if (temp > maxval)
540
165
      ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
541
12.5k
    ptr[rindex] = ptr[gindex] = ptr[bindex] = rescale[temp];
542
12.5k
    if (aindex >= 0)
543
2.46k
      ptr[aindex] = (1 << cinfo->data_precision) - 1;
544
12.5k
    ptr += ps;
545
12.5k
  }
546
7.81k
  return 1;
547
7.81k
}
Unexecuted instantiation: rdppm-12.c:get_word_gray_rgb_row
Unexecuted instantiation: rdppm-16.c:get_word_gray_rgb_row
548
549
550
METHODDEF(JDIMENSION)
551
get_word_gray_cmyk_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
552
/* This version is for reading raw-word-format PGM files with any maxval */
553
1.56k
{
554
1.56k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
555
1.56k
  register _JSAMPROW ptr;
556
1.56k
  register unsigned char *bufferptr;
557
1.56k
  register _JSAMPLE *rescale = source->rescale;
558
1.56k
  JDIMENSION col;
559
1.56k
  unsigned int maxval = source->maxval;
560
561
1.56k
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
562
63
    ERREXIT(cinfo, JERR_INPUT_EOF);
563
1.56k
  ptr = source->pub._buffer[0];
564
1.56k
  bufferptr = source->iobuffer;
565
1.56k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
566
0
    for (col = cinfo->image_width; col > 0; col--) {
567
0
      register unsigned int gray;
568
0
      gray  = (*bufferptr++) << 8;
569
0
      gray |= (*bufferptr++);
570
0
      if (gray > maxval)
571
0
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
572
0
      rgb_to_cmyk(maxval, (_JSAMPLE)gray, (_JSAMPLE)gray, (_JSAMPLE)gray, ptr,
573
0
                  ptr + 1, ptr + 2, ptr + 3);
574
0
      ptr += 4;
575
0
    }
576
1.56k
  } else {
577
4.06k
    for (col = cinfo->image_width; col > 0; col--) {
578
2.50k
      register unsigned int temp;
579
2.50k
      _JSAMPLE gray;
580
2.50k
      temp  = (*bufferptr++) << 8;
581
2.50k
      temp |= (*bufferptr++);
582
2.50k
      if (temp > maxval)
583
33
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
584
2.50k
      gray = rescale[temp];
585
2.50k
      rgb_to_cmyk((1 << cinfo->data_precision) - 1, gray, gray, gray, ptr,
586
2.50k
                  ptr + 1, ptr + 2, ptr + 3);
587
2.50k
      ptr += 4;
588
2.50k
    }
589
1.56k
  }
590
1.56k
  return 1;
591
1.56k
}
rdppm-8.c:get_word_gray_cmyk_row
Line
Count
Source
553
1.56k
{
554
1.56k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
555
1.56k
  register _JSAMPROW ptr;
556
1.56k
  register unsigned char *bufferptr;
557
1.56k
  register _JSAMPLE *rescale = source->rescale;
558
1.56k
  JDIMENSION col;
559
1.56k
  unsigned int maxval = source->maxval;
560
561
1.56k
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
562
63
    ERREXIT(cinfo, JERR_INPUT_EOF);
563
1.56k
  ptr = source->pub._buffer[0];
564
1.56k
  bufferptr = source->iobuffer;
565
1.56k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
566
0
    for (col = cinfo->image_width; col > 0; col--) {
567
0
      register unsigned int gray;
568
0
      gray  = (*bufferptr++) << 8;
569
0
      gray |= (*bufferptr++);
570
0
      if (gray > maxval)
571
0
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
572
0
      rgb_to_cmyk(maxval, (_JSAMPLE)gray, (_JSAMPLE)gray, (_JSAMPLE)gray, ptr,
573
0
                  ptr + 1, ptr + 2, ptr + 3);
574
0
      ptr += 4;
575
0
    }
576
1.56k
  } else {
577
4.06k
    for (col = cinfo->image_width; col > 0; col--) {
578
2.50k
      register unsigned int temp;
579
2.50k
      _JSAMPLE gray;
580
2.50k
      temp  = (*bufferptr++) << 8;
581
2.50k
      temp |= (*bufferptr++);
582
2.50k
      if (temp > maxval)
583
33
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
584
2.50k
      gray = rescale[temp];
585
2.50k
      rgb_to_cmyk((1 << cinfo->data_precision) - 1, gray, gray, gray, ptr,
586
2.50k
                  ptr + 1, ptr + 2, ptr + 3);
587
2.50k
      ptr += 4;
588
2.50k
    }
589
1.56k
  }
590
1.56k
  return 1;
591
1.56k
}
Unexecuted instantiation: rdppm-12.c:get_word_gray_cmyk_row
Unexecuted instantiation: rdppm-16.c:get_word_gray_cmyk_row
592
593
594
METHODDEF(JDIMENSION)
595
get_word_rgb_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
596
/* This version is for reading raw-word-format PPM files with any maxval */
597
11.0k
{
598
11.0k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
599
11.0k
  register _JSAMPROW ptr;
600
11.0k
  register unsigned char *bufferptr;
601
11.0k
  register _JSAMPLE *rescale = source->rescale;
602
11.0k
  JDIMENSION col;
603
11.0k
  unsigned int maxval = source->maxval;
604
11.0k
  register int rindex = rgb_red[cinfo->in_color_space];
605
11.0k
  register int gindex = rgb_green[cinfo->in_color_space];
606
11.0k
  register int bindex = rgb_blue[cinfo->in_color_space];
607
11.0k
  register int aindex = alpha_index[cinfo->in_color_space];
608
11.0k
  register int ps = rgb_pixelsize[cinfo->in_color_space];
609
610
11.0k
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
611
390
    ERREXIT(cinfo, JERR_INPUT_EOF);
612
11.0k
  ptr = source->pub._buffer[0];
613
11.0k
  bufferptr = source->iobuffer;
614
26.7k
  for (col = cinfo->image_width; col > 0; col--) {
615
15.6k
    register unsigned int temp;
616
15.6k
    temp  = (*bufferptr++) << 8;
617
15.6k
    temp |= (*bufferptr++);
618
15.6k
    if (temp > maxval)
619
145
      ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
620
15.6k
    ptr[rindex] = rescale[temp];
621
15.6k
    temp  = (*bufferptr++) << 8;
622
15.6k
    temp |= (*bufferptr++);
623
15.6k
    if (temp > maxval)
624
125
      ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
625
15.6k
    ptr[gindex] = rescale[temp];
626
15.6k
    temp  = (*bufferptr++) << 8;
627
15.6k
    temp |= (*bufferptr++);
628
15.6k
    if (temp > maxval)
629
105
      ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
630
15.6k
    ptr[bindex] = rescale[temp];
631
15.6k
    if (aindex >= 0)
632
3.06k
      ptr[aindex] = (1 << cinfo->data_precision) - 1;
633
15.6k
    ptr += ps;
634
15.6k
  }
635
11.0k
  return 1;
636
11.0k
}
rdppm-8.c:get_word_rgb_row
Line
Count
Source
597
11.0k
{
598
11.0k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
599
11.0k
  register _JSAMPROW ptr;
600
11.0k
  register unsigned char *bufferptr;
601
11.0k
  register _JSAMPLE *rescale = source->rescale;
602
11.0k
  JDIMENSION col;
603
11.0k
  unsigned int maxval = source->maxval;
604
11.0k
  register int rindex = rgb_red[cinfo->in_color_space];
605
11.0k
  register int gindex = rgb_green[cinfo->in_color_space];
606
11.0k
  register int bindex = rgb_blue[cinfo->in_color_space];
607
11.0k
  register int aindex = alpha_index[cinfo->in_color_space];
608
11.0k
  register int ps = rgb_pixelsize[cinfo->in_color_space];
609
610
11.0k
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
611
390
    ERREXIT(cinfo, JERR_INPUT_EOF);
612
11.0k
  ptr = source->pub._buffer[0];
613
11.0k
  bufferptr = source->iobuffer;
614
26.7k
  for (col = cinfo->image_width; col > 0; col--) {
615
15.6k
    register unsigned int temp;
616
15.6k
    temp  = (*bufferptr++) << 8;
617
15.6k
    temp |= (*bufferptr++);
618
15.6k
    if (temp > maxval)
619
145
      ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
620
15.6k
    ptr[rindex] = rescale[temp];
621
15.6k
    temp  = (*bufferptr++) << 8;
622
15.6k
    temp |= (*bufferptr++);
623
15.6k
    if (temp > maxval)
624
125
      ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
625
15.6k
    ptr[gindex] = rescale[temp];
626
15.6k
    temp  = (*bufferptr++) << 8;
627
15.6k
    temp |= (*bufferptr++);
628
15.6k
    if (temp > maxval)
629
105
      ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
630
15.6k
    ptr[bindex] = rescale[temp];
631
15.6k
    if (aindex >= 0)
632
3.06k
      ptr[aindex] = (1 << cinfo->data_precision) - 1;
633
15.6k
    ptr += ps;
634
15.6k
  }
635
11.0k
  return 1;
636
11.0k
}
Unexecuted instantiation: rdppm-12.c:get_word_rgb_row
Unexecuted instantiation: rdppm-16.c:get_word_rgb_row
637
638
639
METHODDEF(JDIMENSION)
640
get_word_rgb_cmyk_row(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
641
/* This version is for reading raw-word-format PPM files with any maxval */
642
2.21k
{
643
2.21k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
644
2.21k
  register _JSAMPROW ptr;
645
2.21k
  register unsigned char *bufferptr;
646
2.21k
  register _JSAMPLE *rescale = source->rescale;
647
2.21k
  JDIMENSION col;
648
2.21k
  unsigned int maxval = source->maxval;
649
650
2.21k
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
651
78
    ERREXIT(cinfo, JERR_INPUT_EOF);
652
2.21k
  ptr = source->pub._buffer[0];
653
2.21k
  bufferptr = source->iobuffer;
654
2.21k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
655
0
    for (col = cinfo->image_width; col > 0; col--) {
656
0
      register unsigned int r, g, b;
657
0
      r  = (*bufferptr++) << 8;
658
0
      r |= (*bufferptr++);
659
0
      if (r > maxval)
660
0
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
661
0
      g  = (*bufferptr++) << 8;
662
0
      g |= (*bufferptr++);
663
0
      if (g > maxval)
664
0
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
665
0
      b  = (*bufferptr++) << 8;
666
0
      b |= (*bufferptr++);
667
0
      if (b > maxval)
668
0
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
669
0
      rgb_to_cmyk(maxval, (_JSAMPLE)r, (_JSAMPLE)g, (_JSAMPLE)b, ptr, ptr + 1,
670
0
                  ptr + 2, ptr + 3);
671
0
      ptr += 4;
672
0
    }
673
2.21k
  } else {
674
5.35k
    for (col = cinfo->image_width; col > 0; col--) {
675
3.13k
      register unsigned int r, g, b;
676
3.13k
      r  = (*bufferptr++) << 8;
677
3.13k
      r |= (*bufferptr++);
678
3.13k
      if (r > maxval)
679
29
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
680
3.13k
      g  = (*bufferptr++) << 8;
681
3.13k
      g |= (*bufferptr++);
682
3.13k
      if (g > maxval)
683
25
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
684
3.13k
      b  = (*bufferptr++) << 8;
685
3.13k
      b |= (*bufferptr++);
686
3.13k
      if (b > maxval)
687
21
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
688
3.13k
      rgb_to_cmyk((1 << cinfo->data_precision) - 1, rescale[r], rescale[g],
689
3.13k
                  rescale[b], ptr, ptr + 1, ptr + 2, ptr + 3);
690
3.13k
      ptr += 4;
691
3.13k
    }
692
2.21k
  }
693
2.21k
  return 1;
694
2.21k
}
rdppm-8.c:get_word_rgb_cmyk_row
Line
Count
Source
642
2.21k
{
643
2.21k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
644
2.21k
  register _JSAMPROW ptr;
645
2.21k
  register unsigned char *bufferptr;
646
2.21k
  register _JSAMPLE *rescale = source->rescale;
647
2.21k
  JDIMENSION col;
648
2.21k
  unsigned int maxval = source->maxval;
649
650
2.21k
  if (!ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width))
651
78
    ERREXIT(cinfo, JERR_INPUT_EOF);
652
2.21k
  ptr = source->pub._buffer[0];
653
2.21k
  bufferptr = source->iobuffer;
654
2.21k
  if (maxval == (1U << cinfo->data_precision) - 1U) {
655
0
    for (col = cinfo->image_width; col > 0; col--) {
656
0
      register unsigned int r, g, b;
657
0
      r  = (*bufferptr++) << 8;
658
0
      r |= (*bufferptr++);
659
0
      if (r > maxval)
660
0
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
661
0
      g  = (*bufferptr++) << 8;
662
0
      g |= (*bufferptr++);
663
0
      if (g > maxval)
664
0
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
665
0
      b  = (*bufferptr++) << 8;
666
0
      b |= (*bufferptr++);
667
0
      if (b > maxval)
668
0
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
669
0
      rgb_to_cmyk(maxval, (_JSAMPLE)r, (_JSAMPLE)g, (_JSAMPLE)b, ptr, ptr + 1,
670
0
                  ptr + 2, ptr + 3);
671
0
      ptr += 4;
672
0
    }
673
2.21k
  } else {
674
5.35k
    for (col = cinfo->image_width; col > 0; col--) {
675
3.13k
      register unsigned int r, g, b;
676
3.13k
      r  = (*bufferptr++) << 8;
677
3.13k
      r |= (*bufferptr++);
678
3.13k
      if (r > maxval)
679
29
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
680
3.13k
      g  = (*bufferptr++) << 8;
681
3.13k
      g |= (*bufferptr++);
682
3.13k
      if (g > maxval)
683
25
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
684
3.13k
      b  = (*bufferptr++) << 8;
685
3.13k
      b |= (*bufferptr++);
686
3.13k
      if (b > maxval)
687
21
        ERREXIT(cinfo, JERR_PPM_OUTOFRANGE);
688
3.13k
      rgb_to_cmyk((1 << cinfo->data_precision) - 1, rescale[r], rescale[g],
689
3.13k
                  rescale[b], ptr, ptr + 1, ptr + 2, ptr + 3);
690
3.13k
      ptr += 4;
691
3.13k
    }
692
2.21k
  }
693
2.21k
  return 1;
694
2.21k
}
Unexecuted instantiation: rdppm-12.c:get_word_rgb_cmyk_row
Unexecuted instantiation: rdppm-16.c:get_word_rgb_cmyk_row
695
696
697
/*
698
 * Read the file header; return image size and component count.
699
 */
700
701
METHODDEF(void)
702
start_input_ppm(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
703
18.3k
{
704
18.3k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
705
18.3k
  int c;
706
18.3k
  unsigned int w, h, maxval;
707
18.3k
  boolean need_iobuffer, use_raw_buffer, need_rescale;
708
709
18.3k
  if (getc(source->pub.input_file) != 'P')
710
0
    ERREXIT(cinfo, JERR_PPM_NOT);
711
712
18.3k
  c = getc(source->pub.input_file); /* subformat discriminator character */
713
714
  /* detect unsupported variants (ie, PBM) before trying to read header */
715
18.3k
  switch (c) {
716
1.38k
  case '2':                     /* it's a text-format PGM file */
717
2.97k
  case '3':                     /* it's a text-format PPM file */
718
14.2k
  case '5':                     /* it's a raw-format PGM file */
719
18.3k
  case '6':                     /* it's a raw-format PPM file */
720
18.3k
    break;
721
14
  default:
722
14
    ERREXIT(cinfo, JERR_PPM_NOT);
723
14
    break;
724
18.3k
  }
725
726
  /* fetch the remaining header info */
727
18.3k
  w = read_pbm_integer(cinfo, source->pub.input_file, 65535);
728
18.3k
  h = read_pbm_integer(cinfo, source->pub.input_file, 65535);
729
18.3k
  maxval = read_pbm_integer(cinfo, source->pub.input_file, 65535);
730
731
18.3k
  if (w <= 0 || h <= 0 || maxval <= 0) /* error check */
732
35
    ERREXIT(cinfo, JERR_PPM_NOT);
733
18.3k
  if (w > JPEG_MAX_DIMENSION || h > JPEG_MAX_DIMENSION)
734
21
    ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, JPEG_MAX_DIMENSION);
735
18.3k
  if (sinfo->max_pixels && (unsigned long long)w * h > sinfo->max_pixels)
736
210
    ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, sinfo->max_pixels);
737
738
18.3k
  cinfo->image_width = (JDIMENSION)w;
739
18.3k
  cinfo->image_height = (JDIMENSION)h;
740
18.3k
  source->maxval = maxval;
741
742
  /* initialize flags to most common settings */
743
18.3k
  need_iobuffer = TRUE;         /* do we need an I/O buffer? */
744
18.3k
  use_raw_buffer = FALSE;       /* do we map input buffer onto I/O buffer? */
745
18.3k
  need_rescale = TRUE;          /* do we need a rescale array? */
746
747
18.3k
  switch (c) {
748
1.02k
  case '2':                     /* it's a text-format PGM file */
749
1.02k
    if (cinfo->in_color_space == JCS_UNKNOWN ||
750
1.02k
        cinfo->in_color_space == JCS_RGB)
751
0
      cinfo->in_color_space = JCS_GRAYSCALE;
752
1.02k
    TRACEMS3(cinfo, 1, JTRC_PGM_TEXT, w, h, maxval);
753
1.02k
    if (cinfo->in_color_space == JCS_GRAYSCALE)
754
146
      source->pub.get_pixel_rows = get_text_gray_row;
755
876
    else if (IsExtRGB(cinfo->in_color_space))
756
730
      source->pub.get_pixel_rows = get_text_gray_rgb_row;
757
146
    else if (cinfo->in_color_space == JCS_CMYK)
758
146
      source->pub.get_pixel_rows = get_text_gray_cmyk_row;
759
0
    else
760
0
      ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
761
1.02k
    need_iobuffer = FALSE;
762
1.02k
    break;
763
764
1.23k
  case '3':                     /* it's a text-format PPM file */
765
1.23k
    if (cinfo->in_color_space == JCS_UNKNOWN)
766
0
      cinfo->in_color_space = JCS_EXT_RGB;
767
1.23k
    TRACEMS3(cinfo, 1, JTRC_PPM_TEXT, w, h, maxval);
768
1.23k
    if (IsExtRGB(cinfo->in_color_space))
769
885
      source->pub.get_pixel_rows = get_text_rgb_row;
770
354
    else if (cinfo->in_color_space == JCS_CMYK)
771
177
      source->pub.get_pixel_rows = get_text_rgb_cmyk_row;
772
177
    else
773
177
      ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
774
1.23k
    need_iobuffer = FALSE;
775
1.23k
    break;
776
777
10.7k
  case '5':                     /* it's a raw-format PGM file */
778
10.7k
    if (cinfo->in_color_space == JCS_UNKNOWN ||
779
10.7k
        cinfo->in_color_space == JCS_RGB)
780
0
      cinfo->in_color_space = JCS_GRAYSCALE;
781
10.7k
    TRACEMS3(cinfo, 1, JTRC_PGM, w, h, maxval);
782
10.7k
    if (maxval > 255) {
783
763
      if (cinfo->in_color_space == JCS_GRAYSCALE)
784
109
        source->pub.get_pixel_rows = get_word_gray_row;
785
654
      else if (IsExtRGB(cinfo->in_color_space))
786
545
        source->pub.get_pixel_rows = get_word_gray_rgb_row;
787
109
      else if (cinfo->in_color_space == JCS_CMYK)
788
109
        source->pub.get_pixel_rows = get_word_gray_cmyk_row;
789
0
      else
790
0
        ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
791
#if BITS_IN_JSAMPLE == 8
792
10.0k
    } else if (maxval <= _MAXJSAMPLE &&
793
10.0k
               maxval == ((1U << cinfo->data_precision) - 1U) &&
794
1.07k
               cinfo->in_color_space == JCS_GRAYSCALE) {
795
153
      source->pub.get_pixel_rows = get_raw_row;
796
153
      use_raw_buffer = TRUE;
797
153
      need_rescale = FALSE;
798
#endif
799
9.85k
    } else {
800
9.85k
      if (cinfo->in_color_space == JCS_GRAYSCALE)
801
1.27k
        source->pub.get_pixel_rows = get_scaled_gray_row;
802
8.57k
      else if (IsExtRGB(cinfo->in_color_space))
803
7.14k
        source->pub.get_pixel_rows = get_gray_rgb_row;
804
1.42k
      else if (cinfo->in_color_space == JCS_CMYK)
805
1.42k
        source->pub.get_pixel_rows = get_gray_cmyk_row;
806
0
      else
807
0
        ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
808
9.85k
    }
809
10.7k
    break;
810
811
3.83k
  case '6':                     /* it's a raw-format PPM file */
812
3.83k
    if (cinfo->in_color_space == JCS_UNKNOWN)
813
0
      cinfo->in_color_space = JCS_EXT_RGB;
814
3.83k
    TRACEMS3(cinfo, 1, JTRC_PPM, w, h, maxval);
815
3.83k
    if (maxval > 255) {
816
1.12k
      if (IsExtRGB(cinfo->in_color_space))
817
800
        source->pub.get_pixel_rows = get_word_rgb_row;
818
320
      else if (cinfo->in_color_space == JCS_CMYK)
819
160
        source->pub.get_pixel_rows = get_word_rgb_cmyk_row;
820
160
      else
821
160
        ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
822
#if BITS_IN_JSAMPLE == 8
823
2.71k
    } else if (maxval <= _MAXJSAMPLE &&
824
2.71k
               maxval == ((1U << cinfo->data_precision) - 1U) &&
825
553
#if RGB_RED == 0 && RGB_GREEN == 1 && RGB_BLUE == 2 && RGB_PIXELSIZE == 3
826
553
               (cinfo->in_color_space == JCS_EXT_RGB ||
827
474
                cinfo->in_color_space == JCS_RGB)) {
828
#else
829
               cinfo->in_color_space == JCS_EXT_RGB) {
830
#endif
831
79
      source->pub.get_pixel_rows = get_raw_row;
832
79
      use_raw_buffer = TRUE;
833
79
      need_rescale = FALSE;
834
#endif
835
2.63k
    } else {
836
2.63k
      if (IsExtRGB(cinfo->in_color_space))
837
1.86k
        source->pub.get_pixel_rows = get_rgb_row;
838
776
      else if (cinfo->in_color_space == JCS_CMYK)
839
388
        source->pub.get_pixel_rows = get_rgb_cmyk_row;
840
388
      else
841
388
        ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
842
2.63k
    }
843
3.83k
    break;
844
18.3k
  }
845
846
16.1k
  if (IsExtRGB(cinfo->in_color_space))
847
12.0k
    cinfo->input_components = rgb_pixelsize[cinfo->in_color_space];
848
4.09k
  else if (cinfo->in_color_space == JCS_GRAYSCALE)
849
1.68k
    cinfo->input_components = 1;
850
2.40k
  else if (cinfo->in_color_space == JCS_CMYK)
851
2.40k
    cinfo->input_components = 4;
852
853
  /* Allocate space for I/O buffer: 1 or 3 bytes or words/pixel. */
854
16.1k
  if (need_iobuffer) {
855
14.0k
    if (c == '6')
856
3.28k
      source->buffer_width = (size_t)w * 3 * (maxval <= 255 ? 1 : 2);
857
10.7k
    else
858
10.7k
      source->buffer_width = (size_t)w * (maxval <= 255 ? 1 : 2);
859
14.0k
    source->iobuffer = (unsigned char *)
860
14.0k
      (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
861
14.0k
                                  source->buffer_width);
862
14.0k
  }
863
864
  /* Create compressor input buffer. */
865
16.1k
  if (use_raw_buffer) {
866
    /* For unscaled raw-input case, we can just map it onto the I/O buffer. */
867
    /* Synthesize a _JSAMPARRAY pointer structure */
868
232
    source->pixrow = (_JSAMPROW)source->iobuffer;
869
232
    source->pub._buffer = &source->pixrow;
870
232
    source->pub.buffer_height = 1;
871
15.9k
  } else {
872
    /* Need to translate anyway, so make a separate sample buffer. */
873
15.9k
    source->pub._buffer = (_JSAMPARRAY)(*cinfo->mem->alloc_sarray)
874
15.9k
      ((j_common_ptr)cinfo, JPOOL_IMAGE,
875
15.9k
       (JDIMENSION)w * cinfo->input_components, (JDIMENSION)1);
876
15.9k
    source->pub.buffer_height = 1;
877
15.9k
  }
878
879
  /* Compute the rescaling array if required. */
880
16.1k
  if (need_rescale) {
881
15.9k
    size_t val, half_maxval;
882
883
    /* On 16-bit-int machines we have to be careful of maxval = 65535 */
884
15.9k
    source->rescale = (_JSAMPLE *)
885
15.9k
      (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
886
15.9k
                                  (MAX(maxval, 255) + 1L) * sizeof(_JSAMPLE));
887
15.9k
    memset(source->rescale, 0, (MAX(maxval, 255) + 1L) * sizeof(_JSAMPLE));
888
15.9k
    half_maxval = (size_t)maxval / 2;
889
21.9M
    for (val = 0; val <= (size_t)maxval; val++) {
890
      /* The multiplication here must be done in 32 bits to avoid overflow */
891
21.9M
      source->rescale[val] =
892
21.9M
        (_JSAMPLE)((val * ((1 << cinfo->data_precision) - 1) + half_maxval) /
893
21.9M
                   maxval);
894
21.9M
    }
895
15.9k
  }
896
16.1k
}
rdppm-8.c:start_input_ppm
Line
Count
Source
703
18.3k
{
704
18.3k
  ppm_source_ptr source = (ppm_source_ptr)sinfo;
705
18.3k
  int c;
706
18.3k
  unsigned int w, h, maxval;
707
18.3k
  boolean need_iobuffer, use_raw_buffer, need_rescale;
708
709
18.3k
  if (getc(source->pub.input_file) != 'P')
710
0
    ERREXIT(cinfo, JERR_PPM_NOT);
711
712
18.3k
  c = getc(source->pub.input_file); /* subformat discriminator character */
713
714
  /* detect unsupported variants (ie, PBM) before trying to read header */
715
18.3k
  switch (c) {
716
1.38k
  case '2':                     /* it's a text-format PGM file */
717
2.97k
  case '3':                     /* it's a text-format PPM file */
718
14.2k
  case '5':                     /* it's a raw-format PGM file */
719
18.3k
  case '6':                     /* it's a raw-format PPM file */
720
18.3k
    break;
721
14
  default:
722
14
    ERREXIT(cinfo, JERR_PPM_NOT);
723
14
    break;
724
18.3k
  }
725
726
  /* fetch the remaining header info */
727
18.3k
  w = read_pbm_integer(cinfo, source->pub.input_file, 65535);
728
18.3k
  h = read_pbm_integer(cinfo, source->pub.input_file, 65535);
729
18.3k
  maxval = read_pbm_integer(cinfo, source->pub.input_file, 65535);
730
731
18.3k
  if (w <= 0 || h <= 0 || maxval <= 0) /* error check */
732
35
    ERREXIT(cinfo, JERR_PPM_NOT);
733
18.3k
  if (w > JPEG_MAX_DIMENSION || h > JPEG_MAX_DIMENSION)
734
21
    ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, JPEG_MAX_DIMENSION);
735
18.3k
  if (sinfo->max_pixels && (unsigned long long)w * h > sinfo->max_pixels)
736
210
    ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, sinfo->max_pixels);
737
738
18.3k
  cinfo->image_width = (JDIMENSION)w;
739
18.3k
  cinfo->image_height = (JDIMENSION)h;
740
18.3k
  source->maxval = maxval;
741
742
  /* initialize flags to most common settings */
743
18.3k
  need_iobuffer = TRUE;         /* do we need an I/O buffer? */
744
18.3k
  use_raw_buffer = FALSE;       /* do we map input buffer onto I/O buffer? */
745
18.3k
  need_rescale = TRUE;          /* do we need a rescale array? */
746
747
18.3k
  switch (c) {
748
1.02k
  case '2':                     /* it's a text-format PGM file */
749
1.02k
    if (cinfo->in_color_space == JCS_UNKNOWN ||
750
1.02k
        cinfo->in_color_space == JCS_RGB)
751
0
      cinfo->in_color_space = JCS_GRAYSCALE;
752
1.02k
    TRACEMS3(cinfo, 1, JTRC_PGM_TEXT, w, h, maxval);
753
1.02k
    if (cinfo->in_color_space == JCS_GRAYSCALE)
754
146
      source->pub.get_pixel_rows = get_text_gray_row;
755
876
    else if (IsExtRGB(cinfo->in_color_space))
756
730
      source->pub.get_pixel_rows = get_text_gray_rgb_row;
757
146
    else if (cinfo->in_color_space == JCS_CMYK)
758
146
      source->pub.get_pixel_rows = get_text_gray_cmyk_row;
759
0
    else
760
0
      ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
761
1.02k
    need_iobuffer = FALSE;
762
1.02k
    break;
763
764
1.23k
  case '3':                     /* it's a text-format PPM file */
765
1.23k
    if (cinfo->in_color_space == JCS_UNKNOWN)
766
0
      cinfo->in_color_space = JCS_EXT_RGB;
767
1.23k
    TRACEMS3(cinfo, 1, JTRC_PPM_TEXT, w, h, maxval);
768
1.23k
    if (IsExtRGB(cinfo->in_color_space))
769
885
      source->pub.get_pixel_rows = get_text_rgb_row;
770
354
    else if (cinfo->in_color_space == JCS_CMYK)
771
177
      source->pub.get_pixel_rows = get_text_rgb_cmyk_row;
772
177
    else
773
177
      ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
774
1.23k
    need_iobuffer = FALSE;
775
1.23k
    break;
776
777
10.7k
  case '5':                     /* it's a raw-format PGM file */
778
10.7k
    if (cinfo->in_color_space == JCS_UNKNOWN ||
779
10.7k
        cinfo->in_color_space == JCS_RGB)
780
0
      cinfo->in_color_space = JCS_GRAYSCALE;
781
10.7k
    TRACEMS3(cinfo, 1, JTRC_PGM, w, h, maxval);
782
10.7k
    if (maxval > 255) {
783
763
      if (cinfo->in_color_space == JCS_GRAYSCALE)
784
109
        source->pub.get_pixel_rows = get_word_gray_row;
785
654
      else if (IsExtRGB(cinfo->in_color_space))
786
545
        source->pub.get_pixel_rows = get_word_gray_rgb_row;
787
109
      else if (cinfo->in_color_space == JCS_CMYK)
788
109
        source->pub.get_pixel_rows = get_word_gray_cmyk_row;
789
0
      else
790
0
        ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
791
763
#if BITS_IN_JSAMPLE == 8
792
10.0k
    } else if (maxval <= _MAXJSAMPLE &&
793
10.0k
               maxval == ((1U << cinfo->data_precision) - 1U) &&
794
1.07k
               cinfo->in_color_space == JCS_GRAYSCALE) {
795
153
      source->pub.get_pixel_rows = get_raw_row;
796
153
      use_raw_buffer = TRUE;
797
153
      need_rescale = FALSE;
798
153
#endif
799
9.85k
    } else {
800
9.85k
      if (cinfo->in_color_space == JCS_GRAYSCALE)
801
1.27k
        source->pub.get_pixel_rows = get_scaled_gray_row;
802
8.57k
      else if (IsExtRGB(cinfo->in_color_space))
803
7.14k
        source->pub.get_pixel_rows = get_gray_rgb_row;
804
1.42k
      else if (cinfo->in_color_space == JCS_CMYK)
805
1.42k
        source->pub.get_pixel_rows = get_gray_cmyk_row;
806
0
      else
807
0
        ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
808
9.85k
    }
809
10.7k
    break;
810
811
3.83k
  case '6':                     /* it's a raw-format PPM file */
812
3.83k
    if (cinfo->in_color_space == JCS_UNKNOWN)
813
0
      cinfo->in_color_space = JCS_EXT_RGB;
814
3.83k
    TRACEMS3(cinfo, 1, JTRC_PPM, w, h, maxval);
815
3.83k
    if (maxval > 255) {
816
1.12k
      if (IsExtRGB(cinfo->in_color_space))
817
800
        source->pub.get_pixel_rows = get_word_rgb_row;
818
320
      else if (cinfo->in_color_space == JCS_CMYK)
819
160
        source->pub.get_pixel_rows = get_word_rgb_cmyk_row;
820
160
      else
821
160
        ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
822
1.12k
#if BITS_IN_JSAMPLE == 8
823
2.71k
    } else if (maxval <= _MAXJSAMPLE &&
824
2.71k
               maxval == ((1U << cinfo->data_precision) - 1U) &&
825
553
#if RGB_RED == 0 && RGB_GREEN == 1 && RGB_BLUE == 2 && RGB_PIXELSIZE == 3
826
553
               (cinfo->in_color_space == JCS_EXT_RGB ||
827
474
                cinfo->in_color_space == JCS_RGB)) {
828
#else
829
               cinfo->in_color_space == JCS_EXT_RGB) {
830
#endif
831
79
      source->pub.get_pixel_rows = get_raw_row;
832
79
      use_raw_buffer = TRUE;
833
79
      need_rescale = FALSE;
834
79
#endif
835
2.63k
    } else {
836
2.63k
      if (IsExtRGB(cinfo->in_color_space))
837
1.86k
        source->pub.get_pixel_rows = get_rgb_row;
838
776
      else if (cinfo->in_color_space == JCS_CMYK)
839
388
        source->pub.get_pixel_rows = get_rgb_cmyk_row;
840
388
      else
841
388
        ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
842
2.63k
    }
843
3.83k
    break;
844
18.3k
  }
845
846
16.1k
  if (IsExtRGB(cinfo->in_color_space))
847
12.0k
    cinfo->input_components = rgb_pixelsize[cinfo->in_color_space];
848
4.09k
  else if (cinfo->in_color_space == JCS_GRAYSCALE)
849
1.68k
    cinfo->input_components = 1;
850
2.40k
  else if (cinfo->in_color_space == JCS_CMYK)
851
2.40k
    cinfo->input_components = 4;
852
853
  /* Allocate space for I/O buffer: 1 or 3 bytes or words/pixel. */
854
16.1k
  if (need_iobuffer) {
855
14.0k
    if (c == '6')
856
3.28k
      source->buffer_width = (size_t)w * 3 * (maxval <= 255 ? 1 : 2);
857
10.7k
    else
858
10.7k
      source->buffer_width = (size_t)w * (maxval <= 255 ? 1 : 2);
859
14.0k
    source->iobuffer = (unsigned char *)
860
14.0k
      (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
861
14.0k
                                  source->buffer_width);
862
14.0k
  }
863
864
  /* Create compressor input buffer. */
865
16.1k
  if (use_raw_buffer) {
866
    /* For unscaled raw-input case, we can just map it onto the I/O buffer. */
867
    /* Synthesize a _JSAMPARRAY pointer structure */
868
232
    source->pixrow = (_JSAMPROW)source->iobuffer;
869
232
    source->pub._buffer = &source->pixrow;
870
232
    source->pub.buffer_height = 1;
871
15.9k
  } else {
872
    /* Need to translate anyway, so make a separate sample buffer. */
873
15.9k
    source->pub._buffer = (_JSAMPARRAY)(*cinfo->mem->alloc_sarray)
874
15.9k
      ((j_common_ptr)cinfo, JPOOL_IMAGE,
875
15.9k
       (JDIMENSION)w * cinfo->input_components, (JDIMENSION)1);
876
15.9k
    source->pub.buffer_height = 1;
877
15.9k
  }
878
879
  /* Compute the rescaling array if required. */
880
16.1k
  if (need_rescale) {
881
15.9k
    size_t val, half_maxval;
882
883
    /* On 16-bit-int machines we have to be careful of maxval = 65535 */
884
15.9k
    source->rescale = (_JSAMPLE *)
885
15.9k
      (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
886
15.9k
                                  (MAX(maxval, 255) + 1L) * sizeof(_JSAMPLE));
887
15.9k
    memset(source->rescale, 0, (MAX(maxval, 255) + 1L) * sizeof(_JSAMPLE));
888
15.9k
    half_maxval = (size_t)maxval / 2;
889
21.9M
    for (val = 0; val <= (size_t)maxval; val++) {
890
      /* The multiplication here must be done in 32 bits to avoid overflow */
891
21.9M
      source->rescale[val] =
892
21.9M
        (_JSAMPLE)((val * ((1 << cinfo->data_precision) - 1) + half_maxval) /
893
21.9M
                   maxval);
894
21.9M
    }
895
15.9k
  }
896
16.1k
}
Unexecuted instantiation: rdppm-12.c:start_input_ppm
Unexecuted instantiation: rdppm-16.c:start_input_ppm
897
898
899
METHODDEF(boolean)
900
read_icc_profile_ppm(j_compress_ptr cinfo, cjpeg_source_ptr sinfo,
901
                     JOCTET **icc_data_ptr, unsigned int *icc_data_len)
902
0
{
903
0
  return FALSE;
904
0
}
Unexecuted instantiation: rdppm-8.c:read_icc_profile_ppm
Unexecuted instantiation: rdppm-12.c:read_icc_profile_ppm
Unexecuted instantiation: rdppm-16.c:read_icc_profile_ppm
905
906
907
/*
908
 * Finish up at the end of the file.
909
 */
910
911
METHODDEF(void)
912
finish_input_ppm(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
913
18.3k
{
914
  /* no work */
915
18.3k
}
rdppm-8.c:finish_input_ppm
Line
Count
Source
913
18.3k
{
914
  /* no work */
915
18.3k
}
Unexecuted instantiation: rdppm-12.c:finish_input_ppm
Unexecuted instantiation: rdppm-16.c:finish_input_ppm
916
917
918
/*
919
 * The module selection routine for PPM format input.
920
 */
921
922
GLOBAL(cjpeg_source_ptr)
923
_jinit_read_ppm(j_compress_ptr cinfo)
924
18.3k
{
925
18.3k
  ppm_source_ptr source;
926
927
#if BITS_IN_JSAMPLE == 8
928
18.3k
  if (cinfo->data_precision > BITS_IN_JSAMPLE || cinfo->data_precision < 2)
929
#else
930
0
  if (cinfo->data_precision > BITS_IN_JSAMPLE ||
931
0
      cinfo->data_precision < BITS_IN_JSAMPLE - 3)
932
0
#endif
933
0
    ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision);
934
935
  /* Create module interface object */
936
18.3k
  source = (ppm_source_ptr)
937
18.3k
    (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
938
18.3k
                                sizeof(ppm_source_struct));
939
  /* Fill in method ptrs, except get_pixel_rows which start_input sets */
940
18.3k
  source->pub.start_input = start_input_ppm;
941
18.3k
  source->pub.read_icc_profile = read_icc_profile_ppm;
942
18.3k
  source->pub.finish_input = finish_input_ppm;
943
18.3k
  source->pub.max_pixels = 0;
944
945
18.3k
  return (cjpeg_source_ptr)source;
946
18.3k
}
jinit_read_ppm
Line
Count
Source
924
18.3k
{
925
18.3k
  ppm_source_ptr source;
926
927
18.3k
#if BITS_IN_JSAMPLE == 8
928
18.3k
  if (cinfo->data_precision > BITS_IN_JSAMPLE || cinfo->data_precision < 2)
929
#else
930
  if (cinfo->data_precision > BITS_IN_JSAMPLE ||
931
      cinfo->data_precision < BITS_IN_JSAMPLE - 3)
932
#endif
933
0
    ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision);
934
935
  /* Create module interface object */
936
18.3k
  source = (ppm_source_ptr)
937
18.3k
    (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
938
18.3k
                                sizeof(ppm_source_struct));
939
  /* Fill in method ptrs, except get_pixel_rows which start_input sets */
940
18.3k
  source->pub.start_input = start_input_ppm;
941
18.3k
  source->pub.read_icc_profile = read_icc_profile_ppm;
942
18.3k
  source->pub.finish_input = finish_input_ppm;
943
18.3k
  source->pub.max_pixels = 0;
944
945
18.3k
  return (cjpeg_source_ptr)source;
946
18.3k
}
Unexecuted instantiation: j12init_read_ppm
Unexecuted instantiation: j16init_read_ppm
947
948
#endif /* defined(PPM_SUPPORTED) &&
949
          (BITS_IN_JSAMPLE != 16 || defined(C_LOSSLESS_SUPPORTED)) */