| Index: third_party/libjpeg_turbo/jcmaster.c
|
| ===================================================================
|
| --- third_party/libjpeg_turbo/jcmaster.c (revision 95020)
|
| +++ third_party/libjpeg_turbo/jcmaster.c (working copy)
|
| @@ -2,6 +2,8 @@
|
| * jcmaster.c
|
| *
|
| * Copyright (C) 1991-1997, Thomas G. Lane.
|
| + * Modified 2003-2010 by Guido Vollbeding.
|
| + * Copyright (C) 2010, D. R. Commander.
|
| * This file is part of the Independent JPEG Group's software.
|
| * For conditions of distribution and use, see the accompanying README file.
|
| *
|
| @@ -14,6 +16,7 @@
|
| #define JPEG_INTERNALS
|
| #include "jinclude.h"
|
| #include "jpeglib.h"
|
| +#include "jpegcomp.h"
|
|
|
|
|
| /* Private state */
|
| @@ -42,8 +45,28 @@
|
| * Support routines that do various essential calculations.
|
| */
|
|
|
| +#if JPEG_LIB_VERSION >= 70
|
| +/*
|
| + * Compute JPEG image dimensions and related values.
|
| + * NOTE: this is exported for possible use by application.
|
| + * Hence it mustn't do anything that can't be done twice.
|
| + */
|
| +
|
| +GLOBAL(void)
|
| +jpeg_calc_jpeg_dimensions (j_compress_ptr cinfo)
|
| +/* Do computations that are needed before master selection phase */
|
| +{
|
| + /* Hardwire it to "no scaling" */
|
| + cinfo->jpeg_width = cinfo->image_width;
|
| + cinfo->jpeg_height = cinfo->image_height;
|
| + cinfo->min_DCT_h_scaled_size = DCTSIZE;
|
| + cinfo->min_DCT_v_scaled_size = DCTSIZE;
|
| +}
|
| +#endif
|
| +
|
| +
|
| LOCAL(void)
|
| -initial_setup (j_compress_ptr cinfo)
|
| +initial_setup (j_compress_ptr cinfo, boolean transcode_only)
|
| /* Do computations that are needed before master selection phase */
|
| {
|
| int ci;
|
| @@ -51,14 +74,21 @@
|
| long samplesperrow;
|
| JDIMENSION jd_samplesperrow;
|
|
|
| +#if JPEG_LIB_VERSION >= 70
|
| +#if JPEG_LIB_VERSION >= 80
|
| + if (!transcode_only)
|
| +#endif
|
| + jpeg_calc_jpeg_dimensions(cinfo);
|
| +#endif
|
| +
|
| /* Sanity check on image dimensions */
|
| - if (cinfo->image_height <= 0 || cinfo->image_width <= 0
|
| + if (cinfo->_jpeg_height <= 0 || cinfo->_jpeg_width <= 0
|
| || cinfo->num_components <= 0 || cinfo->input_components <= 0)
|
| ERREXIT(cinfo, JERR_EMPTY_IMAGE);
|
|
|
| /* Make sure image isn't bigger than I can handle */
|
| - if ((long) cinfo->image_height > (long) JPEG_MAX_DIMENSION ||
|
| - (long) cinfo->image_width > (long) JPEG_MAX_DIMENSION)
|
| + if ((long) cinfo->_jpeg_height > (long) JPEG_MAX_DIMENSION ||
|
| + (long) cinfo->_jpeg_width > (long) JPEG_MAX_DIMENSION)
|
| ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION);
|
|
|
| /* Width of an input scanline must be representable as JDIMENSION. */
|
| @@ -96,20 +126,24 @@
|
| /* Fill in the correct component_index value; don't rely on application */
|
| compptr->component_index = ci;
|
| /* For compression, we never do DCT scaling. */
|
| +#if JPEG_LIB_VERSION >= 70
|
| + compptr->DCT_h_scaled_size = compptr->DCT_v_scaled_size = DCTSIZE;
|
| +#else
|
| compptr->DCT_scaled_size = DCTSIZE;
|
| +#endif
|
| /* Size in DCT blocks */
|
| compptr->width_in_blocks = (JDIMENSION)
|
| - jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor,
|
| + jdiv_round_up((long) cinfo->_jpeg_width * (long) compptr->h_samp_factor,
|
| (long) (cinfo->max_h_samp_factor * DCTSIZE));
|
| compptr->height_in_blocks = (JDIMENSION)
|
| - jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor,
|
| + jdiv_round_up((long) cinfo->_jpeg_height * (long) compptr->v_samp_factor,
|
| (long) (cinfo->max_v_samp_factor * DCTSIZE));
|
| /* Size in samples */
|
| compptr->downsampled_width = (JDIMENSION)
|
| - jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor,
|
| + jdiv_round_up((long) cinfo->_jpeg_width * (long) compptr->h_samp_factor,
|
| (long) cinfo->max_h_samp_factor);
|
| compptr->downsampled_height = (JDIMENSION)
|
| - jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor,
|
| + jdiv_round_up((long) cinfo->_jpeg_height * (long) compptr->v_samp_factor,
|
| (long) cinfo->max_v_samp_factor);
|
| /* Mark component needed (this flag isn't actually used for compression) */
|
| compptr->component_needed = TRUE;
|
| @@ -119,7 +153,7 @@
|
| * main controller will call coefficient controller).
|
| */
|
| cinfo->total_iMCU_rows = (JDIMENSION)
|
| - jdiv_round_up((long) cinfo->image_height,
|
| + jdiv_round_up((long) cinfo->_jpeg_height,
|
| (long) (cinfo->max_v_samp_factor*DCTSIZE));
|
| }
|
|
|
| @@ -347,10 +381,10 @@
|
|
|
| /* Overall image size in MCUs */
|
| cinfo->MCUs_per_row = (JDIMENSION)
|
| - jdiv_round_up((long) cinfo->image_width,
|
| + jdiv_round_up((long) cinfo->_jpeg_width,
|
| (long) (cinfo->max_h_samp_factor*DCTSIZE));
|
| cinfo->MCU_rows_in_scan = (JDIMENSION)
|
| - jdiv_round_up((long) cinfo->image_height,
|
| + jdiv_round_up((long) cinfo->_jpeg_height,
|
| (long) (cinfo->max_v_samp_factor*DCTSIZE));
|
|
|
| cinfo->blocks_in_MCU = 0;
|
| @@ -554,7 +588,7 @@
|
| master->pub.is_last_pass = FALSE;
|
|
|
| /* Validate parameters, determine derived values */
|
| - initial_setup(cinfo);
|
| + initial_setup(cinfo, transcode_only);
|
|
|
| if (cinfo->scan_info != NULL) {
|
| #ifdef C_MULTISCAN_FILES_SUPPORTED
|
|
|