static int consume_input (jpeg_decompress_struct cinfo) { switch (cinfo.inputctl.consume_input) { case COEF_CONSUME_INPUT: switch (cinfo.coef.consume_data) { case CONSUME_DATA: return consume_data(cinfo); case DUMMY_CONSUME_DATA: return dummy_consume_data(cinfo); default: error(); } break; case INPUT_CONSUME_INPUT: return consume_markers(cinfo); default: error(); } return 0; }
case DSTATE_START: reset_input_controller(cinfo); init_source (cinfo); cinfo.global_state = DSTATE_INHEADER; retcode = consume_input(cinfo); if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */ default_decompress_parms(cinfo); case DSTATE_BUFPOST: case DSTATE_STOPPING: retcode = consume_input (cinfo); break; default: error();
switch (cinfo.coef.decompress_data) { case DECOMPRESS_DATA: result = decompress_data(cinfo, main.buffer, main.buffer_offset); break; case DECOMPRESS_SMOOTH_DATA: result = decompress_smooth_data(cinfo, main.buffer, main.buffer_offset); break; case DECOMPRESS_ONEPASS: result = decompress_onepass(cinfo, main.buffer, main.buffer_offset); break; default: result = 0; post_process_data (cinfo, main.buffer, main.buffer_offset, main.rowgroup_ctr, rowgroups_avail, output_buf, out_row_ctr, out_rows_avail);
static boolean jpeg_finish_output (jpeg_decompress_struct cinfo) { if ((cinfo.global_state == DSTATE_SCANNING || cinfo.global_state == DSTATE_RAW_OK) && cinfo.buffered_image) { /* Terminate this pass. */ /* We do not require the whole pass to have been completed. */ finish_output_pass (cinfo); cinfo.global_state = DSTATE_BUFPOST; } else if (cinfo.global_state != DSTATE_BUFPOST) { /* BUFPOST = repeat call after a suspension, anything else is error */ error(); // ERREXIT1(cinfo, JERR_BAD_STATE, cinfo.global_state); } /* Read markers looking for SOS or EOI */ while (cinfo.input_scan_number <= cinfo.output_scan_number && !cinfo.inputctl.eoi_reached) { if (consume_input (cinfo) == JPEG_SUSPENDED) return false; /* Suspend, come back later */ } cinfo.global_state = DSTATE_BUFIMAGE; return true; }
static boolean jpeg_finish_decompress (jpeg_decompress_struct cinfo) { if ((cinfo.global_state == DSTATE_SCANNING || cinfo.global_state == DSTATE_RAW_OK) && ! cinfo.buffered_image) { /* Terminate final pass of non-buffered mode */ if (cinfo.output_scanline < cinfo.output_height) error(); // ERREXIT(cinfo, JERR_TOO_LITTLE_DATA); finish_output_pass (cinfo); cinfo.global_state = DSTATE_STOPPING; } else if (cinfo.global_state == DSTATE_BUFIMAGE) { /* Finishing after a buffered-image operation */ cinfo.global_state = DSTATE_STOPPING; } else if (cinfo.global_state != DSTATE_STOPPING) { /* STOPPING = repeat call after a suspension, anything else is error */ error(); // ERREXIT1(cinfo, JERR_BAD_STATE, cinfo.global_state); } /* Read until EOI */ while (! cinfo.inputctl.eoi_reached) { if (consume_input (cinfo) == JPEG_SUSPENDED) return false; /* Suspend, come back later */ } /* Do final cleanup */ // (*cinfo.src.term_source) (cinfo); /* We can use jpeg_abort to release memory and reset global_state */ jpeg_abort(cinfo); return true; }
switch (cinfo.coef.decompress_data) { case DECOMPRESS_DATA: result = decompress_data(cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr]); break; case DECOMPRESS_SMOOTH_DATA: result = decompress_smooth_data(cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr]); break; case DECOMPRESS_ONEPASS: result = decompress_onepass(cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr]); break; default: result = 0; case CTX_POSTPONED_ROW: post_process_data (cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr], main.rowgroup_ctr, main.rowgroups_avail, output_buf, out_row_ctr, out_rows_avail); if (main.rowgroup_ctr[0] < main.rowgroups_avail) return; /* Need to suspend */ set_bottom_pointers(cinfo); main.context_state = CTX_PROCESS_IMCU; post_process_data (cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr], main.rowgroup_ctr, main.rowgroups_avail, output_buf, out_row_ctr, out_rows_avail); if (main.rowgroup_ctr[0] < main.rowgroups_avail) return; /* Need to suspend */ set_wraparound_pointers(cinfo);
static boolean jpeg_start_decompress (jpeg_decompress_struct cinfo) { if (cinfo.global_state == DSTATE_READY) { jinit_master_decompress(cinfo); if (cinfo.buffered_image) { retcode = consume_input (cinfo); if (retcode == JPEG_SUSPENDED) return false; error(); return output_pass_setup(cinfo);
cinfo.input_iMCU_row <= cinfo.output_iMCU_row)) if (consume_input(cinfo) == JPEG_SUSPENDED) return JPEG_SUSPENDED; output_col = 0; for (block_num = 0; block_num < compptr.width_in_blocks; block_num++) { jpeg_idct_islow(cinfo, compptr, buffer_ptr[buffer_ptr_offset], output_ptr, output_ptr_offset, output_col);
error(); error(); alloc_funny_pointers(cinfo); /* Alloc space for xbuffer[] lists */ ngroups = cinfo.min_DCT_scaled_size + 2; } else {
case JCS_GRAYSCALE: if (cinfo.num_components != 1) error(); case JCS_YCbCr: if (cinfo.num_components != 3) error(); case JCS_YCCK: if (cinfo.num_components != 4) error(); error(); cinfo.comp_info[ci].component_needed = false; } else error(); if (cinfo.jpeg_color_space == JCS_YCbCr) { cconvert.color_convert = YCC_RGB_CONVERT; build_ycc_rgb_table(cinfo); } else if (cinfo.jpeg_color_space == JCS_GRAYSCALE) { cconvert.color_convert = GRAY_RGB_CONVERT; cconvert.color_convert = NULL_CONVERT; } else error(); if (cinfo.jpeg_color_space == JCS_YCCK) {
switch (cinfo.coef.decompress_data) { case DECOMPRESS_DATA: result = decompress_data(cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr]); break; case DECOMPRESS_SMOOTH_DATA: result = decompress_smooth_data(cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr]); break; case DECOMPRESS_ONEPASS: result = decompress_onepass(cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr]); break; default: result = 0; case CTX_POSTPONED_ROW: post_process_data (cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr], main.rowgroup_ctr, main.rowgroups_avail, output_buf, out_row_ctr, out_rows_avail); if (main.rowgroup_ctr[0] < main.rowgroups_avail) return; /* Need to suspend */ set_bottom_pointers(cinfo); main.context_state = CTX_PROCESS_IMCU; post_process_data (cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr], main.rowgroup_ctr, main.rowgroups_avail, output_buf, out_row_ctr, out_rows_avail); if (main.rowgroup_ctr[0] < main.rowgroups_avail) return; /* Need to suspend */ set_wraparound_pointers(cinfo);
static boolean jpeg_finish_decompress (jpeg_decompress_struct cinfo) { if ((cinfo.global_state == DSTATE_SCANNING || cinfo.global_state == DSTATE_RAW_OK) && ! cinfo.buffered_image) { /* Terminate final pass of non-buffered mode */ if (cinfo.output_scanline < cinfo.output_height) error(); // ERREXIT(cinfo, JERR_TOO_LITTLE_DATA); finish_output_pass (cinfo); cinfo.global_state = DSTATE_STOPPING; } else if (cinfo.global_state == DSTATE_BUFIMAGE) { /* Finishing after a buffered-image operation */ cinfo.global_state = DSTATE_STOPPING; } else if (cinfo.global_state != DSTATE_STOPPING) { /* STOPPING = repeat call after a suspension, anything else is error */ error(); // ERREXIT1(cinfo, JERR_BAD_STATE, cinfo.global_state); } /* Read until EOI */ while (! cinfo.inputctl.eoi_reached) { if (consume_input (cinfo) == JPEG_SUSPENDED) return false; /* Suspend, come back later */ } /* Do final cleanup */ // (*cinfo.src.term_source) (cinfo); /* We can use jpeg_abort to release memory and reset global_state */ jpeg_abort(cinfo); return true; }
static boolean jpeg_start_decompress (jpeg_decompress_struct cinfo) { if (cinfo.global_state == DSTATE_READY) { jinit_master_decompress(cinfo); if (cinfo.buffered_image) { retcode = consume_input (cinfo); if (retcode == JPEG_SUSPENDED) return false; error(); return output_pass_setup(cinfo);
static boolean jpeg_finish_output (jpeg_decompress_struct cinfo) { if ((cinfo.global_state == DSTATE_SCANNING || cinfo.global_state == DSTATE_RAW_OK) && cinfo.buffered_image) { /* Terminate this pass. */ /* We do not require the whole pass to have been completed. */ finish_output_pass (cinfo); cinfo.global_state = DSTATE_BUFPOST; } else if (cinfo.global_state != DSTATE_BUFPOST) { /* BUFPOST = repeat call after a suspension, anything else is error */ error(); // ERREXIT1(cinfo, JERR_BAD_STATE, cinfo.global_state); } /* Read markers looking for SOS or EOI */ while (cinfo.input_scan_number <= cinfo.output_scan_number && !cinfo.inputctl.eoi_reached) { if (consume_input (cinfo) == JPEG_SUSPENDED) return false; /* Suspend, come back later */ } cinfo.global_state = DSTATE_BUFIMAGE; return true; }
cinfo.input_iMCU_row <= cinfo.output_iMCU_row)) if (consume_input(cinfo) == JPEG_SUSPENDED) return JPEG_SUSPENDED; output_col = 0; for (block_num = 0; block_num < compptr.width_in_blocks; block_num++) { jpeg_idct_islow(cinfo, compptr, buffer_ptr[buffer_ptr_offset], output_ptr, output_ptr_offset, output_col);
error(); error(); alloc_funny_pointers(cinfo); /* Alloc space for xbuffer[] lists */ ngroups = cinfo.min_DCT_scaled_size + 2; } else {
case JCS_GRAYSCALE: if (cinfo.num_components != 1) error(); case JCS_YCbCr: if (cinfo.num_components != 3) error(); case JCS_YCCK: if (cinfo.num_components != 4) error(); error(); cinfo.comp_info[ci].component_needed = false; } else error(); if (cinfo.jpeg_color_space == JCS_YCbCr) { cconvert.color_convert = YCC_RGB_CONVERT; build_ycc_rgb_table(cinfo); } else if (cinfo.jpeg_color_space == JCS_GRAYSCALE) { cconvert.color_convert = GRAY_RGB_CONVERT; cconvert.color_convert = NULL_CONVERT; } else error(); if (cinfo.jpeg_color_space == JCS_YCCK) {
switch (cinfo.coef.decompress_data) { case DECOMPRESS_DATA: result = decompress_data(cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr]); break; case DECOMPRESS_SMOOTH_DATA: result = decompress_smooth_data(cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr]); break; case DECOMPRESS_ONEPASS: result = decompress_onepass(cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr]); break; default: result = 0; case CTX_POSTPONED_ROW: post_process_data (cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr], main.rowgroup_ctr, main.rowgroups_avail, output_buf, out_row_ctr, out_rows_avail); if (main.rowgroup_ctr[0] < main.rowgroups_avail) return; /* Need to suspend */ set_bottom_pointers(cinfo); main.context_state = CTX_PROCESS_IMCU; post_process_data (cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr], main.rowgroup_ctr, main.rowgroups_avail, output_buf, out_row_ctr, out_rows_avail); if (main.rowgroup_ctr[0] < main.rowgroups_avail) return; /* Need to suspend */ set_wraparound_pointers(cinfo);
case DSTATE_START: reset_input_controller(cinfo); init_source (cinfo); cinfo.global_state = DSTATE_INHEADER; retcode = consume_input(cinfo); if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */ default_decompress_parms(cinfo); case DSTATE_BUFPOST: case DSTATE_STOPPING: retcode = consume_input (cinfo); break; default: error();
static int consume_input (jpeg_decompress_struct cinfo) { switch (cinfo.inputctl.consume_input) { case COEF_CONSUME_INPUT: switch (cinfo.coef.consume_data) { case CONSUME_DATA: return consume_data(cinfo); case DUMMY_CONSUME_DATA: return dummy_consume_data(cinfo); default: error(); } break; case INPUT_CONSUME_INPUT: return consume_markers(cinfo); default: error(); } return 0; }