/* * jdapistd.c * * This file was part of the Independent JPEG Group's software: * Copyright (C) 1994-1996, Thomas G. Lane. * libjpeg-turbo Modifications: * Copyright (C) 2010, 2015-2020, 2022, D. R. Commander. * Copyright (C) 2015, Google, Inc. * For conditions of distribution and use, see the accompanying README.ijg * file. * * This file contains application interface code for the decompression half * of the JPEG library. These are the "standard" API routines that are * used in the normal full-decompression case. They are not used by a * transcoding-only application. Note that if an application links in * jpeg_start_decompress, it will end up linking in the entire decompressor. * We thus must separate this file from jdapimin.c to avoid linking the * whole decompression library into a transcoder. */ #include "jinclude.h" #include "jdmainct.h" #include "jdcoefct.h" #include "jdmaster.h" #include "jdmerge.h" #include "jdsample.h" #include "jmemsys.h" /* Forward declarations */ LOCAL(boolean) output_pass_setup(j_decompress_ptr cinfo); /* * Decompression initialization. * jpeg_read_header must be completed before calling this. * * If a multipass operating mode was selected, this will do all but the * last pass, and thus may take a great deal of time. * * Returns FALSE if suspended. The return value need be inspected only if * a suspending data source is used. */ GLOBAL(boolean) jpeg_start_decompress(j_decompress_ptr cinfo) { … } /* * Set up for an output pass, and perform any dummy pass(es) needed. * Common subroutine for jpeg_start_decompress and jpeg_start_output. * Entry: global_state = DSTATE_PRESCAN only if previously suspended. * Exit: If done, returns TRUE and sets global_state for proper output mode. * If suspended, returns FALSE and sets global_state = DSTATE_PRESCAN. */ LOCAL(boolean) output_pass_setup(j_decompress_ptr cinfo) { … } /* * Enable partial scanline decompression * * Must be called after jpeg_start_decompress() and before any calls to * jpeg_read_scanlines() or jpeg_skip_scanlines(). * * Refer to libjpeg.txt for more information. */ GLOBAL(void) jpeg_crop_scanline(j_decompress_ptr cinfo, JDIMENSION *xoffset, JDIMENSION *width) { … } /* * Read some scanlines of data from the JPEG decompressor. * * The return value will be the number of lines actually read. * This may be less than the number requested in several cases, * including bottom of image, data source suspension, and operating * modes that emit multiple scanlines at a time. * * Note: we warn about excess calls to jpeg_read_scanlines() since * this likely signals an application programmer error. However, * an oversize buffer (max_lines > scanlines remaining) is not an error. */ GLOBAL(JDIMENSION) jpeg_read_scanlines(j_decompress_ptr cinfo, JSAMPARRAY scanlines, JDIMENSION max_lines) { … } /* Dummy color convert function used by jpeg_skip_scanlines() */ LOCAL(void) noop_convert(j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows) { … } /* Dummy quantize function used by jpeg_skip_scanlines() */ LOCAL(void) noop_quantize(j_decompress_ptr cinfo, JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) { … } /* * In some cases, it is best to call jpeg_read_scanlines() and discard the * output, rather than skipping the scanlines, because this allows us to * maintain the internal state of the context-based upsampler. In these cases, * we set up and tear down a dummy color converter in order to avoid valgrind * errors and to achieve the best possible performance. */ LOCAL(void) read_and_discard_scanlines(j_decompress_ptr cinfo, JDIMENSION num_lines) { … } /* * Called by jpeg_skip_scanlines(). This partially skips a decompress block by * incrementing the rowgroup counter. */ LOCAL(void) increment_simple_rowgroup_ctr(j_decompress_ptr cinfo, JDIMENSION rows) { … } /* * Skips some scanlines of data from the JPEG decompressor. * * The return value will be the number of lines actually skipped. If skipping * num_lines would move beyond the end of the image, then the actual number of * lines remaining in the image is returned. Otherwise, the return value will * be equal to num_lines. * * Refer to libjpeg.txt for more information. */ GLOBAL(JDIMENSION) jpeg_skip_scanlines(j_decompress_ptr cinfo, JDIMENSION num_lines) { … } /* * Alternate entry point to read raw data. * Processes exactly one iMCU row per call, unless suspended. */ GLOBAL(JDIMENSION) jpeg_read_raw_data(j_decompress_ptr cinfo, JSAMPIMAGE data, JDIMENSION max_lines) { … } /* Additional entry points for buffered-image mode. */ #ifdef D_MULTISCAN_FILES_SUPPORTED /* * Initialize for an output pass in buffered-image mode. */ GLOBAL(boolean) jpeg_start_output(j_decompress_ptr cinfo, int scan_number) { … } /* * Finish up after an output pass in buffered-image mode. * * Returns FALSE if suspended. The return value need be inspected only if * a suspending data source is used. */ GLOBAL(boolean) jpeg_finish_output(j_decompress_ptr cinfo) { … } #endif /* D_MULTISCAN_FILES_SUPPORTED */