• Home
  • Raw
  • Download

Lines Matching +full:post +full:- +full:require +full:- +full:hook

5  * Copyright (C) 1994-1996, Thomas G. Lane.
6 * libjpeg-turbo Modifications:
7 * Copyright (C) 2010, 2015-2018, 2020, D. R. Commander.
14 * used in the normal full-decompression case. They are not used by a
15 * transcoding-only application. Note that if an application links in
47 if (cinfo->global_state == DSTATE_READY) { in jpeg_start_decompress()
50 if (cinfo->buffered_image) { in jpeg_start_decompress()
52 cinfo->global_state = DSTATE_BUFIMAGE; in jpeg_start_decompress()
55 cinfo->global_state = DSTATE_PRELOAD; in jpeg_start_decompress()
57 if (cinfo->global_state == DSTATE_PRELOAD) { in jpeg_start_decompress()
59 if (cinfo->inputctl->has_multiple_scans) { in jpeg_start_decompress()
63 /* Call progress monitor hook if present */ in jpeg_start_decompress()
64 if (cinfo->progress != NULL) in jpeg_start_decompress()
65 (*cinfo->progress->progress_monitor) ((j_common_ptr)cinfo); in jpeg_start_decompress()
67 retcode = (*cinfo->inputctl->consume_input) (cinfo); in jpeg_start_decompress()
73 if (cinfo->progress != NULL && in jpeg_start_decompress()
75 if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) { in jpeg_start_decompress()
77 cinfo->progress->pass_limit += (long)cinfo->total_iMCU_rows; in jpeg_start_decompress()
85 cinfo->output_scan_number = cinfo->input_scan_number; in jpeg_start_decompress()
86 } else if (cinfo->global_state != DSTATE_PRESCAN) in jpeg_start_decompress()
87 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); in jpeg_start_decompress()
104 if (cinfo->global_state != DSTATE_PRESCAN) { in output_pass_setup()
106 (*cinfo->master->prepare_for_output_pass) (cinfo); in output_pass_setup()
107 cinfo->output_scanline = 0; in output_pass_setup()
108 cinfo->global_state = DSTATE_PRESCAN; in output_pass_setup()
111 while (cinfo->master->is_dummy_pass) { in output_pass_setup()
114 while (cinfo->output_scanline < cinfo->output_height) { in output_pass_setup()
116 /* Call progress monitor hook if present */ in output_pass_setup()
117 if (cinfo->progress != NULL) { in output_pass_setup()
118 cinfo->progress->pass_counter = (long)cinfo->output_scanline; in output_pass_setup()
119 cinfo->progress->pass_limit = (long)cinfo->output_height; in output_pass_setup()
120 (*cinfo->progress->progress_monitor) ((j_common_ptr)cinfo); in output_pass_setup()
123 last_scanline = cinfo->output_scanline; in output_pass_setup()
124 (*cinfo->main->process_data) (cinfo, (JSAMPARRAY)NULL, in output_pass_setup()
125 &cinfo->output_scanline, (JDIMENSION)0); in output_pass_setup()
126 if (cinfo->output_scanline == last_scanline) in output_pass_setup()
130 (*cinfo->master->finish_output_pass) (cinfo); in output_pass_setup()
131 (*cinfo->master->prepare_for_output_pass) (cinfo); in output_pass_setup()
132 cinfo->output_scanline = 0; in output_pass_setup()
140 cinfo->global_state = cinfo->raw_data_out ? DSTATE_RAW_OK : DSTATE_SCANNING; in output_pass_setup()
163 if (cinfo->global_state != DSTATE_SCANNING || cinfo->output_scanline != 0) in jpeg_crop_scanline()
164 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); in jpeg_crop_scanline()
170 if (*width == 0 || *xoffset + *width > cinfo->output_width) in jpeg_crop_scanline()
174 if (*width == cinfo->output_width) in jpeg_crop_scanline()
184 * SIMD word size (for instance, 128-bit in the case of SSE2.) The in jpeg_crop_scanline()
190 * require that xoffset be a multiple of the maximum MCU column width of all in jpeg_crop_scanline()
192 * single-pass decompression case, allowing us to use the same MCU column in jpeg_crop_scanline()
195 if (cinfo->comps_in_scan == 1 && cinfo->num_components == 1) in jpeg_crop_scanline()
196 align = cinfo->_min_DCT_scaled_size; in jpeg_crop_scanline()
198 align = cinfo->_min_DCT_scaled_size * cinfo->max_h_samp_factor; in jpeg_crop_scanline()
209 *width = *width + input_xoffset - *xoffset; in jpeg_crop_scanline()
210 cinfo->output_width = *width; in jpeg_crop_scanline()
213 * will be used in single-scan decompressions. in jpeg_crop_scanline()
215 cinfo->master->first_iMCU_col = (JDIMENSION)(long)(*xoffset) / (long)align; in jpeg_crop_scanline()
216 cinfo->master->last_iMCU_col = in jpeg_crop_scanline()
217 (JDIMENSION)jdiv_round_up((long)(*xoffset + cinfo->output_width), in jpeg_crop_scanline()
218 (long)align) - 1; in jpeg_crop_scanline()
220 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; in jpeg_crop_scanline()
222 int hsf = (cinfo->comps_in_scan == 1 && cinfo->num_components == 1) ? in jpeg_crop_scanline()
223 1 : compptr->h_samp_factor; in jpeg_crop_scanline()
226 orig_downsampled_width = compptr->downsampled_width; in jpeg_crop_scanline()
227 compptr->downsampled_width = in jpeg_crop_scanline()
228 (JDIMENSION)jdiv_round_up((long)(cinfo->output_width * in jpeg_crop_scanline()
229 compptr->h_samp_factor), in jpeg_crop_scanline()
230 (long)cinfo->max_h_samp_factor); in jpeg_crop_scanline()
231 if (compptr->downsampled_width < 2 && orig_downsampled_width >= 2) in jpeg_crop_scanline()
235 * values will be used in multi-scan decompressions. in jpeg_crop_scanline()
237 cinfo->master->first_MCU_col[ci] = in jpeg_crop_scanline()
239 cinfo->master->last_MCU_col[ci] = in jpeg_crop_scanline()
240 (JDIMENSION)jdiv_round_up((long)((*xoffset + cinfo->output_width) * hsf), in jpeg_crop_scanline()
241 (long)align) - 1; in jpeg_crop_scanline()
245 cinfo->master->jinit_upsampler_no_alloc = TRUE; in jpeg_crop_scanline()
247 cinfo->master->jinit_upsampler_no_alloc = FALSE; in jpeg_crop_scanline()
271 if (cinfo->global_state != DSTATE_SCANNING) in jpeg_read_scanlines()
272 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); in jpeg_read_scanlines()
273 if (cinfo->output_scanline >= cinfo->output_height) { in jpeg_read_scanlines()
278 /* Call progress monitor hook if present */ in jpeg_read_scanlines()
279 if (cinfo->progress != NULL) { in jpeg_read_scanlines()
280 cinfo->progress->pass_counter = (long)cinfo->output_scanline; in jpeg_read_scanlines()
281 cinfo->progress->pass_limit = (long)cinfo->output_height; in jpeg_read_scanlines()
282 (*cinfo->progress->progress_monitor) ((j_common_ptr)cinfo); in jpeg_read_scanlines()
287 (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, max_lines); in jpeg_read_scanlines()
288 cinfo->output_scanline += row_ctr; in jpeg_read_scanlines()
322 * maintain the internal state of the context-based upsampler. In these cases,
331 my_master_ptr master = (my_master_ptr)cinfo->master; in read_and_discard_scanlines()
343 if (cinfo->cconvert && cinfo->cconvert->color_convert) { in read_and_discard_scanlines()
344 color_convert = cinfo->cconvert->color_convert; in read_and_discard_scanlines()
345 cinfo->cconvert->color_convert = noop_convert; in read_and_discard_scanlines()
348 if (cinfo->cquantize && cinfo->cquantize->color_quantize) { in read_and_discard_scanlines()
349 color_quantize = cinfo->cquantize->color_quantize; in read_and_discard_scanlines()
350 cinfo->cquantize->color_quantize = noop_quantize; in read_and_discard_scanlines()
353 if (master->using_merged_upsample && cinfo->post && in read_and_discard_scanlines()
354 cinfo->post->post_process_data) { in read_and_discard_scanlines()
355 post_process_data = cinfo->post->post_process_data; in read_and_discard_scanlines()
356 cinfo->post->post_process_data = noop_post_process; in read_and_discard_scanlines()
363 cinfo->cconvert->color_convert = color_convert; in read_and_discard_scanlines()
366 cinfo->cquantize->color_quantize = color_quantize; in read_and_discard_scanlines()
369 cinfo->post->post_process_data = post_process_data; in read_and_discard_scanlines()
382 my_main_ptr main_ptr = (my_main_ptr)cinfo->main; in increment_simple_rowgroup_ctr()
385 main_ptr->rowgroup_ctr += rows / cinfo->max_v_samp_factor; in increment_simple_rowgroup_ctr()
390 rows_left = rows % cinfo->max_v_samp_factor; in increment_simple_rowgroup_ctr()
391 cinfo->output_scanline += rows - rows_left; in increment_simple_rowgroup_ctr()
410 my_main_ptr main_ptr = (my_main_ptr)cinfo->main; in jpeg_skip_scanlines()
411 my_coef_ptr coef = (my_coef_ptr)cinfo->coef; in jpeg_skip_scanlines()
412 my_master_ptr master = (my_master_ptr)cinfo->master; in jpeg_skip_scanlines()
418 if (cinfo->global_state != DSTATE_SCANNING) in jpeg_skip_scanlines()
419 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); in jpeg_skip_scanlines()
422 if (cinfo->output_scanline + num_lines >= cinfo->output_height) { in jpeg_skip_scanlines()
423 cinfo->output_scanline = cinfo->output_height; in jpeg_skip_scanlines()
424 (*cinfo->inputctl->finish_input_pass) (cinfo); in jpeg_skip_scanlines()
425 cinfo->inputctl->eoi_reached = TRUE; in jpeg_skip_scanlines()
426 return cinfo->output_height - cinfo->output_scanline; in jpeg_skip_scanlines()
432 lines_per_iMCU_row = cinfo->_min_DCT_scaled_size * cinfo->max_v_samp_factor; in jpeg_skip_scanlines()
434 (lines_per_iMCU_row - (cinfo->output_scanline % lines_per_iMCU_row)) % in jpeg_skip_scanlines()
436 lines_after_iMCU_row = num_lines - lines_left_in_iMCU_row; in jpeg_skip_scanlines()
442 if (cinfo->upsample->need_context_rows) { in jpeg_skip_scanlines()
446 * The increasing complexity would be a by-product of meddling with the in jpeg_skip_scanlines()
448 * the next iMCU row may have already been entropy-decoded. In this unique in jpeg_skip_scanlines()
452 (lines_left_in_iMCU_row <= 1 && main_ptr->buffer_full && in jpeg_skip_scanlines()
458 /* If the next iMCU row has already been entropy-decoded, make sure that in jpeg_skip_scanlines()
461 if (lines_left_in_iMCU_row <= 1 && main_ptr->buffer_full) { in jpeg_skip_scanlines()
462 cinfo->output_scanline += lines_left_in_iMCU_row + lines_per_iMCU_row; in jpeg_skip_scanlines()
463 lines_after_iMCU_row -= lines_per_iMCU_row; in jpeg_skip_scanlines()
465 cinfo->output_scanline += lines_left_in_iMCU_row; in jpeg_skip_scanlines()
469 if (main_ptr->iMCU_row_ctr == 0 || in jpeg_skip_scanlines()
470 (main_ptr->iMCU_row_ctr == 1 && lines_left_in_iMCU_row > 2)) in jpeg_skip_scanlines()
472 main_ptr->buffer_full = FALSE; in jpeg_skip_scanlines()
473 main_ptr->rowgroup_ctr = 0; in jpeg_skip_scanlines()
474 main_ptr->context_state = CTX_PREPARE_FOR_IMCU; in jpeg_skip_scanlines()
475 if (master->using_merged_upsample) { in jpeg_skip_scanlines()
477 (my_merged_upsample_ptr)cinfo->upsample; in jpeg_skip_scanlines()
478 upsample->spare_full = FALSE; in jpeg_skip_scanlines()
479 upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline; in jpeg_skip_scanlines()
481 my_upsample_ptr upsample = (my_upsample_ptr)cinfo->upsample; in jpeg_skip_scanlines()
482 upsample->next_row_out = cinfo->max_v_samp_factor; in jpeg_skip_scanlines()
483 upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline; in jpeg_skip_scanlines()
493 cinfo->output_scanline += lines_left_in_iMCU_row; in jpeg_skip_scanlines()
494 main_ptr->buffer_full = FALSE; in jpeg_skip_scanlines()
495 main_ptr->rowgroup_ctr = 0; in jpeg_skip_scanlines()
496 if (master->using_merged_upsample) { in jpeg_skip_scanlines()
498 (my_merged_upsample_ptr)cinfo->upsample; in jpeg_skip_scanlines()
499 upsample->spare_full = FALSE; in jpeg_skip_scanlines()
500 upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline; in jpeg_skip_scanlines()
502 my_upsample_ptr upsample = (my_upsample_ptr)cinfo->upsample; in jpeg_skip_scanlines()
503 upsample->next_row_out = cinfo->max_v_samp_factor; in jpeg_skip_scanlines()
504 upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline; in jpeg_skip_scanlines()
510 if (cinfo->upsample->need_context_rows) in jpeg_skip_scanlines()
511 lines_to_skip = ((lines_after_iMCU_row - 1) / lines_per_iMCU_row) * in jpeg_skip_scanlines()
520 lines_to_read = lines_after_iMCU_row - lines_to_skip; in jpeg_skip_scanlines()
522 /* For images requiring multiple scans (progressive, non-interleaved, etc.), in jpeg_skip_scanlines()
524 * that the input data source is non-suspending. This makes skipping easy. in jpeg_skip_scanlines()
526 if (cinfo->inputctl->has_multiple_scans) { in jpeg_skip_scanlines()
527 if (cinfo->upsample->need_context_rows) { in jpeg_skip_scanlines()
528 cinfo->output_scanline += lines_to_skip; in jpeg_skip_scanlines()
529 cinfo->output_iMCU_row += lines_to_skip / lines_per_iMCU_row; in jpeg_skip_scanlines()
530 main_ptr->iMCU_row_ctr += lines_to_skip / lines_per_iMCU_row; in jpeg_skip_scanlines()
536 cinfo->output_scanline += lines_to_skip; in jpeg_skip_scanlines()
537 cinfo->output_iMCU_row += lines_to_skip / lines_per_iMCU_row; in jpeg_skip_scanlines()
540 if (master->using_merged_upsample) { in jpeg_skip_scanlines()
542 (my_merged_upsample_ptr)cinfo->upsample; in jpeg_skip_scanlines()
543 upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline; in jpeg_skip_scanlines()
545 my_upsample_ptr upsample = (my_upsample_ptr)cinfo->upsample; in jpeg_skip_scanlines()
546 upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline; in jpeg_skip_scanlines()
553 for (y = 0; y < coef->MCU_rows_per_iMCU_row; y++) { in jpeg_skip_scanlines()
554 for (x = 0; x < cinfo->MCUs_per_row; x++) { in jpeg_skip_scanlines()
559 (*cinfo->entropy->decode_mcu) (cinfo, NULL); in jpeg_skip_scanlines()
562 cinfo->input_iMCU_row++; in jpeg_skip_scanlines()
563 cinfo->output_iMCU_row++; in jpeg_skip_scanlines()
564 if (cinfo->input_iMCU_row < cinfo->total_iMCU_rows) in jpeg_skip_scanlines()
567 (*cinfo->inputctl->finish_input_pass) (cinfo); in jpeg_skip_scanlines()
569 cinfo->output_scanline += lines_to_skip; in jpeg_skip_scanlines()
571 if (cinfo->upsample->need_context_rows) { in jpeg_skip_scanlines()
572 /* Context-based upsampling keeps track of iMCU rows. */ in jpeg_skip_scanlines()
573 main_ptr->iMCU_row_ctr += lines_to_skip / lines_per_iMCU_row; in jpeg_skip_scanlines()
588 if (master->using_merged_upsample) { in jpeg_skip_scanlines()
589 my_merged_upsample_ptr upsample = (my_merged_upsample_ptr)cinfo->upsample; in jpeg_skip_scanlines()
590 upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline; in jpeg_skip_scanlines()
592 my_upsample_ptr upsample = (my_upsample_ptr)cinfo->upsample; in jpeg_skip_scanlines()
593 upsample->rows_to_go = cinfo->output_height - cinfo->output_scanline; in jpeg_skip_scanlines()
611 if (cinfo->global_state != DSTATE_RAW_OK) in jpeg_read_raw_data()
612 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); in jpeg_read_raw_data()
613 if (cinfo->output_scanline >= cinfo->output_height) { in jpeg_read_raw_data()
618 /* Call progress monitor hook if present */ in jpeg_read_raw_data()
619 if (cinfo->progress != NULL) { in jpeg_read_raw_data()
620 cinfo->progress->pass_counter = (long)cinfo->output_scanline; in jpeg_read_raw_data()
621 cinfo->progress->pass_limit = (long)cinfo->output_height; in jpeg_read_raw_data()
622 (*cinfo->progress->progress_monitor) ((j_common_ptr)cinfo); in jpeg_read_raw_data()
626 lines_per_iMCU_row = cinfo->max_v_samp_factor * cinfo->_min_DCT_scaled_size; in jpeg_read_raw_data()
631 if (!(*cinfo->coef->decompress_data) (cinfo, data)) in jpeg_read_raw_data()
635 cinfo->output_scanline += lines_per_iMCU_row; in jpeg_read_raw_data()
640 /* Additional entry points for buffered-image mode. */
645 * Initialize for an output pass in buffered-image mode.
651 if (cinfo->global_state != DSTATE_BUFIMAGE && in jpeg_start_output()
652 cinfo->global_state != DSTATE_PRESCAN) in jpeg_start_output()
653 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); in jpeg_start_output()
657 if (cinfo->inputctl->eoi_reached && scan_number > cinfo->input_scan_number) in jpeg_start_output()
658 scan_number = cinfo->input_scan_number; in jpeg_start_output()
659 cinfo->output_scan_number = scan_number; in jpeg_start_output()
666 * Finish up after an output pass in buffered-image mode.
675 if ((cinfo->global_state == DSTATE_SCANNING || in jpeg_finish_output()
676 cinfo->global_state == DSTATE_RAW_OK) && cinfo->buffered_image) { in jpeg_finish_output()
678 /* We do not require the whole pass to have been completed. */ in jpeg_finish_output()
679 (*cinfo->master->finish_output_pass) (cinfo); in jpeg_finish_output()
680 cinfo->global_state = DSTATE_BUFPOST; in jpeg_finish_output()
681 } else if (cinfo->global_state != DSTATE_BUFPOST) { in jpeg_finish_output()
683 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); in jpeg_finish_output()
686 while (cinfo->input_scan_number <= cinfo->output_scan_number && in jpeg_finish_output()
687 !cinfo->inputctl->eoi_reached) { in jpeg_finish_output()
688 if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED) in jpeg_finish_output()
691 cinfo->global_state = DSTATE_BUFIMAGE; in jpeg_finish_output()