ReactOS 0.4.16-dev-2613-g9533ad7
jdapimin.c File Reference
#include "jinclude.h"
#include "jpeglib.h"
Include dependency graph for jdapimin.c:

Go to the source code of this file.

Macros

#define JPEG_INTERNALS
 

Functions

 jpeg_CreateDecompress (j_decompress_ptr cinfo, int version, size_t structsize)
 
 jpeg_destroy_decompress (j_decompress_ptr cinfo)
 
 jpeg_abort_decompress (j_decompress_ptr cinfo)
 
 default_decompress_parms (j_decompress_ptr cinfo)
 
 jpeg_read_header (j_decompress_ptr cinfo, boolean require_image)
 
 jpeg_consume_input (j_decompress_ptr cinfo)
 
 jpeg_input_complete (j_decompress_ptr cinfo)
 
 jpeg_has_multiple_scans (j_decompress_ptr cinfo)
 
 jpeg_finish_decompress (j_decompress_ptr cinfo)
 

Macro Definition Documentation

◆ JPEG_INTERNALS

#define JPEG_INTERNALS

Definition at line 20 of file jdapimin.c.

Function Documentation

◆ default_decompress_parms()

default_decompress_parms ( j_decompress_ptr  cinfo)

Definition at line 115 of file jdapimin.c.

116{
117 int cid0, cid1, cid2, cid3;
118
119 /* Guess the input colorspace, and set output colorspace accordingly. */
120 /* Note application may override our guesses. */
121 switch (cinfo->num_components) {
122 case 1:
125 break;
126
127 case 3:
128 cid0 = cinfo->comp_info[0].component_id;
129 cid1 = cinfo->comp_info[1].component_id;
130 cid2 = cinfo->comp_info[2].component_id;
131
132 /* For robust detection of standard colorspaces
133 * regardless of the presence of special markers,
134 * check component IDs from SOF marker first.
135 */
136 if (cid0 == 0x01 && cid1 == 0x02 && cid2 == 0x03)
138 else if (cid0 == 0x01 && cid1 == 0x22 && cid2 == 0x23)
140 else if (cid0 == 0x52 && cid1 == 0x47 && cid2 == 0x42)
141 cinfo->jpeg_color_space = JCS_RGB; /* ASCII 'R', 'G', 'B' */
142 else if (cid0 == 0x72 && cid1 == 0x67 && cid2 == 0x62)
143 cinfo->jpeg_color_space = JCS_BG_RGB; /* ASCII 'r', 'g', 'b' */
144 else if (cinfo->saw_JFIF_marker)
145 cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */
146 else if (cinfo->saw_Adobe_marker) {
147 switch (cinfo->Adobe_transform) {
148 case 0:
149 cinfo->jpeg_color_space = JCS_RGB;
150 break;
151 case 1:
153 break;
154 default:
155 WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform);
156 cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */
157 }
158 } else {
159 TRACEMS3(cinfo, 1, JTRC_UNKNOWN_IDS, cid0, cid1, cid2);
160 cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */
161 }
162 /* Always guess RGB is proper output colorspace. */
163 cinfo->out_color_space = JCS_RGB;
164 break;
165
166 case 4:
167 cid0 = cinfo->comp_info[0].component_id;
168 cid1 = cinfo->comp_info[1].component_id;
169 cid2 = cinfo->comp_info[2].component_id;
170 cid3 = cinfo->comp_info[3].component_id;
171
172 /* For robust detection of standard colorspaces
173 * regardless of the presence of special markers,
174 * check component IDs from SOF marker first.
175 */
176 if (cid0 == 0x01 && cid1 == 0x02 && cid2 == 0x03 && cid3 == 0x04)
177 cinfo->jpeg_color_space = JCS_YCCK;
178 else if (cid0 == 0x43 && cid1 == 0x4D && cid2 == 0x59 && cid3 == 0x4B)
179 cinfo->jpeg_color_space = JCS_CMYK; /* ASCII 'C', 'M', 'Y', 'K' */
180 else if (cinfo->saw_Adobe_marker) {
181 switch (cinfo->Adobe_transform) {
182 case 0:
183 cinfo->jpeg_color_space = JCS_CMYK;
184 break;
185 case 2:
186 cinfo->jpeg_color_space = JCS_YCCK;
187 break;
188 default:
189 WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform);
190 cinfo->jpeg_color_space = JCS_YCCK; /* assume it's YCCK */
191 }
192 } else {
193 /* Unknown IDs and no special markers, assume straight CMYK. */
194 cinfo->jpeg_color_space = JCS_CMYK;
195 }
196 cinfo->out_color_space = JCS_CMYK;
197 break;
198
199 default:
202 }
203
204 /* Set defaults for other decompression parameters. */
205 cinfo->scale_num = cinfo->block_size; /* 1:1 scaling */
206 cinfo->scale_denom = cinfo->block_size;
207 cinfo->output_gamma = 1.0;
208 cinfo->buffered_image = FALSE;
209 cinfo->raw_data_out = FALSE;
210 cinfo->dct_method = JDCT_DEFAULT;
211 cinfo->do_fancy_upsampling = TRUE;
212 cinfo->do_block_smoothing = TRUE;
213 cinfo->quantize_colors = FALSE;
214 /* We set these in case application only sets quantize_colors. */
215 cinfo->dither_mode = JDITHER_FS;
216#ifdef QUANT_2PASS_SUPPORTED
217 cinfo->two_pass_quantize = TRUE;
218#else
219 cinfo->two_pass_quantize = FALSE;
220#endif
221 cinfo->desired_number_of_colors = 256;
222 cinfo->colormap = NULL;
223 /* Initialize for no mode change in buffered-image mode. */
224 cinfo->enable_1pass_quant = FALSE;
226 cinfo->enable_2pass_quant = FALSE;
227}
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define WARNMS1(cinfo, code, p1)
Definition: jerror.h:254
#define TRACEMS3(cinfo, lvl, code, p1, p2, p3)
Definition: jerror.h:277
#define JDCT_DEFAULT
Definition: jpeglib.h:247
@ JDITHER_FS
Definition: jpeglib.h:258
@ JCS_YCCK
Definition: jpeglib.h:226
@ JCS_BG_RGB
Definition: jpeglib.h:227
@ JCS_BG_YCC
Definition: jpeglib.h:228
@ JCS_UNKNOWN
Definition: jpeglib.h:221
@ JCS_YCbCr
Definition: jpeglib.h:224
@ JCS_CMYK
Definition: jpeglib.h:225
@ JCS_GRAYSCALE
Definition: jpeglib.h:222
@ JCS_RGB
Definition: jpeglib.h:223
boolean two_pass_quantize
Definition: jpeglib.h:495
boolean saw_JFIF_marker
Definition: jpeglib.h:600
JSAMPARRAY colormap
Definition: jpeglib.h:528
boolean quantize_colors
Definition: jpeglib.h:492
boolean do_fancy_upsampling
Definition: jpeglib.h:489
boolean do_block_smoothing
Definition: jpeglib.h:490
J_COLOR_SPACE out_color_space
Definition: jpeglib.h:479
unsigned int scale_num
Definition: jpeglib.h:481
boolean enable_2pass_quant
Definition: jpeglib.h:500
J_COLOR_SPACE jpeg_color_space
Definition: jpeglib.h:472
boolean enable_1pass_quant
Definition: jpeglib.h:498
boolean buffered_image
Definition: jpeglib.h:485
boolean saw_Adobe_marker
Definition: jpeglib.h:607
boolean enable_external_quant
Definition: jpeglib.h:499
unsigned int scale_denom
Definition: jpeglib.h:481
J_DITHER_MODE dither_mode
Definition: jpeglib.h:494
J_DCT_METHOD dct_method
Definition: jpeglib.h:488
jpeg_component_info * comp_info
Definition: jpeglib.h:584

