| Index: third_party/libjpeg_turbo/rdswitch.c
|
| ===================================================================
|
| --- third_party/libjpeg_turbo/rdswitch.c (revision 95020)
|
| +++ third_party/libjpeg_turbo/rdswitch.c (working copy)
|
| @@ -2,6 +2,7 @@
|
| * rdswitch.c
|
| *
|
| * Copyright (C) 1991-1996, Thomas G. Lane.
|
| + * 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.
|
| *
|
| @@ -9,6 +10,7 @@
|
| * command-line switches. Switches processed here are:
|
| * -qtables file Read quantization tables from text file
|
| * -scans file Read scan script from text file
|
| + * -quality N[,N,...] Set quality ratings
|
| * -qslots N[,N,...] Set component quantization table selectors
|
| * -sample HxV[,HxV,...] Set component sampling factors
|
| */
|
| @@ -69,9 +71,12 @@
|
| }
|
|
|
|
|
| +#if JPEG_LIB_VERSION < 70
|
| +static int q_scale_factor[NUM_QUANT_TBLS] = {100, 100, 100, 100};
|
| +#endif
|
| +
|
| GLOBAL(boolean)
|
| -read_quant_tables (j_compress_ptr cinfo, char * filename,
|
| - int scale_factor, boolean force_baseline)
|
| +read_quant_tables (j_compress_ptr cinfo, char * filename, boolean force_baseline)
|
| /* Read a set of quantization tables from the specified file.
|
| * The file is plain ASCII text: decimal numbers with whitespace between.
|
| * Comments preceded by '#' may be included in the file.
|
| @@ -108,7 +113,13 @@
|
| }
|
| table[i] = (unsigned int) val;
|
| }
|
| - jpeg_add_quant_table(cinfo, tblno, table, scale_factor, force_baseline);
|
| +#if JPEG_LIB_VERSION >= 70
|
| + jpeg_add_quant_table(cinfo, tblno, table, cinfo->q_scale_factor[tblno],
|
| + force_baseline);
|
| +#else
|
| + jpeg_add_quant_table(cinfo, tblno, table, q_scale_factor[tblno],
|
| + force_baseline);
|
| +#endif
|
| tblno++;
|
| }
|
|
|
| @@ -262,7 +273,85 @@
|
| #endif /* C_MULTISCAN_FILES_SUPPORTED */
|
|
|
|
|
| +#if JPEG_LIB_VERSION < 70
|
| +/* These are the sample quantization tables given in JPEG spec section K.1.
|
| + * The spec says that the values given produce "good" quality, and
|
| + * when divided by 2, "very good" quality.
|
| + */
|
| +static const unsigned int std_luminance_quant_tbl[DCTSIZE2] = {
|
| + 16, 11, 10, 16, 24, 40, 51, 61,
|
| + 12, 12, 14, 19, 26, 58, 60, 55,
|
| + 14, 13, 16, 24, 40, 57, 69, 56,
|
| + 14, 17, 22, 29, 51, 87, 80, 62,
|
| + 18, 22, 37, 56, 68, 109, 103, 77,
|
| + 24, 35, 55, 64, 81, 104, 113, 92,
|
| + 49, 64, 78, 87, 103, 121, 120, 101,
|
| + 72, 92, 95, 98, 112, 100, 103, 99
|
| +};
|
| +static const unsigned int std_chrominance_quant_tbl[DCTSIZE2] = {
|
| + 17, 18, 24, 47, 99, 99, 99, 99,
|
| + 18, 21, 26, 66, 99, 99, 99, 99,
|
| + 24, 26, 56, 99, 99, 99, 99, 99,
|
| + 47, 66, 99, 99, 99, 99, 99, 99,
|
| + 99, 99, 99, 99, 99, 99, 99, 99,
|
| + 99, 99, 99, 99, 99, 99, 99, 99,
|
| + 99, 99, 99, 99, 99, 99, 99, 99,
|
| + 99, 99, 99, 99, 99, 99, 99, 99
|
| +};
|
| +
|
| +
|
| +LOCAL(void)
|
| +jpeg_default_qtables (j_compress_ptr cinfo, boolean force_baseline)
|
| +{
|
| + jpeg_add_quant_table(cinfo, 0, std_luminance_quant_tbl,
|
| + q_scale_factor[0], force_baseline);
|
| + jpeg_add_quant_table(cinfo, 1, std_chrominance_quant_tbl,
|
| + q_scale_factor[1], force_baseline);
|
| +}
|
| +#endif
|
| +
|
| +
|
| GLOBAL(boolean)
|
| +set_quality_ratings (j_compress_ptr cinfo, char *arg, boolean force_baseline)
|
| +/* Process a quality-ratings parameter string, of the form
|
| + * N[,N,...]
|
| + * If there are more q-table slots than parameters, the last value is replicated.
|
| + */
|
| +{
|
| + int val = 75; /* default value */
|
| + int tblno;
|
| + char ch;
|
| +
|
| + for (tblno = 0; tblno < NUM_QUANT_TBLS; tblno++) {
|
| + if (*arg) {
|
| + ch = ','; /* if not set by sscanf, will be ',' */
|
| + if (sscanf(arg, "%d%c", &val, &ch) < 1)
|
| + return FALSE;
|
| + if (ch != ',') /* syntax check */
|
| + return FALSE;
|
| + /* Convert user 0-100 rating to percentage scaling */
|
| +#if JPEG_LIB_VERSION >= 70
|
| + cinfo->q_scale_factor[tblno] = jpeg_quality_scaling(val);
|
| +#else
|
| + q_scale_factor[tblno] = jpeg_quality_scaling(val);
|
| +#endif
|
| + while (*arg && *arg++ != ',') /* advance to next segment of arg string */
|
| + ;
|
| + } else {
|
| + /* reached end of parameter, set remaining factors to last value */
|
| +#if JPEG_LIB_VERSION >= 70
|
| + cinfo->q_scale_factor[tblno] = jpeg_quality_scaling(val);
|
| +#else
|
| + q_scale_factor[tblno] = jpeg_quality_scaling(val);
|
| +#endif
|
| + }
|
| + }
|
| + jpeg_default_qtables(cinfo, force_baseline);
|
| + return TRUE;
|
| +}
|
| +
|
| +
|
| +GLOBAL(boolean)
|
| set_quant_slots (j_compress_ptr cinfo, char *arg)
|
| /* Process a quantization-table-selectors parameter string, of the form
|
| * N[,N,...]
|
|
|