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 |