Referenced by jpeg_consume_input().

◆ jpeg_abort_decompress()

jpeg_abort_decompress ( j_decompress_ptr  cinfo)

Definition at line 104 of file jdapimin.c.

105{
106 jpeg_abort((j_common_ptr) cinfo); /* use common routine */
107}
jpeg_abort(j_common_ptr cinfo)
Definition: jcomapi.c:30

◆ jpeg_consume_input()

jpeg_consume_input ( j_decompress_ptr  cinfo)

Definition at line 304 of file jdapimin.c.

305{
306 int retcode = JPEG_SUSPENDED;
307
308 /* NB: every possible DSTATE value should be listed in this switch */
309 switch (cinfo->global_state) {
310 case DSTATE_START:
311 /* Start-of-datastream actions: reset appropriate modules */
312 (*cinfo->inputctl->reset_input_controller) (cinfo);
313 /* Initialize application's data source module */
314 (*cinfo->src->init_source) (cinfo);
315 cinfo->global_state = DSTATE_INHEADER;
316 /*FALLTHROUGH*/
317 case DSTATE_INHEADER:
318 retcode = (*cinfo->inputctl->consume_input) (cinfo);
319 if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */
320 /* Set up default parameters based on header data */
322 /* Set global state: ready for start_decompress */
323 cinfo->global_state = DSTATE_READY;
324 }
325 break;
326 case DSTATE_READY:
327 /* Can't advance past first SOS until start_decompress is called */
328 retcode = JPEG_REACHED_SOS;
329 break;
330 case DSTATE_PRELOAD:
331 case DSTATE_PRESCAN:
332 case DSTATE_SCANNING:
333 case DSTATE_RAW_OK:
334 case DSTATE_BUFIMAGE:
335 case DSTATE_BUFPOST:
336 case DSTATE_STOPPING:
337 retcode = (*cinfo->inputctl->consume_input) (cinfo);
338 break;
339 default:
340 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
341 }
342 return retcode;
343}
default_decompress_parms(j_decompress_ptr cinfo)
Definition: jdapimin.c:115
#define ERREXIT1(cinfo, code, p1)
Definition: jerror.h:212
#define DSTATE_BUFIMAGE
Definition: jpegint.h:37
#define DSTATE_INHEADER
Definition: jpegint.h:31
#define DSTATE_READY
Definition: jpegint.h:32
#define DSTATE_START
Definition: jpegint.h:30
#define DSTATE_PRELOAD
Definition: jpegint.h:33
#define DSTATE_PRESCAN
Definition: jpegint.h:34
#define DSTATE_SCANNING
Definition: jpegint.h:35
#define DSTATE_RAW_OK
Definition: jpegint.h:36
#define DSTATE_BUFPOST
Definition: jpegint.h:38
#define DSTATE_STOPPING
Definition: jpegint.h:40
#define JPEG_REACHED_SOS
Definition: jpeglib.h:1078
#define JPEG_SUSPENDED
Definition: jpeglib.h:1047
struct jpeg_source_mgr * src
Definition: jpeglib.h:464
struct jpeg_input_controller * inputctl
Definition: jpeglib.h:684

