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,...] |