46#ifdef UPSAMPLE_MERGING_SUPPORTED
48 if (cinfo->do_fancy_upsampling || cinfo->CCIR601_sampling)
51 if (cinfo->jpeg_color_space !=
JCS_YCbCr || cinfo->num_components != 3 ||
52 cinfo->out_color_space !=
JCS_RGB ||
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)
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)
87#ifdef IDCT_SCALING_SUPPORTED
94 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
99 if (cinfo->scale_num * 8 <= cinfo->scale_denom) {
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) {
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) {
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;
122 cinfo->output_width = cinfo->image_width;
123 cinfo->output_height = cinfo->image_height;
124 cinfo->min_DCT_scaled_size = DCTSIZE;
131 for (ci = 0,
compptr = cinfo->comp_info; ci < cinfo->num_components;
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)) {
141 compptr->DCT_scaled_size = ssize;
147 for (ci = 0,
compptr = cinfo->comp_info; ci < cinfo->num_components;
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));
163 cinfo->output_width = cinfo->image_width;
164 cinfo->output_height = cinfo->image_height;
173 switch (cinfo->out_color_space) {
175 cinfo->out_color_components = 1;
178#if RGB_PIXELSIZE != 3
179 cinfo->out_color_components = RGB_PIXELSIZE;
183 cinfo->out_color_components = 3;
187 cinfo->out_color_components = 4;
190 cinfo->out_color_components = cinfo->num_components;
193 cinfo->output_components = (cinfo->quantize_colors ? 1 :
194 cinfo->out_color_components);
198 cinfo->rec_outbuf_height = cinfo->max_v_samp_factor;
200 cinfo->rec_outbuf_height = 1;
291 boolean use_c_buffer;
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);
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;
318 if (cinfo->quantize_colors) {
319 if (cinfo->raw_data_out)
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;
332 cinfo->enable_1pass_quant =
TRUE;
335 if (cinfo->enable_1pass_quant) {
336#ifdef QUANT_1PASS_SUPPORTED
338 master->quantizer_1pass = cinfo->cquantize;
340 ERREXIT(cinfo, JERR_NOT_COMPILED);
345 if (cinfo->enable_2pass_quant || cinfo->enable_external_quant) {
346#ifdef QUANT_2PASS_SUPPORTED
348 master->quantizer_2pass = cinfo->cquantize;
350 ERREXIT(cinfo, JERR_NOT_COMPILED);
359 if (! cinfo->raw_data_out) {
360 if (
master->using_merged_upsample) {
361#ifdef UPSAMPLE_MERGING_SUPPORTED
364 ERREXIT(cinfo, JERR_NOT_COMPILED);
375 if (cinfo->arith_code) {
376 ERREXIT(cinfo, JERR_ARITH_NOTIMPL);
378 if (cinfo->progressive_mode) {
379#ifdef D_PROGRESSIVE_SUPPORTED
382 ERREXIT(cinfo, JERR_NOT_COMPILED);
389 use_c_buffer = cinfo->inputctl->has_multiple_scans || cinfo->buffered_image;
392 if (! cinfo->raw_data_out)
396 (*cinfo->mem->realize_virt_arrays) ((
j_common_ptr) cinfo);
399 (*cinfo->inputctl->start_input_pass) (cinfo);
401#ifdef D_MULTISCAN_FILES_SUPPORTED
406 if (cinfo->progress !=
NULL && ! cinfo->buffered_image &&
407 cinfo->inputctl->has_multiple_scans) {
410 if (cinfo->progressive_mode) {
412 nscans = 2 + 3 * cinfo->num_components;
415 nscans = cinfo->num_components;
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);
442 if (
master->pub.is_dummy_pass) {
443#ifdef QUANT_2PASS_SUPPORTED
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);
450 ERREXIT(cinfo, JERR_NOT_COMPILED);
453 if (cinfo->quantize_colors && cinfo->colormap == NULL) {
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;
461 ERREXIT(cinfo, JERR_MODE_CHANGE);
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);
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);
486 if (cinfo->buffered_image && ! cinfo->inputctl->eoi_reached) {
487 cinfo->progress->total_passes += (cinfo->enable_2pass_quant ? 2 : 1);
jinit_d_main_controller(j_decompress_ptr cinfo, boolean need_full_buffer)
Definition jdmainct.c:476
jinit_d_post_controller(j_decompress_ptr cinfo, boolean need_full_buffer)
Definition jdpostct.c:250