Referenced by jpeg_read_header().

◆ jpeg_CreateDecompress()

jpeg_CreateDecompress ( j_decompress_ptr  cinfo,
int  version,
size_t  structsize 
)

Definition at line 31 of file jdapimin.c.

32{
33 int i;
34
35 /* Guard against version mismatches between library and caller. */
36 cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */
38 ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version);
40 ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE,
41 (int) SIZEOF(struct jpeg_decompress_struct), (int) structsize);
42
43 /* For debugging purposes, we zero the whole master structure.
44 * But the application has already set the err pointer, and may have set
45 * client_data, so we have to save and restore those fields.
46 * Note: if application hasn't set client_data, tools like Purify may
47 * complain here.
48 */
49 {
50 struct jpeg_error_mgr * err = cinfo->err;
51 void * client_data = cinfo->client_data; /* ignore Purify complaint here */
53 cinfo->err = err;
54 cinfo->client_data = client_data;
55 }
56 cinfo->is_decompressor = TRUE;
57
58 /* Initialize a memory manager instance for this object */
60
61 /* Zero out pointers to permanent structures. */
62 cinfo->progress = NULL;
63 cinfo->src = NULL;
64
65 for (i = 0; i < NUM_QUANT_TBLS; i++)
66 cinfo->quant_tbl_ptrs[i] = NULL;
67
68 for (i = 0; i < NUM_HUFF_TBLS; i++) {
69 cinfo->dc_huff_tbl_ptrs[i] = NULL;
70 cinfo->ac_huff_tbl_ptrs[i] = NULL;
71 }
72
73 /* Initialize marker processor so application can override methods
74 * for COM, APPn markers before calling jpeg_read_header.
75 */
76 cinfo->marker_list = NULL;
78
79 /* And initialize the overall input controller. */
81
82 /* OK, I'm ready */
83 cinfo->global_state = DSTATE_START;
84}
#define SIZEOF(_ar)
Definition: calc.h:97
static const WCHAR version[]
Definition: asmname.c:66
for(i=0;i< ARRAY_SIZE(offsets);i++)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
jinit_input_controller(j_decompress_ptr cinfo)
Definition: jdinput.c:638
jinit_marker_reader(j_decompress_ptr cinfo)
Definition: jdmarker.c:1408
#define ERREXIT2(cinfo, code, p1, p2)
Definition: jerror.h:216
jinit_memory_mgr(j_common_ptr cinfo)
Definition: jmemmgr.c:1025
#define NUM_HUFF_TBLS
Definition: jpeglib.h:53
int size_t structsize
Definition: jpeglib.h:968
#define NUM_QUANT_TBLS
Definition: jpeglib.h:52
#define JPEG_LIB_VERSION
Definition: jpeglib.h:40
#define err(...)
jpeg_saved_marker_ptr marker_list
Definition: jpeglib.h:620
JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]
Definition: jpeglib.h:571
JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]
Definition: jpeglib.h:574
JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]
Definition: jpeglib.h:575
#define MEMZERO(addr, type, size)
Definition: svc_dg.c:324

