| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * jdmaster.c | 2  * jdmaster.c | 
| 3  * | 3  * | 
| 4  * Copyright (C) 1991-1997, Thomas G. Lane. | 4  * Copyright (C) 1991-1997, Thomas G. Lane. | 
| 5  * Copyright (C) 2009, D. R. Commander. | 5  * Copyright (C) 2009-2010, D. R. Commander. | 
| 6  * This file is part of the Independent JPEG Group's software. | 6  * This file is part of the Independent JPEG Group's software. | 
| 7  * For conditions of distribution and use, see the accompanying README file. | 7  * For conditions of distribution and use, see the accompanying README file. | 
| 8  * | 8  * | 
| 9  * This file contains master control logic for the JPEG decompressor. | 9  * This file contains master control logic for the JPEG decompressor. | 
| 10  * These routines are concerned with selecting the modules to be executed | 10  * These routines are concerned with selecting the modules to be executed | 
| 11  * and with determining the number of passes and the work to be done in each | 11  * and with determining the number of passes and the work to be done in each | 
| 12  * pass. | 12  * pass. | 
| 13  */ | 13  */ | 
| 14 | 14 | 
| 15 #define JPEG_INTERNALS | 15 #define JPEG_INTERNALS | 
| 16 #include "jinclude.h" | 16 #include "jinclude.h" | 
| 17 #include "jpeglib.h" | 17 #include "jpeglib.h" | 
|  | 18 #include "jpegcomp.h" | 
| 18 | 19 | 
| 19 | 20 | 
| 20 /* Private state */ | 21 /* Private state */ | 
| 21 | 22 | 
| 22 typedef struct { | 23 typedef struct { | 
| 23   struct jpeg_decomp_master pub; /* public fields */ | 24   struct jpeg_decomp_master pub; /* public fields */ | 
| 24 | 25 | 
| 25   int pass_number;              /* # of passes completed */ | 26   int pass_number;              /* # of passes completed */ | 
| 26 | 27 | 
| 27   boolean using_merged_upsample; /* TRUE if using merged upsample/cconvert */ | 28   boolean using_merged_upsample; /* TRUE if using merged upsample/cconvert */ | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 61     return FALSE; | 62     return FALSE; | 
| 62   /* and it only handles 2h1v or 2h2v sampling ratios */ | 63   /* and it only handles 2h1v or 2h2v sampling ratios */ | 
| 63   if (cinfo->comp_info[0].h_samp_factor != 2 || | 64   if (cinfo->comp_info[0].h_samp_factor != 2 || | 
| 64       cinfo->comp_info[1].h_samp_factor != 1 || | 65       cinfo->comp_info[1].h_samp_factor != 1 || | 
| 65       cinfo->comp_info[2].h_samp_factor != 1 || | 66       cinfo->comp_info[2].h_samp_factor != 1 || | 
| 66       cinfo->comp_info[0].v_samp_factor >  2 || | 67       cinfo->comp_info[0].v_samp_factor >  2 || | 
| 67       cinfo->comp_info[1].v_samp_factor != 1 || | 68       cinfo->comp_info[1].v_samp_factor != 1 || | 
| 68       cinfo->comp_info[2].v_samp_factor != 1) | 69       cinfo->comp_info[2].v_samp_factor != 1) | 
| 69     return FALSE; | 70     return FALSE; | 
| 70   /* furthermore, it doesn't work if we've scaled the IDCTs differently */ | 71   /* furthermore, it doesn't work if we've scaled the IDCTs differently */ | 
| 71   if (cinfo->comp_info[0].DCT_scaled_size != cinfo->min_DCT_scaled_size || | 72   if (cinfo->comp_info[0]._DCT_scaled_size != cinfo->_min_DCT_scaled_size || | 
| 72       cinfo->comp_info[1].DCT_scaled_size != cinfo->min_DCT_scaled_size || | 73       cinfo->comp_info[1]._DCT_scaled_size != cinfo->_min_DCT_scaled_size || | 
| 73       cinfo->comp_info[2].DCT_scaled_size != cinfo->min_DCT_scaled_size) | 74       cinfo->comp_info[2]._DCT_scaled_size != cinfo->_min_DCT_scaled_size) | 
| 74     return FALSE; | 75     return FALSE; | 
| 75   /* ??? also need to test for upsample-time rescaling, when & if supported */ | 76   /* ??? also need to test for upsample-time rescaling, when & if supported */ | 
| 76   return TRUE;                  /* by golly, it'll work... */ | 77   return TRUE;                  /* by golly, it'll work... */ | 
| 77 #else | 78 #else | 
| 78   return FALSE; | 79   return FALSE; | 
| 79 #endif | 80 #endif | 
| 80 } | 81 } | 
| 81 | 82 | 
| 82 | 83 | 
| 83 /* | 84 /* | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 102 | 103 | 
| 103 #ifdef IDCT_SCALING_SUPPORTED | 104 #ifdef IDCT_SCALING_SUPPORTED | 
| 104 | 105 | 
| 105   /* Compute actual output image dimensions and DCT scaling choices. */ | 106   /* Compute actual output image dimensions and DCT scaling choices. */ | 
| 106   if (cinfo->scale_num * 8 <= cinfo->scale_denom) { | 107   if (cinfo->scale_num * 8 <= cinfo->scale_denom) { | 
| 107     /* Provide 1/8 scaling */ | 108     /* Provide 1/8 scaling */ | 
| 108     cinfo->output_width = (JDIMENSION) | 109     cinfo->output_width = (JDIMENSION) | 
| 109       jdiv_round_up((long) cinfo->image_width, 8L); | 110       jdiv_round_up((long) cinfo->image_width, 8L); | 
| 110     cinfo->output_height = (JDIMENSION) | 111     cinfo->output_height = (JDIMENSION) | 
| 111       jdiv_round_up((long) cinfo->image_height, 8L); | 112       jdiv_round_up((long) cinfo->image_height, 8L); | 
|  | 113 #if JPEG_LIB_VERSION >= 70 | 
|  | 114     cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = 1; | 
|  | 115 #else | 
| 112     cinfo->min_DCT_scaled_size = 1; | 116     cinfo->min_DCT_scaled_size = 1; | 
|  | 117 #endif | 
| 113   } else if (cinfo->scale_num * 4 <= cinfo->scale_denom) { | 118   } else if (cinfo->scale_num * 4 <= cinfo->scale_denom) { | 
| 114     /* Provide 1/4 scaling */ | 119     /* Provide 1/4 scaling */ | 
| 115     cinfo->output_width = (JDIMENSION) | 120     cinfo->output_width = (JDIMENSION) | 
| 116       jdiv_round_up((long) cinfo->image_width, 4L); | 121       jdiv_round_up((long) cinfo->image_width, 4L); | 
| 117     cinfo->output_height = (JDIMENSION) | 122     cinfo->output_height = (JDIMENSION) | 
| 118       jdiv_round_up((long) cinfo->image_height, 4L); | 123       jdiv_round_up((long) cinfo->image_height, 4L); | 
|  | 124 #if JPEG_LIB_VERSION >= 70 | 
|  | 125     cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = 2; | 
|  | 126 #else | 
| 119     cinfo->min_DCT_scaled_size = 2; | 127     cinfo->min_DCT_scaled_size = 2; | 
|  | 128 #endif | 
| 120   } else if (cinfo->scale_num * 2 <= cinfo->scale_denom) { | 129   } else if (cinfo->scale_num * 2 <= cinfo->scale_denom) { | 
| 121     /* Provide 1/2 scaling */ | 130     /* Provide 1/2 scaling */ | 
| 122     cinfo->output_width = (JDIMENSION) | 131     cinfo->output_width = (JDIMENSION) | 
| 123       jdiv_round_up((long) cinfo->image_width, 2L); | 132       jdiv_round_up((long) cinfo->image_width, 2L); | 
| 124     cinfo->output_height = (JDIMENSION) | 133     cinfo->output_height = (JDIMENSION) | 
| 125       jdiv_round_up((long) cinfo->image_height, 2L); | 134       jdiv_round_up((long) cinfo->image_height, 2L); | 
|  | 135 #if JPEG_LIB_VERSION >= 70 | 
|  | 136     cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = 4; | 
|  | 137 #else | 
| 126     cinfo->min_DCT_scaled_size = 4; | 138     cinfo->min_DCT_scaled_size = 4; | 
|  | 139 #endif | 
| 127   } else { | 140   } else { | 
| 128     /* Provide 1/1 scaling */ | 141     /* Provide 1/1 scaling */ | 
| 129     cinfo->output_width = cinfo->image_width; | 142     cinfo->output_width = cinfo->image_width; | 
| 130     cinfo->output_height = cinfo->image_height; | 143     cinfo->output_height = cinfo->image_height; | 
|  | 144 #if JPEG_LIB_VERSION >= 70 | 
|  | 145     cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = DCTSIZE; | 
|  | 146 #else | 
| 131     cinfo->min_DCT_scaled_size = DCTSIZE; | 147     cinfo->min_DCT_scaled_size = DCTSIZE; | 
|  | 148 #endif | 
| 132   } | 149   } | 
| 133   /* In selecting the actual DCT scaling for each component, we try to | 150   /* In selecting the actual DCT scaling for each component, we try to | 
| 134    * scale up the chroma components via IDCT scaling rather than upsampling. | 151    * scale up the chroma components via IDCT scaling rather than upsampling. | 
| 135    * This saves time if the upsampler gets to use 1:1 scaling. | 152    * This saves time if the upsampler gets to use 1:1 scaling. | 
| 136    * Note this code assumes that the supported DCT scalings are powers of 2. | 153    * Note this code assumes that the supported DCT scalings are powers of 2. | 
| 137    */ | 154    */ | 
| 138   for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; | 155   for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; | 
| 139        ci++, compptr++) { | 156        ci++, compptr++) { | 
| 140     int ssize = cinfo->min_DCT_scaled_size; | 157     int ssize = cinfo->_min_DCT_scaled_size; | 
| 141     while (ssize < DCTSIZE && | 158     while (ssize < DCTSIZE && | 
| 142            (compptr->h_samp_factor * ssize * 2 <= | 159            (compptr->h_samp_factor * ssize * 2 <= | 
| 143 »           cinfo->max_h_samp_factor * cinfo->min_DCT_scaled_size) && | 160 »           cinfo->max_h_samp_factor * cinfo->_min_DCT_scaled_size) && | 
| 144            (compptr->v_samp_factor * ssize * 2 <= | 161            (compptr->v_samp_factor * ssize * 2 <= | 
| 145 »           cinfo->max_v_samp_factor * cinfo->min_DCT_scaled_size)) { | 162 »           cinfo->max_v_samp_factor * cinfo->_min_DCT_scaled_size)) { | 
| 146       ssize = ssize * 2; | 163       ssize = ssize * 2; | 
| 147     } | 164     } | 
|  | 165 #if JPEG_LIB_VERSION >= 70 | 
|  | 166     compptr->DCT_h_scaled_size = compptr->DCT_v_scaled_size = ssize; | 
|  | 167 #else | 
| 148     compptr->DCT_scaled_size = ssize; | 168     compptr->DCT_scaled_size = ssize; | 
|  | 169 #endif | 
| 149   } | 170   } | 
| 150 | 171 | 
| 151   /* Recompute downsampled dimensions of components; | 172   /* Recompute downsampled dimensions of components; | 
| 152    * application needs to know these if using raw downsampled data. | 173    * application needs to know these if using raw downsampled data. | 
| 153    */ | 174    */ | 
| 154   for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; | 175   for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; | 
| 155        ci++, compptr++) { | 176        ci++, compptr++) { | 
| 156     /* Size in samples, after IDCT scaling */ | 177     /* Size in samples, after IDCT scaling */ | 
| 157     compptr->downsampled_width = (JDIMENSION) | 178     compptr->downsampled_width = (JDIMENSION) | 
| 158       jdiv_round_up((long) cinfo->image_width * | 179       jdiv_round_up((long) cinfo->image_width * | 
| 159 »       »           (long) (compptr->h_samp_factor * compptr->DCT_scaled_size), | 180 »       »           (long) (compptr->h_samp_factor * compptr->_DCT_scaled_size), | 
| 160                     (long) (cinfo->max_h_samp_factor * DCTSIZE)); | 181                     (long) (cinfo->max_h_samp_factor * DCTSIZE)); | 
| 161     compptr->downsampled_height = (JDIMENSION) | 182     compptr->downsampled_height = (JDIMENSION) | 
| 162       jdiv_round_up((long) cinfo->image_height * | 183       jdiv_round_up((long) cinfo->image_height * | 
| 163 »       »           (long) (compptr->v_samp_factor * compptr->DCT_scaled_size), | 184 »       »           (long) (compptr->v_samp_factor * compptr->_DCT_scaled_size), | 
| 164                     (long) (cinfo->max_v_samp_factor * DCTSIZE)); | 185                     (long) (cinfo->max_v_samp_factor * DCTSIZE)); | 
| 165   } | 186   } | 
| 166 | 187 | 
| 167 #else /* !IDCT_SCALING_SUPPORTED */ | 188 #else /* !IDCT_SCALING_SUPPORTED */ | 
| 168 | 189 | 
| 169   /* Hardwire it to "no scaling" */ | 190   /* Hardwire it to "no scaling" */ | 
| 170   cinfo->output_width = cinfo->image_width; | 191   cinfo->output_width = cinfo->image_width; | 
| 171   cinfo->output_height = cinfo->image_height; | 192   cinfo->output_height = cinfo->image_height; | 
| 172   /* jdinput.c has already initialized DCT_scaled_size to DCTSIZE, | 193   /* jdinput.c has already initialized DCT_scaled_size to DCTSIZE, | 
| 173    * and has computed unscaled downsampled_width and downsampled_height. | 194    * and has computed unscaled downsampled_width and downsampled_height. | 
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 377     } else { | 398     } else { | 
| 378       jinit_color_deconverter(cinfo); | 399       jinit_color_deconverter(cinfo); | 
| 379       jinit_upsampler(cinfo); | 400       jinit_upsampler(cinfo); | 
| 380     } | 401     } | 
| 381     jinit_d_post_controller(cinfo, cinfo->enable_2pass_quant); | 402     jinit_d_post_controller(cinfo, cinfo->enable_2pass_quant); | 
| 382   } | 403   } | 
| 383   /* Inverse DCT */ | 404   /* Inverse DCT */ | 
| 384   jinit_inverse_dct(cinfo); | 405   jinit_inverse_dct(cinfo); | 
| 385   /* Entropy decoding: either Huffman or arithmetic coding. */ | 406   /* Entropy decoding: either Huffman or arithmetic coding. */ | 
| 386   if (cinfo->arith_code) { | 407   if (cinfo->arith_code) { | 
|  | 408 #ifdef D_ARITH_CODING_SUPPORTED | 
|  | 409     jinit_arith_decoder(cinfo); | 
|  | 410 #else | 
| 387     ERREXIT(cinfo, JERR_ARITH_NOTIMPL); | 411     ERREXIT(cinfo, JERR_ARITH_NOTIMPL); | 
|  | 412 #endif | 
| 388   } else { | 413   } else { | 
| 389     if (cinfo->progressive_mode) { | 414     if (cinfo->progressive_mode) { | 
| 390 #ifdef D_PROGRESSIVE_SUPPORTED | 415 #ifdef D_PROGRESSIVE_SUPPORTED | 
| 391       jinit_phuff_decoder(cinfo); | 416       jinit_phuff_decoder(cinfo); | 
| 392 #else | 417 #else | 
| 393       ERREXIT(cinfo, JERR_NOT_COMPILED); | 418       ERREXIT(cinfo, JERR_NOT_COMPILED); | 
| 394 #endif | 419 #endif | 
| 395     } else | 420     } else | 
| 396       jinit_huff_decoder(cinfo); | 421       jinit_huff_decoder(cinfo); | 
| 397   } | 422   } | 
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 559       (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, | 584       (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, | 
| 560                                   SIZEOF(my_decomp_master)); | 585                                   SIZEOF(my_decomp_master)); | 
| 561   cinfo->master = (struct jpeg_decomp_master *) master; | 586   cinfo->master = (struct jpeg_decomp_master *) master; | 
| 562   master->pub.prepare_for_output_pass = prepare_for_output_pass; | 587   master->pub.prepare_for_output_pass = prepare_for_output_pass; | 
| 563   master->pub.finish_output_pass = finish_output_pass; | 588   master->pub.finish_output_pass = finish_output_pass; | 
| 564 | 589 | 
| 565   master->pub.is_dummy_pass = FALSE; | 590   master->pub.is_dummy_pass = FALSE; | 
| 566 | 591 | 
| 567   master_selection(cinfo); | 592   master_selection(cinfo); | 
| 568 } | 593 } | 
| OLD | NEW | 
|---|