OLD | NEW |
1 /* | 1 /* |
2 * jdmaster.c | 2 * jdmaster.c |
3 * | 3 * |
4 * This file was part of the Independent JPEG Group's software: | 4 * This file was part of the Independent JPEG Group's software: |
5 * Copyright (C) 1991-1997, Thomas G. Lane. | 5 * Copyright (C) 1991-1997, Thomas G. Lane. |
6 * Modified 2002-2009 by Guido Vollbeding. | 6 * Modified 2002-2009 by Guido Vollbeding. |
7 * libjpeg-turbo Modifications: | 7 * libjpeg-turbo Modifications: |
8 * Copyright (C) 2009-2011, D. R. Commander. | 8 * Copyright (C) 2009-2011, 2016, D. R. Commander. |
9 * Copyright (C) 2013, Linaro Limited. | 9 * Copyright (C) 2013, Linaro Limited. |
10 | 10 * Copyright (C) 2015, Google, Inc. |
11 * For conditions of distribution and use, see the accompanying README file. | 11 * For conditions of distribution and use, see the accompanying README.ijg |
| 12 * file. |
12 * | 13 * |
13 * This file contains master control logic for the JPEG decompressor. | 14 * This file contains master control logic for the JPEG decompressor. |
14 * These routines are concerned with selecting the modules to be executed | 15 * These routines are concerned with selecting the modules to be executed |
15 * and with determining the number of passes and the work to be done in each | 16 * and with determining the number of passes and the work to be done in each |
16 * pass. | 17 * pass. |
17 */ | 18 */ |
18 | 19 |
19 #define JPEG_INTERNALS | 20 #define JPEG_INTERNALS |
20 #include "jinclude.h" | 21 #include "jinclude.h" |
21 #include "jpeglib.h" | 22 #include "jpeglib.h" |
22 #include "jpegcomp.h" | 23 #include "jpegcomp.h" |
23 | 24 #include "jdmaster.h" |
24 | |
25 /* Private state */ | |
26 | |
27 typedef struct { | |
28 struct jpeg_decomp_master pub; /* public fields */ | |
29 | |
30 int pass_number;» » /* # of passes completed */ | |
31 | |
32 boolean using_merged_upsample; /* TRUE if using merged upsample/cconvert */ | |
33 | |
34 /* Saved references to initialized quantizer modules, | |
35 * in case we need to switch modes. | |
36 */ | |
37 struct jpeg_color_quantizer * quantizer_1pass; | |
38 struct jpeg_color_quantizer * quantizer_2pass; | |
39 } my_decomp_master; | |
40 | |
41 typedef my_decomp_master * my_master_ptr; | |
42 | 25 |
43 | 26 |
44 /* | 27 /* |
45 * Determine whether merged upsample/color conversion should be used. | 28 * Determine whether merged upsample/color conversion should be used. |
46 * CRUCIAL: this must match the actual capabilities of jdmerge.c! | 29 * CRUCIAL: this must match the actual capabilities of jdmerge.c! |
47 */ | 30 */ |
48 | 31 |
49 LOCAL(boolean) | 32 LOCAL(boolean) |
50 use_merged_upsample (j_decompress_ptr cinfo) | 33 use_merged_upsample (j_decompress_ptr cinfo) |
51 { | 34 { |
(...skipping 28 matching lines...) Expand all Loading... |
80 cinfo->comp_info[0].v_samp_factor > 2 || | 63 cinfo->comp_info[0].v_samp_factor > 2 || |
81 cinfo->comp_info[1].v_samp_factor != 1 || | 64 cinfo->comp_info[1].v_samp_factor != 1 || |
82 cinfo->comp_info[2].v_samp_factor != 1) | 65 cinfo->comp_info[2].v_samp_factor != 1) |
83 return FALSE; | 66 return FALSE; |
84 /* furthermore, it doesn't work if we've scaled the IDCTs differently */ | 67 /* furthermore, it doesn't work if we've scaled the IDCTs differently */ |
85 if (cinfo->comp_info[0]._DCT_scaled_size != cinfo->_min_DCT_scaled_size || | 68 if (cinfo->comp_info[0]._DCT_scaled_size != cinfo->_min_DCT_scaled_size || |
86 cinfo->comp_info[1]._DCT_scaled_size != cinfo->_min_DCT_scaled_size || | 69 cinfo->comp_info[1]._DCT_scaled_size != cinfo->_min_DCT_scaled_size || |
87 cinfo->comp_info[2]._DCT_scaled_size != cinfo->_min_DCT_scaled_size) | 70 cinfo->comp_info[2]._DCT_scaled_size != cinfo->_min_DCT_scaled_size) |
88 return FALSE; | 71 return FALSE; |
89 /* ??? also need to test for upsample-time rescaling, when & if supported */ | 72 /* ??? also need to test for upsample-time rescaling, when & if supported */ |
90 return TRUE;» » » /* by golly, it'll work... */ | 73 return TRUE; /* by golly, it'll work... */ |
91 #else | 74 #else |
92 return FALSE; | 75 return FALSE; |
93 #endif | 76 #endif |
94 } | 77 } |
95 | 78 |
96 | 79 |
97 /* | 80 /* |
98 * Compute output image dimensions and related values. | 81 * Compute output image dimensions and related values. |
99 * NOTE: this is exported for possible use by application. | 82 * NOTE: this is exported for possible use by application. |
100 * Hence it mustn't do anything that can't be done twice. | 83 * Hence it mustn't do anything that can't be done twice. |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 | 275 |
293 /* In selecting the actual DCT scaling for each component, we try to | 276 /* In selecting the actual DCT scaling for each component, we try to |
294 * scale up the chroma components via IDCT scaling rather than upsampling. | 277 * scale up the chroma components via IDCT scaling rather than upsampling. |
295 * This saves time if the upsampler gets to use 1:1 scaling. | 278 * This saves time if the upsampler gets to use 1:1 scaling. |
296 * Note this code adapts subsampling ratios which are powers of 2. | 279 * Note this code adapts subsampling ratios which are powers of 2. |
297 */ | 280 */ |
298 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; | 281 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; |
299 ci++, compptr++) { | 282 ci++, compptr++) { |
300 int ssize = cinfo->_min_DCT_scaled_size; | 283 int ssize = cinfo->_min_DCT_scaled_size; |
301 while (ssize < DCTSIZE && | 284 while (ssize < DCTSIZE && |
302 » ((cinfo->max_h_samp_factor * cinfo->_min_DCT_scaled_size) % | 285 ((cinfo->max_h_samp_factor * cinfo->_min_DCT_scaled_size) % |
303 » (compptr->h_samp_factor * ssize * 2) == 0) && | 286 (compptr->h_samp_factor * ssize * 2) == 0) && |
304 » ((cinfo->max_v_samp_factor * cinfo->_min_DCT_scaled_size) % | 287 ((cinfo->max_v_samp_factor * cinfo->_min_DCT_scaled_size) % |
305 » (compptr->v_samp_factor * ssize * 2) == 0)) { | 288 (compptr->v_samp_factor * ssize * 2) == 0)) { |
306 ssize = ssize * 2; | 289 ssize = ssize * 2; |
307 } | 290 } |
308 #if JPEG_LIB_VERSION >= 70 | 291 #if JPEG_LIB_VERSION >= 70 |
309 compptr->DCT_h_scaled_size = compptr->DCT_v_scaled_size = ssize; | 292 compptr->DCT_h_scaled_size = compptr->DCT_v_scaled_size = ssize; |
310 #else | 293 #else |
311 compptr->DCT_scaled_size = ssize; | 294 compptr->DCT_scaled_size = ssize; |
312 #endif | 295 #endif |
313 } | 296 } |
314 | 297 |
315 /* Recompute downsampled dimensions of components; | 298 /* Recompute downsampled dimensions of components; |
316 * application needs to know these if using raw downsampled data. | 299 * application needs to know these if using raw downsampled data. |
317 */ | 300 */ |
318 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; | 301 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; |
319 ci++, compptr++) { | 302 ci++, compptr++) { |
320 /* Size in samples, after IDCT scaling */ | 303 /* Size in samples, after IDCT scaling */ |
321 compptr->downsampled_width = (JDIMENSION) | 304 compptr->downsampled_width = (JDIMENSION) |
322 jdiv_round_up((long) cinfo->image_width * | 305 jdiv_round_up((long) cinfo->image_width * |
323 » » (long) (compptr->h_samp_factor * compptr->_DCT_scaled_size), | 306 (long) (compptr->h_samp_factor * compptr->_DCT_scaled_size), |
324 » » (long) (cinfo->max_h_samp_factor * DCTSIZE)); | 307 (long) (cinfo->max_h_samp_factor * DCTSIZE)); |
325 compptr->downsampled_height = (JDIMENSION) | 308 compptr->downsampled_height = (JDIMENSION) |
326 jdiv_round_up((long) cinfo->image_height * | 309 jdiv_round_up((long) cinfo->image_height * |
327 » » (long) (compptr->v_samp_factor * compptr->_DCT_scaled_size), | 310 (long) (compptr->v_samp_factor * compptr->_DCT_scaled_size), |
328 » » (long) (cinfo->max_v_samp_factor * DCTSIZE)); | 311 (long) (cinfo->max_v_samp_factor * DCTSIZE)); |
329 } | 312 } |
330 | 313 |
331 #else /* !IDCT_SCALING_SUPPORTED */ | 314 #else /* !IDCT_SCALING_SUPPORTED */ |
332 | 315 |
333 /* Hardwire it to "no scaling" */ | 316 /* Hardwire it to "no scaling" */ |
334 cinfo->output_width = cinfo->image_width; | 317 cinfo->output_width = cinfo->image_width; |
335 cinfo->output_height = cinfo->image_height; | 318 cinfo->output_height = cinfo->image_height; |
336 /* jdinput.c has already initialized DCT_scaled_size to DCTSIZE, | 319 /* jdinput.c has already initialized DCT_scaled_size to DCTSIZE, |
337 * and has computed unscaled downsampled_width and downsampled_height. | 320 * and has computed unscaled downsampled_width and downsampled_height. |
338 */ | 321 */ |
(...skipping 20 matching lines...) Expand all Loading... |
359 cinfo->out_color_components = rgb_pixelsize[cinfo->out_color_space]; | 342 cinfo->out_color_components = rgb_pixelsize[cinfo->out_color_space]; |
360 break; | 343 break; |
361 case JCS_YCbCr: | 344 case JCS_YCbCr: |
362 case JCS_RGB565: | 345 case JCS_RGB565: |
363 cinfo->out_color_components = 3; | 346 cinfo->out_color_components = 3; |
364 break; | 347 break; |
365 case JCS_CMYK: | 348 case JCS_CMYK: |
366 case JCS_YCCK: | 349 case JCS_YCCK: |
367 cinfo->out_color_components = 4; | 350 cinfo->out_color_components = 4; |
368 break; | 351 break; |
369 default:» » » /* else must be same colorspace as in file */ | 352 default: /* else must be same colorspace as in file */ |
370 cinfo->out_color_components = cinfo->num_components; | 353 cinfo->out_color_components = cinfo->num_components; |
371 break; | 354 break; |
372 } | 355 } |
373 cinfo->output_components = (cinfo->quantize_colors ? 1 : | 356 cinfo->output_components = (cinfo->quantize_colors ? 1 : |
374 » » » cinfo->out_color_components); | 357 cinfo->out_color_components); |
375 | 358 |
376 /* See if upsampler will want to emit more than one row at a time */ | 359 /* See if upsampler will want to emit more than one row at a time */ |
377 if (use_merged_upsample(cinfo)) | 360 if (use_merged_upsample(cinfo)) |
378 cinfo->rec_outbuf_height = cinfo->max_v_samp_factor; | 361 cinfo->rec_outbuf_height = cinfo->max_v_samp_factor; |
379 else | 362 else |
380 cinfo->rec_outbuf_height = 1; | 363 cinfo->rec_outbuf_height = 1; |
381 } | 364 } |
382 | 365 |
383 | 366 |
384 /* | 367 /* |
385 * Several decompression processes need to range-limit values to the range | 368 * Several decompression processes need to range-limit values to the range |
386 * 0..MAXJSAMPLE; the input value may fall somewhat outside this range | 369 * 0..MAXJSAMPLE; the input value may fall somewhat outside this range |
387 * due to noise introduced by quantization, roundoff error, etc. These | 370 * due to noise introduced by quantization, roundoff error, etc. These |
388 * processes are inner loops and need to be as fast as possible. On most | 371 * processes are inner loops and need to be as fast as possible. On most |
389 * machines, particularly CPUs with pipelines or instruction prefetch, | 372 * machines, particularly CPUs with pipelines or instruction prefetch, |
390 * a (subscript-check-less) C table lookup | 373 * a (subscript-check-less) C table lookup |
391 *» » x = sample_range_limit[x]; | 374 * x = sample_range_limit[x]; |
392 * is faster than explicit tests | 375 * is faster than explicit tests |
393 *» » if (x < 0) x = 0; | 376 * if (x < 0) x = 0; |
394 *» » else if (x > MAXJSAMPLE) x = MAXJSAMPLE; | 377 * else if (x > MAXJSAMPLE) x = MAXJSAMPLE; |
395 * These processes all use a common table prepared by the routine below. | 378 * These processes all use a common table prepared by the routine below. |
396 * | 379 * |
397 * For most steps we can mathematically guarantee that the initial value | 380 * For most steps we can mathematically guarantee that the initial value |
398 * of x is within MAXJSAMPLE+1 of the legal range, so a table running from | 381 * of x is within MAXJSAMPLE+1 of the legal range, so a table running from |
399 * -(MAXJSAMPLE+1) to 2*MAXJSAMPLE+1 is sufficient. But for the initial | 382 * -(MAXJSAMPLE+1) to 2*MAXJSAMPLE+1 is sufficient. But for the initial |
400 * limiting step (just after the IDCT), a wildly out-of-range value is | 383 * limiting step (just after the IDCT), a wildly out-of-range value is |
401 * possible if the input data is corrupt. To avoid any chance of indexing | 384 * possible if the input data is corrupt. To avoid any chance of indexing |
402 * off the end of memory and getting a bad-pointer trap, we perform the | 385 * off the end of memory and getting a bad-pointer trap, we perform the |
403 * post-IDCT limiting thus: | 386 * post-IDCT limiting thus: |
404 *» » x = range_limit[x & MASK]; | 387 * x = range_limit[x & MASK]; |
405 * where MASK is 2 bits wider than legal sample data, ie 10 bits for 8-bit | 388 * where MASK is 2 bits wider than legal sample data, ie 10 bits for 8-bit |
406 * samples. Under normal circumstances this is more than enough range and | 389 * samples. Under normal circumstances this is more than enough range and |
407 * a correct output will be generated; with bogus input data the mask will | 390 * a correct output will be generated; with bogus input data the mask will |
408 * cause wraparound, and we will safely generate a bogus-but-in-range output. | 391 * cause wraparound, and we will safely generate a bogus-but-in-range output. |
409 * For the post-IDCT step, we want to convert the data from signed to unsigned | 392 * For the post-IDCT step, we want to convert the data from signed to unsigned |
410 * representation by adding CENTERJSAMPLE at the same time that we limit it. | 393 * representation by adding CENTERJSAMPLE at the same time that we limit it. |
411 * So the post-IDCT limiting table ends up looking like this: | 394 * So the post-IDCT limiting table ends up looking like this: |
412 * CENTERJSAMPLE,CENTERJSAMPLE+1,...,MAXJSAMPLE, | 395 * CENTERJSAMPLE,CENTERJSAMPLE+1,...,MAXJSAMPLE, |
413 * MAXJSAMPLE (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times), | 396 * MAXJSAMPLE (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times), |
414 * 0 (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times), | 397 * 0 (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times), |
415 * 0,1,...,CENTERJSAMPLE-1 | 398 * 0,1,...,CENTERJSAMPLE-1 |
416 * Negative inputs select values from the upper half of the table after | 399 * Negative inputs select values from the upper half of the table after |
417 * masking. | 400 * masking. |
418 * | 401 * |
419 * We can save some space by overlapping the start of the post-IDCT table | 402 * We can save some space by overlapping the start of the post-IDCT table |
420 * with the simpler range limiting table. The post-IDCT table begins at | 403 * with the simpler range limiting table. The post-IDCT table begins at |
421 * sample_range_limit + CENTERJSAMPLE. | 404 * sample_range_limit + CENTERJSAMPLE. |
422 * | |
423 * Note that the table is allocated in near data space on PCs; it's small | |
424 * enough and used often enough to justify this. | |
425 */ | 405 */ |
426 | 406 |
427 LOCAL(void) | 407 LOCAL(void) |
428 prepare_range_limit_table (j_decompress_ptr cinfo) | 408 prepare_range_limit_table (j_decompress_ptr cinfo) |
429 /* Allocate and fill in the sample_range_limit table */ | 409 /* Allocate and fill in the sample_range_limit table */ |
430 { | 410 { |
431 JSAMPLE * table; | 411 JSAMPLE *table; |
432 int i; | 412 int i; |
433 | 413 |
434 table = (JSAMPLE *) | 414 table = (JSAMPLE *) |
435 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, | 415 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, |
436 » » (5 * (MAXJSAMPLE+1) + CENTERJSAMPLE) * SIZEOF(JSAMPLE)); | 416 (5 * (MAXJSAMPLE+1) + CENTERJSAMPLE) * sizeof(JSAMPLE)); |
437 table += (MAXJSAMPLE+1);» /* allow negative subscripts of simple table */ | 417 table += (MAXJSAMPLE+1); /* allow negative subscripts of simple table */ |
438 cinfo->sample_range_limit = table; | 418 cinfo->sample_range_limit = table; |
439 /* First segment of "simple" table: limit[x] = 0 for x < 0 */ | 419 /* First segment of "simple" table: limit[x] = 0 for x < 0 */ |
440 MEMZERO(table - (MAXJSAMPLE+1), (MAXJSAMPLE+1) * SIZEOF(JSAMPLE)); | 420 MEMZERO(table - (MAXJSAMPLE+1), (MAXJSAMPLE+1) * sizeof(JSAMPLE)); |
441 /* Main part of "simple" table: limit[x] = x */ | 421 /* Main part of "simple" table: limit[x] = x */ |
442 for (i = 0; i <= MAXJSAMPLE; i++) | 422 for (i = 0; i <= MAXJSAMPLE; i++) |
443 table[i] = (JSAMPLE) i; | 423 table[i] = (JSAMPLE) i; |
444 table += CENTERJSAMPLE;» /* Point to where post-IDCT table starts */ | 424 table += CENTERJSAMPLE; /* Point to where post-IDCT table starts */ |
445 /* End of simple table, rest of first half of post-IDCT table */ | 425 /* End of simple table, rest of first half of post-IDCT table */ |
446 for (i = CENTERJSAMPLE; i < 2*(MAXJSAMPLE+1); i++) | 426 for (i = CENTERJSAMPLE; i < 2*(MAXJSAMPLE+1); i++) |
447 table[i] = MAXJSAMPLE; | 427 table[i] = MAXJSAMPLE; |
448 /* Second half of post-IDCT table */ | 428 /* Second half of post-IDCT table */ |
449 MEMZERO(table + (2 * (MAXJSAMPLE+1)), | 429 MEMZERO(table + (2 * (MAXJSAMPLE+1)), |
450 » (2 * (MAXJSAMPLE+1) - CENTERJSAMPLE) * SIZEOF(JSAMPLE)); | 430 (2 * (MAXJSAMPLE+1) - CENTERJSAMPLE) * sizeof(JSAMPLE)); |
451 MEMCOPY(table + (4 * (MAXJSAMPLE+1) - CENTERJSAMPLE), | 431 MEMCOPY(table + (4 * (MAXJSAMPLE+1) - CENTERJSAMPLE), |
452 » cinfo->sample_range_limit, CENTERJSAMPLE * SIZEOF(JSAMPLE)); | 432 cinfo->sample_range_limit, CENTERJSAMPLE * sizeof(JSAMPLE)); |
453 } | 433 } |
454 | 434 |
455 | 435 |
456 /* | 436 /* |
457 * Master selection of decompression modules. | 437 * Master selection of decompression modules. |
458 * This is done once at jpeg_start_decompress time. We determine | 438 * This is done once at jpeg_start_decompress time. We determine |
459 * which modules will be used and give them appropriate initialization calls. | 439 * which modules will be used and give them appropriate initialization calls. |
460 * We also initialize the decompressor input side to begin consuming data. | 440 * We also initialize the decompressor input side to begin consuming data. |
461 * | 441 * |
462 * Since jpeg_read_header has finished, we know what is in the SOF | 442 * Since jpeg_read_header has finished, we know what is in the SOF |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
575 | 555 |
576 if (! cinfo->raw_data_out) | 556 if (! cinfo->raw_data_out) |
577 jinit_d_main_controller(cinfo, FALSE /* never need full buffer here */); | 557 jinit_d_main_controller(cinfo, FALSE /* never need full buffer here */); |
578 | 558 |
579 /* We can now tell the memory manager to allocate virtual arrays. */ | 559 /* We can now tell the memory manager to allocate virtual arrays. */ |
580 (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); | 560 (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); |
581 | 561 |
582 /* Initialize input side of decompressor to consume first scan. */ | 562 /* Initialize input side of decompressor to consume first scan. */ |
583 (*cinfo->inputctl->start_input_pass) (cinfo); | 563 (*cinfo->inputctl->start_input_pass) (cinfo); |
584 | 564 |
| 565 /* Set the first and last iMCU columns to decompress from single-scan images. |
| 566 * By default, decompress all of the iMCU columns. |
| 567 */ |
| 568 cinfo->master->first_iMCU_col = 0; |
| 569 cinfo->master->last_iMCU_col = cinfo->MCUs_per_row - 1; |
| 570 |
585 #ifdef D_MULTISCAN_FILES_SUPPORTED | 571 #ifdef D_MULTISCAN_FILES_SUPPORTED |
586 /* If jpeg_start_decompress will read the whole file, initialize | 572 /* If jpeg_start_decompress will read the whole file, initialize |
587 * progress monitoring appropriately. The input step is counted | 573 * progress monitoring appropriately. The input step is counted |
588 * as one pass. | 574 * as one pass. |
589 */ | 575 */ |
590 if (cinfo->progress != NULL && ! cinfo->buffered_image && | 576 if (cinfo->progress != NULL && ! cinfo->buffered_image && |
591 cinfo->inputctl->has_multiple_scans) { | 577 cinfo->inputctl->has_multiple_scans) { |
592 int nscans; | 578 int nscans; |
593 /* Estimate number of scans to set pass_limit. */ | 579 /* Estimate number of scans to set pass_limit. */ |
594 if (cinfo->progressive_mode) { | 580 if (cinfo->progressive_mode) { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
630 (*cinfo->cquantize->start_pass) (cinfo, FALSE); | 616 (*cinfo->cquantize->start_pass) (cinfo, FALSE); |
631 (*cinfo->post->start_pass) (cinfo, JBUF_CRANK_DEST); | 617 (*cinfo->post->start_pass) (cinfo, JBUF_CRANK_DEST); |
632 (*cinfo->main->start_pass) (cinfo, JBUF_CRANK_DEST); | 618 (*cinfo->main->start_pass) (cinfo, JBUF_CRANK_DEST); |
633 #else | 619 #else |
634 ERREXIT(cinfo, JERR_NOT_COMPILED); | 620 ERREXIT(cinfo, JERR_NOT_COMPILED); |
635 #endif /* QUANT_2PASS_SUPPORTED */ | 621 #endif /* QUANT_2PASS_SUPPORTED */ |
636 } else { | 622 } else { |
637 if (cinfo->quantize_colors && cinfo->colormap == NULL) { | 623 if (cinfo->quantize_colors && cinfo->colormap == NULL) { |
638 /* Select new quantization method */ | 624 /* Select new quantization method */ |
639 if (cinfo->two_pass_quantize && cinfo->enable_2pass_quant) { | 625 if (cinfo->two_pass_quantize && cinfo->enable_2pass_quant) { |
640 » cinfo->cquantize = master->quantizer_2pass; | 626 cinfo->cquantize = master->quantizer_2pass; |
641 » master->pub.is_dummy_pass = TRUE; | 627 master->pub.is_dummy_pass = TRUE; |
642 } else if (cinfo->enable_1pass_quant) { | 628 } else if (cinfo->enable_1pass_quant) { |
643 » cinfo->cquantize = master->quantizer_1pass; | 629 cinfo->cquantize = master->quantizer_1pass; |
644 } else { | 630 } else { |
645 » ERREXIT(cinfo, JERR_MODE_CHANGE); | 631 ERREXIT(cinfo, JERR_MODE_CHANGE); |
646 } | 632 } |
647 } | 633 } |
648 (*cinfo->idct->start_pass) (cinfo); | 634 (*cinfo->idct->start_pass) (cinfo); |
649 (*cinfo->coef->start_output_pass) (cinfo); | 635 (*cinfo->coef->start_output_pass) (cinfo); |
650 if (! cinfo->raw_data_out) { | 636 if (! cinfo->raw_data_out) { |
651 if (! master->using_merged_upsample) | 637 if (! master->using_merged_upsample) |
652 » (*cinfo->cconvert->start_pass) (cinfo); | 638 (*cinfo->cconvert->start_pass) (cinfo); |
653 (*cinfo->upsample->start_pass) (cinfo); | 639 (*cinfo->upsample->start_pass) (cinfo); |
654 if (cinfo->quantize_colors) | 640 if (cinfo->quantize_colors) |
655 » (*cinfo->cquantize->start_pass) (cinfo, master->pub.is_dummy_pass); | 641 (*cinfo->cquantize->start_pass) (cinfo, master->pub.is_dummy_pass); |
656 (*cinfo->post->start_pass) (cinfo, | 642 (*cinfo->post->start_pass) (cinfo, |
657 » (master->pub.is_dummy_pass ? JBUF_SAVE_AND_PASS : JBUF_PASS_THRU)); | 643 (master->pub.is_dummy_pass ? JBUF_SAVE_AND_PASS : JBUF_PASS_THRU)); |
658 (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU); | 644 (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU); |
659 } | 645 } |
660 } | 646 } |
661 | 647 |
662 /* Set up progress monitor's pass info if present */ | 648 /* Set up progress monitor's pass info if present */ |
663 if (cinfo->progress != NULL) { | 649 if (cinfo->progress != NULL) { |
664 cinfo->progress->completed_passes = master->pass_number; | 650 cinfo->progress->completed_passes = master->pass_number; |
665 cinfo->progress->total_passes = master->pass_number + | 651 cinfo->progress->total_passes = master->pass_number + |
666 » » » » (master->pub.is_dummy_pass ? 2 : 1); | 652 (master->pub.is_dummy_pass ? 2 : 1); |
667 /* In buffered-image mode, we assume one more output pass if EOI not | 653 /* In buffered-image mode, we assume one more output pass if EOI not |
668 * yet reached, but no more passes if EOI has been reached. | 654 * yet reached, but no more passes if EOI has been reached. |
669 */ | 655 */ |
670 if (cinfo->buffered_image && ! cinfo->inputctl->eoi_reached) { | 656 if (cinfo->buffered_image && ! cinfo->inputctl->eoi_reached) { |
671 cinfo->progress->total_passes += (cinfo->enable_2pass_quant ? 2 : 1); | 657 cinfo->progress->total_passes += (cinfo->enable_2pass_quant ? 2 : 1); |
672 } | 658 } |
673 } | 659 } |
674 } | 660 } |
675 | 661 |
676 | 662 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
719 | 705 |
720 | 706 |
721 /* | 707 /* |
722 * Initialize master decompression control and select active modules. | 708 * Initialize master decompression control and select active modules. |
723 * This is performed at the start of jpeg_start_decompress. | 709 * This is performed at the start of jpeg_start_decompress. |
724 */ | 710 */ |
725 | 711 |
726 GLOBAL(void) | 712 GLOBAL(void) |
727 jinit_master_decompress (j_decompress_ptr cinfo) | 713 jinit_master_decompress (j_decompress_ptr cinfo) |
728 { | 714 { |
729 my_master_ptr master; | 715 my_master_ptr master = (my_master_ptr) cinfo->master; |
730 | 716 |
731 master = (my_master_ptr) | |
732 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, | |
733 SIZEOF(my_decomp_master)); | |
734 cinfo->master = (struct jpeg_decomp_master *) master; | |
735 master->pub.prepare_for_output_pass = prepare_for_output_pass; | 717 master->pub.prepare_for_output_pass = prepare_for_output_pass; |
736 master->pub.finish_output_pass = finish_output_pass; | 718 master->pub.finish_output_pass = finish_output_pass; |
737 | 719 |
738 master->pub.is_dummy_pass = FALSE; | 720 master->pub.is_dummy_pass = FALSE; |
| 721 master->pub.jinit_upsampler_no_alloc = FALSE; |
739 | 722 |
740 master_selection(cinfo); | 723 master_selection(cinfo); |
741 } | 724 } |
OLD | NEW |