Referenced by jpeg_decoder_initialize().

◆ jpeg_destroy_decompress()

jpeg_destroy_decompress ( j_decompress_ptr  cinfo)

Definition at line 92 of file jdapimin.c.

93{
94 jpeg_destroy((j_common_ptr) cinfo); /* use common routine */
95}
jpeg_destroy(j_common_ptr cinfo)
Definition: jcomapi.c:70

Referenced by jpeg_decoder_destroy(), main(), and read_JPEG_file().

◆ jpeg_finish_decompress()

jpeg_finish_decompress ( j_decompress_ptr  cinfo)

Definition at line 386 of file jdapimin.c.

387{
388 if ((cinfo->global_state == DSTATE_SCANNING ||
389 cinfo->global_state == DSTATE_RAW_OK) && ! cinfo->buffered_image) {
390 /* Terminate final pass of non-buffered mode */
391 if (cinfo->output_scanline < cinfo->output_height)
392 ERREXIT(cinfo, JERR_TOO_LITTLE_DATA);
393 (*cinfo->master->finish_output_pass) (cinfo);
394 cinfo->global_state = DSTATE_STOPPING;
395 } else if (cinfo->global_state == DSTATE_BUFIMAGE) {
396 /* Finishing after a buffered-image operation */
397 cinfo->global_state = DSTATE_STOPPING;
398 } else if (cinfo->global_state != DSTATE_STOPPING) {
399 /* STOPPING = repeat call after a suspension, anything else is error */
400 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
401 }
402 /* Read until EOI */
403 while (! cinfo->inputctl->eoi_reached) {
404 if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED)
405 return FALSE; /* Suspend, come back later */
406 }
407 /* Do final cleanup */
408 (*cinfo->src->term_source) (cinfo);
409 /* We can use jpeg_abort to release memory and reset global_state */
410 jpeg_abort((j_common_ptr) cinfo);
411 return TRUE;
412}
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
JDIMENSION output_height
Definition: jpeglib.h:509
JDIMENSION output_scanline
Definition: jpeglib.h:538
struct jpeg_decomp_master * master
Definition: jpeglib.h:680

Referenced by main(), and read_JPEG_file().

◆ jpeg_has_multiple_scans()

jpeg_has_multiple_scans ( j_decompress_ptr  cinfo)

Definition at line 366 of file jdapimin.c.

367{
368 /* Only valid after jpeg_read_header completes */
369 if (cinfo->global_state < DSTATE_READY ||
370 cinfo->global_state > DSTATE_STOPPING)
371 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
372 return cinfo->inputctl->has_multiple_scans;
373}

◆ jpeg_input_complete()

jpeg_input_complete ( j_decompress_ptr  cinfo)

Definition at line 351 of file jdapimin.c.

352{
353 /* Check for valid jpeg object */
354 if (cinfo->global_state < DSTATE_START ||
355 cinfo->global_state > DSTATE_STOPPING)
356 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
357 return cinfo->inputctl->eoi_reached;
358}

◆ jpeg_read_header()

jpeg_read_header ( j_decompress_ptr  cinfo,
boolean  require_image 
)

Definition at line 258 of file jdapimin.c.

259{
260 int retcode;
261
262 if (cinfo->global_state != DSTATE_START &&
263 cinfo->global_state != DSTATE_INHEADER)
264 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
265
266 retcode = jpeg_consume_input(cinfo);
267
268 switch (retcode) {
269 case JPEG_REACHED_SOS:
270 retcode = JPEG_HEADER_OK;
271 break;
272 case JPEG_REACHED_EOI:
273 if (require_image) /* Complain if application wanted an image */
274 ERREXIT(cinfo, JERR_NO_IMAGE);
275 /* Reset to start state; it would be safer to require the application to
276 * call jpeg_abort, but we can't change it now for compatibility reasons.
277 * A side effect is to free any temporary memory (there shouldn't be any).
278 */
279 jpeg_abort((j_common_ptr) cinfo); /* sets state = DSTATE_START */
280 retcode = JPEG_HEADER_TABLES_ONLY;
281 break;
282 case JPEG_SUSPENDED:
283 /* no work */
284 break;
285 }
286
287 return retcode;
288}
jpeg_consume_input(j_decompress_ptr cinfo)
Definition: jdapimin.c:304
#define JPEG_HEADER_TABLES_ONLY
Definition: jpeglib.h:1049
boolean require_image
Definition: jpeglib.h:1045
#define JPEG_REACHED_EOI
Definition: jpeglib.h:1079
#define JPEG_HEADER_OK
Definition: jpeglib.h:1048

Referenced by jpeg_decoder_initialize(), main(), and read_JPEG_file().