jdmaster.c - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       jdmaster.c (19710B)
       ---
            1 /*
            2  * jdmaster.c
            3  *
            4  * Copyright (C) 1991-1997, Thomas G. Lane.
            5  * This file is part of the Independent JPEG Group's software.
            6  * For conditions of distribution and use, see the accompanying README file.
            7  *
            8  * This file contains master control logic for the JPEG decompressor.
            9  * These routines are concerned with selecting the modules to be executed
           10  * and with determining the number of passes and the work to be done in each
           11  * pass.
           12  */
           13 
           14 #define JPEG_INTERNALS
           15 #include "jinclude.h"
           16 #include "jpeglib.h"
           17 
           18 
           19 /* Private state */
           20 
           21 typedef struct {
           22   struct jpeg_decomp_master pub; /* public fields */
           23 
           24   int pass_number;                /* # of passes completed */
           25 
           26   boolean using_merged_upsample; /* TRUE if using merged upsample/cconvert */
           27 
           28   /* Saved references to initialized quantizer modules,
           29    * in case we need to switch modes.
           30    */
           31   struct jpeg_color_quantizer * quantizer_1pass;
           32   struct jpeg_color_quantizer * quantizer_2pass;
           33 } my_decomp_master;
           34 
           35 typedef my_decomp_master * my_master_ptr;
           36 
           37 
           38 /*
           39  * Determine whether merged upsample/color conversion should be used.
           40  * CRUCIAL: this must match the actual capabilities of jdmerge.c!
           41  */
           42 
           43 LOCAL(boolean)
           44 use_merged_upsample (j_decompress_ptr cinfo)
           45 {
           46 #ifdef UPSAMPLE_MERGING_SUPPORTED
           47   /* Merging is the equivalent of plain box-filter upsampling */
           48   if (cinfo->do_fancy_upsampling || cinfo->CCIR601_sampling)
           49     return FALSE;
           50   /* jdmerge.c only supports YCC=>RGB color conversion */
           51   if (cinfo->jpeg_color_space != JCS_YCbCr || cinfo->num_components != 3 ||
           52       cinfo->out_color_space != JCS_RGB ||
           53       cinfo->out_color_components != RGB_PIXELSIZE)
           54     return FALSE;
           55   /* and it only handles 2h1v or 2h2v sampling ratios */
           56   if (cinfo->comp_info[0].h_samp_factor != 2 ||
           57       cinfo->comp_info[1].h_samp_factor != 1 ||
           58       cinfo->comp_info[2].h_samp_factor != 1 ||
           59       cinfo->comp_info[0].v_samp_factor >  2 ||
           60       cinfo->comp_info[1].v_samp_factor != 1 ||
           61       cinfo->comp_info[2].v_samp_factor != 1)
           62     return FALSE;
           63   /* furthermore, it doesn't work if we've scaled the IDCTs differently */
           64   if (cinfo->comp_info[0].DCT_scaled_size != cinfo->min_DCT_scaled_size ||
           65       cinfo->comp_info[1].DCT_scaled_size != cinfo->min_DCT_scaled_size ||
           66       cinfo->comp_info[2].DCT_scaled_size != cinfo->min_DCT_scaled_size)
           67     return FALSE;
           68   /* ??? also need to test for upsample-time rescaling, when & if supported */
           69   return TRUE;                        /* by golly, it'll work... */
           70 #else
           71   return FALSE;
           72 #endif
           73 }
           74 
           75 
           76 /*
           77  * Compute output image dimensions and related values.
           78  * NOTE: this is exported for possible use by application.
           79  * Hence it mustn't do anything that can't be done twice.
           80  * Also note that it may be called before the master module is initialized!
           81  */
           82 
           83 GLOBAL(void)
           84 jpeg_calc_output_dimensions (j_decompress_ptr cinfo)
           85 /* Do computations that are needed before master selection phase */
           86 {
           87 #ifdef IDCT_SCALING_SUPPORTED
           88   int ci;
           89   jpeg_component_info *compptr;
           90 #endif
           91 
           92   /* Prevent application from calling me at wrong times */
           93   if (cinfo->global_state != DSTATE_READY)
           94     ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
           95 
           96 #ifdef IDCT_SCALING_SUPPORTED
           97 
           98   /* Compute actual output image dimensions and DCT scaling choices. */
           99   if (cinfo->scale_num * 8 <= cinfo->scale_denom) {
          100     /* Provide 1/8 scaling */
          101     cinfo->output_width = (JDIMENSION)
          102       jdiv_round_up((long) cinfo->image_width, 8L);
          103     cinfo->output_height = (JDIMENSION)
          104       jdiv_round_up((long) cinfo->image_height, 8L);
          105     cinfo->min_DCT_scaled_size = 1;
          106   } else if (cinfo->scale_num * 4 <= cinfo->scale_denom) {
          107     /* Provide 1/4 scaling */
          108     cinfo->output_width = (JDIMENSION)
          109       jdiv_round_up((long) cinfo->image_width, 4L);
          110     cinfo->output_height = (JDIMENSION)
          111       jdiv_round_up((long) cinfo->image_height, 4L);
          112     cinfo->min_DCT_scaled_size = 2;
          113   } else if (cinfo->scale_num * 2 <= cinfo->scale_denom) {
          114     /* Provide 1/2 scaling */
          115     cinfo->output_width = (JDIMENSION)
          116       jdiv_round_up((long) cinfo->image_width, 2L);
          117     cinfo->output_height = (JDIMENSION)
          118       jdiv_round_up((long) cinfo->image_height, 2L);
          119     cinfo->min_DCT_scaled_size = 4;
          120   } else {
          121     /* Provide 1/1 scaling */
          122     cinfo->output_width = cinfo->image_width;
          123     cinfo->output_height = cinfo->image_height;
          124     cinfo->min_DCT_scaled_size = DCTSIZE;
          125   }
          126   /* In selecting the actual DCT scaling for each component, we try to
          127    * scale up the chroma components via IDCT scaling rather than upsampling.
          128    * This saves time if the upsampler gets to use 1:1 scaling.
          129    * Note this code assumes that the supported DCT scalings are powers of 2.
          130    */
          131   for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
          132        ci++, compptr++) {
          133     int ssize = cinfo->min_DCT_scaled_size;
          134     while (ssize < DCTSIZE &&
          135            (compptr->h_samp_factor * ssize * 2 <=
          136             cinfo->max_h_samp_factor * cinfo->min_DCT_scaled_size) &&
          137            (compptr->v_samp_factor * ssize * 2 <=
          138             cinfo->max_v_samp_factor * cinfo->min_DCT_scaled_size)) {
          139       ssize = ssize * 2;
          140     }
          141     compptr->DCT_scaled_size = ssize;
          142   }
          143 
          144   /* Recompute downsampled dimensions of components;
          145    * application needs to know these if using raw downsampled data.
          146    */
          147   for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
          148        ci++, compptr++) {
          149     /* Size in samples, after IDCT scaling */
          150     compptr->downsampled_width = (JDIMENSION)
          151       jdiv_round_up((long) cinfo->image_width *
          152                     (long) (compptr->h_samp_factor * compptr->DCT_scaled_size),
          153                     (long) (cinfo->max_h_samp_factor * DCTSIZE));
          154     compptr->downsampled_height = (JDIMENSION)
          155       jdiv_round_up((long) cinfo->image_height *
          156                     (long) (compptr->v_samp_factor * compptr->DCT_scaled_size),
          157                     (long) (cinfo->max_v_samp_factor * DCTSIZE));
          158   }
          159 
          160 #else /* !IDCT_SCALING_SUPPORTED */
          161 
          162   /* Hardwire it to "no scaling" */
          163   cinfo->output_width = cinfo->image_width;
          164   cinfo->output_height = cinfo->image_height;
          165   /* jdinput.c has already initialized DCT_scaled_size to DCTSIZE,
          166    * and has computed unscaled downsampled_width and downsampled_height.
          167    */
          168 
          169 #endif /* IDCT_SCALING_SUPPORTED */
          170 
          171   /* Report number of components in selected colorspace. */
          172   /* Probably this should be in the color conversion module... */
          173   switch (cinfo->out_color_space) {
          174   case JCS_GRAYSCALE:
          175     cinfo->out_color_components = 1;
          176     break;
          177   case JCS_RGB:
          178 #if RGB_PIXELSIZE != 3
          179     cinfo->out_color_components = RGB_PIXELSIZE;
          180     break;
          181 #endif /* else share code with YCbCr */
          182   case JCS_YCbCr:
          183     cinfo->out_color_components = 3;
          184     break;
          185   case JCS_CMYK:
          186   case JCS_YCCK:
          187     cinfo->out_color_components = 4;
          188     break;
          189   default:                        /* else must be same colorspace as in file */
          190     cinfo->out_color_components = cinfo->num_components;
          191     break;
          192   }
          193   cinfo->output_components = (cinfo->quantize_colors ? 1 :
          194                               cinfo->out_color_components);
          195 
          196   /* See if upsampler will want to emit more than one row at a time */
          197   if (use_merged_upsample(cinfo))
          198     cinfo->rec_outbuf_height = cinfo->max_v_samp_factor;
          199   else
          200     cinfo->rec_outbuf_height = 1;
          201 }
          202 
          203 
          204 /*
          205  * Several decompression processes need to range-limit values to the range
          206  * 0..MAXJSAMPLE; the input value may fall somewhat outside this range
          207  * due to noise introduced by quantization, roundoff error, etc.  These
          208  * processes are inner loops and need to be as fast as possible.  On most
          209  * machines, particularly CPUs with pipelines or instruction prefetch,
          210  * a (subscript-check-less) C table lookup
          211  *                x = sample_range_limit[x];
          212  * is faster than explicit tests
          213  *                if (x < 0)  x = 0;
          214  *                else if (x > MAXJSAMPLE)  x = MAXJSAMPLE;
          215  * These processes all use a common table prepared by the routine below.
          216  *
          217  * For most steps we can mathematically guarantee that the initial value
          218  * of x is within MAXJSAMPLE+1 of the legal range, so a table running from
          219  * -(MAXJSAMPLE+1) to 2*MAXJSAMPLE+1 is sufficient.  But for the initial
          220  * limiting step (just after the IDCT), a wildly out-of-range value is 
          221  * possible if the input data is corrupt.  To avoid any chance of indexing
          222  * off the end of memory and getting a bad-pointer trap, we perform the
          223  * post-IDCT limiting thus:
          224  *                x = range_limit[x & MASK];
          225  * where MASK is 2 bits wider than legal sample data, ie 10 bits for 8-bit
          226  * samples.  Under normal circumstances this is more than enough range and
          227  * a correct output will be generated; with bogus input data the mask will
          228  * cause wraparound, and we will safely generate a bogus-but-in-range output.
          229  * For the post-IDCT step, we want to convert the data from signed to unsigned
          230  * representation by adding CENTERJSAMPLE at the same time that we limit it.
          231  * So the post-IDCT limiting table ends up looking like this:
          232  *   CENTERJSAMPLE,CENTERJSAMPLE+1,...,MAXJSAMPLE,
          233  *   MAXJSAMPLE (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times),
          234  *   0          (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times),
          235  *   0,1,...,CENTERJSAMPLE-1
          236  * Negative inputs select values from the upper half of the table after
          237  * masking.
          238  *
          239  * We can save some space by overlapping the start of the post-IDCT table
          240  * with the simpler range limiting table.  The post-IDCT table begins at
          241  * sample_range_limit + CENTERJSAMPLE.
          242  *
          243  * Note that the table is allocated in near data space on PCs; it's small
          244  * enough and used often enough to justify this.
          245  */
          246 
          247 LOCAL(void)
          248 prepare_range_limit_table (j_decompress_ptr cinfo)
          249 /* Allocate and fill in the sample_range_limit table */
          250 {
          251   JSAMPLE * table;
          252   int i;
          253 
          254   table = (JSAMPLE *)
          255     (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
          256                 (5 * (MAXJSAMPLE+1) + CENTERJSAMPLE) * SIZEOF(JSAMPLE));
          257   table += (MAXJSAMPLE+1);        /* allow negative subscripts of simple table */
          258   cinfo->sample_range_limit = table;
          259   /* First segment of "simple" table: limit[x] = 0 for x < 0 */
          260   MEMZERO(table - (MAXJSAMPLE+1), (MAXJSAMPLE+1) * SIZEOF(JSAMPLE));
          261   /* Main part of "simple" table: limit[x] = x */
          262   for (i = 0; i <= MAXJSAMPLE; i++)
          263     table[i] = (JSAMPLE) i;
          264   table += CENTERJSAMPLE;        /* Point to where post-IDCT table starts */
          265   /* End of simple table, rest of first half of post-IDCT table */
          266   for (i = CENTERJSAMPLE; i < 2*(MAXJSAMPLE+1); i++)
          267     table[i] = MAXJSAMPLE;
          268   /* Second half of post-IDCT table */
          269   MEMZERO(table + (2 * (MAXJSAMPLE+1)),
          270           (2 * (MAXJSAMPLE+1) - CENTERJSAMPLE) * SIZEOF(JSAMPLE));
          271   MEMCOPY(table + (4 * (MAXJSAMPLE+1) - CENTERJSAMPLE),
          272           cinfo->sample_range_limit, CENTERJSAMPLE * SIZEOF(JSAMPLE));
          273 }
          274 
          275 
          276 /*
          277  * Master selection of decompression modules.
          278  * This is done once at jpeg_start_decompress time.  We determine
          279  * which modules will be used and give them appropriate initialization calls.
          280  * We also initialize the decompressor input side to begin consuming data.
          281  *
          282  * Since jpeg_read_header has finished, we know what is in the SOF
          283  * and (first) SOS markers.  We also have all the application parameter
          284  * settings.
          285  */
          286 
          287 LOCAL(void)
          288 master_selection (j_decompress_ptr cinfo)
          289 {
          290   my_master_ptr master = (my_master_ptr) cinfo->master;
          291   boolean use_c_buffer;
          292   long samplesperrow;
          293   JDIMENSION jd_samplesperrow;
          294 
          295   /* Initialize dimensions and other stuff */
          296   jpeg_calc_output_dimensions(cinfo);
          297   prepare_range_limit_table(cinfo);
          298 
          299   /* Width of an output scanline must be representable as JDIMENSION. */
          300   samplesperrow = (long) cinfo->output_width * (long) cinfo->out_color_components;
          301   jd_samplesperrow = (JDIMENSION) samplesperrow;
          302   if ((long) jd_samplesperrow != samplesperrow)
          303     ERREXIT(cinfo, JERR_WIDTH_OVERFLOW);
          304 
          305   /* Initialize my private state */
          306   master->pass_number = 0;
          307   master->using_merged_upsample = use_merged_upsample(cinfo);
          308 
          309   /* Color quantizer selection */
          310   master->quantizer_1pass = NULL;
          311   master->quantizer_2pass = NULL;
          312   /* No mode changes if not using buffered-image mode. */
          313   if (! cinfo->quantize_colors || ! cinfo->buffered_image) {
          314     cinfo->enable_1pass_quant = FALSE;
          315     cinfo->enable_external_quant = FALSE;
          316     cinfo->enable_2pass_quant = FALSE;
          317   }
          318   if (cinfo->quantize_colors) {
          319     if (cinfo->raw_data_out)
          320       ERREXIT(cinfo, JERR_NOTIMPL);
          321     /* 2-pass quantizer only works in 3-component color space. */
          322     if (cinfo->out_color_components != 3) {
          323       cinfo->enable_1pass_quant = TRUE;
          324       cinfo->enable_external_quant = FALSE;
          325       cinfo->enable_2pass_quant = FALSE;
          326       cinfo->colormap = NULL;
          327     } else if (cinfo->colormap != NULL) {
          328       cinfo->enable_external_quant = TRUE;
          329     } else if (cinfo->two_pass_quantize) {
          330       cinfo->enable_2pass_quant = TRUE;
          331     } else {
          332       cinfo->enable_1pass_quant = TRUE;
          333     }
          334 
          335     if (cinfo->enable_1pass_quant) {
          336 #ifdef QUANT_1PASS_SUPPORTED
          337       jinit_1pass_quantizer(cinfo);
          338       master->quantizer_1pass = cinfo->cquantize;
          339 #else
          340       ERREXIT(cinfo, JERR_NOT_COMPILED);
          341 #endif
          342     }
          343 
          344     /* We use the 2-pass code to map to external colormaps. */
          345     if (cinfo->enable_2pass_quant || cinfo->enable_external_quant) {
          346 #ifdef QUANT_2PASS_SUPPORTED
          347       jinit_2pass_quantizer(cinfo);
          348       master->quantizer_2pass = cinfo->cquantize;
          349 #else
          350       ERREXIT(cinfo, JERR_NOT_COMPILED);
          351 #endif
          352     }
          353     /* If both quantizers are initialized, the 2-pass one is left active;
          354      * this is necessary for starting with quantization to an external map.
          355      */
          356   }
          357 
          358   /* Post-processing: in particular, color conversion first */
          359   if (! cinfo->raw_data_out) {
          360     if (master->using_merged_upsample) {
          361 #ifdef UPSAMPLE_MERGING_SUPPORTED
          362       jinit_merged_upsampler(cinfo); /* does color conversion too */
          363 #else
          364       ERREXIT(cinfo, JERR_NOT_COMPILED);
          365 #endif
          366     } else {
          367       jinit_color_deconverter(cinfo);
          368       jinit_upsampler(cinfo);
          369     }
          370     jinit_d_post_controller(cinfo, cinfo->enable_2pass_quant);
          371   }
          372   /* Inverse DCT */
          373   jinit_inverse_dct(cinfo);
          374   /* Entropy decoding: either Huffman or arithmetic coding. */
          375   if (cinfo->arith_code) {
          376     ERREXIT(cinfo, JERR_ARITH_NOTIMPL);
          377   } else {
          378     if (cinfo->progressive_mode) {
          379 #ifdef D_PROGRESSIVE_SUPPORTED
          380       jinit_phuff_decoder(cinfo);
          381 #else
          382       ERREXIT(cinfo, JERR_NOT_COMPILED);
          383 #endif
          384     } else
          385       jinit_huff_decoder(cinfo);
          386   }
          387 
          388   /* Initialize principal buffer controllers. */
          389   use_c_buffer = cinfo->inputctl->has_multiple_scans || cinfo->buffered_image;
          390   jinit_d_coef_controller(cinfo, use_c_buffer);
          391 
          392   if (! cinfo->raw_data_out)
          393     jinit_d_main_controller(cinfo, FALSE /* never need full buffer here */);
          394 
          395   /* We can now tell the memory manager to allocate virtual arrays. */
          396   (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo);
          397 
          398   /* Initialize input side of decompressor to consume first scan. */
          399   (*cinfo->inputctl->start_input_pass) (cinfo);
          400 
          401 #ifdef D_MULTISCAN_FILES_SUPPORTED
          402   /* If jpeg_start_decompress will read the whole file, initialize
          403    * progress monitoring appropriately.  The input step is counted
          404    * as one pass.
          405    */
          406   if (cinfo->progress != NULL && ! cinfo->buffered_image &&
          407       cinfo->inputctl->has_multiple_scans) {
          408     int nscans;
          409     /* Estimate number of scans to set pass_limit. */
          410     if (cinfo->progressive_mode) {
          411       /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */
          412       nscans = 2 + 3 * cinfo->num_components;
          413     } else {
          414       /* For a nonprogressive multiscan file, estimate 1 scan per component. */
          415       nscans = cinfo->num_components;
          416     }
          417     cinfo->progress->pass_counter = 0L;
          418     cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans;
          419     cinfo->progress->completed_passes = 0;
          420     cinfo->progress->total_passes = (cinfo->enable_2pass_quant ? 3 : 2);
          421     /* Count the input pass as done */
          422     master->pass_number++;
          423   }
          424 #endif /* D_MULTISCAN_FILES_SUPPORTED */
          425 }
          426 
          427 
          428 /*
          429  * Per-pass setup.
          430  * This is called at the beginning of each output pass.  We determine which
          431  * modules will be active during this pass and give them appropriate
          432  * start_pass calls.  We also set is_dummy_pass to indicate whether this
          433  * is a "real" output pass or a dummy pass for color quantization.
          434  * (In the latter case, jdapistd.c will crank the pass to completion.)
          435  */
          436 
          437 METHODDEF(void)
          438 prepare_for_output_pass (j_decompress_ptr cinfo)
          439 {
          440   my_master_ptr master = (my_master_ptr) cinfo->master;
          441 
          442   if (master->pub.is_dummy_pass) {
          443 #ifdef QUANT_2PASS_SUPPORTED
          444     /* Final pass of 2-pass quantization */
          445     master->pub.is_dummy_pass = FALSE;
          446     (*cinfo->cquantize->start_pass) (cinfo, FALSE);
          447     (*cinfo->post->start_pass) (cinfo, JBUF_CRANK_DEST);
          448     (*cinfo->main->start_pass) (cinfo, JBUF_CRANK_DEST);
          449 #else
          450     ERREXIT(cinfo, JERR_NOT_COMPILED);
          451 #endif /* QUANT_2PASS_SUPPORTED */
          452   } else {
          453     if (cinfo->quantize_colors && cinfo->colormap == NULL) {
          454       /* Select new quantization method */
          455       if (cinfo->two_pass_quantize && cinfo->enable_2pass_quant) {
          456         cinfo->cquantize = master->quantizer_2pass;
          457         master->pub.is_dummy_pass = TRUE;
          458       } else if (cinfo->enable_1pass_quant) {
          459         cinfo->cquantize = master->quantizer_1pass;
          460       } else {
          461         ERREXIT(cinfo, JERR_MODE_CHANGE);
          462       }
          463     }
          464     (*cinfo->idct->start_pass) (cinfo);
          465     (*cinfo->coef->start_output_pass) (cinfo);
          466     if (! cinfo->raw_data_out) {
          467       if (! master->using_merged_upsample)
          468         (*cinfo->cconvert->start_pass) (cinfo);
          469       (*cinfo->upsample->start_pass) (cinfo);
          470       if (cinfo->quantize_colors)
          471         (*cinfo->cquantize->start_pass) (cinfo, master->pub.is_dummy_pass);
          472       (*cinfo->post->start_pass) (cinfo,
          473             (master->pub.is_dummy_pass ? JBUF_SAVE_AND_PASS : JBUF_PASS_THRU));
          474       (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU);
          475     }
          476   }
          477 
          478   /* Set up progress monitor's pass info if present */
          479   if (cinfo->progress != NULL) {
          480     cinfo->progress->completed_passes = master->pass_number;
          481     cinfo->progress->total_passes = master->pass_number +
          482                                     (master->pub.is_dummy_pass ? 2 : 1);
          483     /* In buffered-image mode, we assume one more output pass if EOI not
          484      * yet reached, but no more passes if EOI has been reached.
          485      */
          486     if (cinfo->buffered_image && ! cinfo->inputctl->eoi_reached) {
          487       cinfo->progress->total_passes += (cinfo->enable_2pass_quant ? 2 : 1);
          488     }
          489   }
          490 }
          491 
          492 
          493 /*
          494  * Finish up at end of an output pass.
          495  */
          496 
          497 METHODDEF(void)
          498 finish_output_pass (j_decompress_ptr cinfo)
          499 {
          500   my_master_ptr master = (my_master_ptr) cinfo->master;
          501 
          502   if (cinfo->quantize_colors)
          503     (*cinfo->cquantize->finish_pass) (cinfo);
          504   master->pass_number++;
          505 }
          506 
          507 
          508 #ifdef D_MULTISCAN_FILES_SUPPORTED
          509 
          510 /*
          511  * Switch to a new external colormap between output passes.
          512  */
          513 
          514 GLOBAL(void)
          515 jpeg_new_colormap (j_decompress_ptr cinfo)
          516 {
          517   my_master_ptr master = (my_master_ptr) cinfo->master;
          518 
          519   /* Prevent application from calling me at wrong times */
          520   if (cinfo->global_state != DSTATE_BUFIMAGE)
          521     ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
          522 
          523   if (cinfo->quantize_colors && cinfo->enable_external_quant &&
          524       cinfo->colormap != NULL) {
          525     /* Select 2-pass quantizer for external colormap use */
          526     cinfo->cquantize = master->quantizer_2pass;
          527     /* Notify quantizer of colormap change */
          528     (*cinfo->cquantize->new_color_map) (cinfo);
          529     master->pub.is_dummy_pass = FALSE; /* just in case */
          530   } else
          531     ERREXIT(cinfo, JERR_MODE_CHANGE);
          532 }
          533 
          534 #endif /* D_MULTISCAN_FILES_SUPPORTED */
          535 
          536 
          537 /*
          538  * Initialize master decompression control and select active modules.
          539  * This is performed at the start of jpeg_start_decompress.
          540  */
          541 
          542 GLOBAL(void)
          543 jinit_master_decompress (j_decompress_ptr cinfo)
          544 {
          545   my_master_ptr master;
          546 
          547   master = (my_master_ptr)
          548       (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
          549                                   SIZEOF(my_decomp_master));
          550   cinfo->master = (struct jpeg_decomp_master *) master;
          551   master->pub.prepare_for_output_pass = prepare_for_output_pass;
          552   master->pub.finish_output_pass = finish_output_pass;
          553 
          554   master->pub.is_dummy_pass = FALSE;
          555 
          556   master_selection(cinfo);
          557 }