Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(347)

Side by Side Diff: jcparam.c

Issue 1953443002: Update to libjpeg_turbo 1.4.90 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « jconfigint.h.in ('k') | jcphuff.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * jcparam.c 2 * jcparam.c
3 * 3 *
4 * This file was part of the Independent JPEG Group's software: 4 * This file was part of the Independent JPEG Group's software:
5 * Copyright (C) 1991-1998, Thomas G. Lane. 5 * Copyright (C) 1991-1998, Thomas G. Lane.
6 * Modified 2003-2008 by Guido Vollbeding. 6 * Modified 2003-2008 by Guido Vollbeding.
7 * libjpeg-turbo Modifications: 7 * libjpeg-turbo Modifications:
8 * Copyright (C) 2009-2011, D. R. Commander. 8 * Copyright (C) 2009-2011, D. R. Commander.
9 * For conditions of distribution and use, see the accompanying README file. 9 * For conditions of distribution and use, see the accompanying README.ijg
10 * file.
10 * 11 *
11 * This file contains optional default-setting code for the JPEG compressor. 12 * This file contains optional default-setting code for the JPEG compressor.
12 * Applications do not have to use this file, but those that don't use it 13 * Applications do not have to use this file, but those that don't use it
13 * must know a lot more about the innards of the JPEG code. 14 * must know a lot more about the innards of the JPEG code.
14 */ 15 */
15 16
16 #define JPEG_INTERNALS 17 #define JPEG_INTERNALS
17 #include "jinclude.h" 18 #include "jinclude.h"
18 #include "jpeglib.h" 19 #include "jpeglib.h"
20 #include "jstdhuff.c"
19 21
20 22
21 /* 23 /*
22 * Quantization table setup routines 24 * Quantization table setup routines
23 */ 25 */
24 26
25 GLOBAL(void) 27 GLOBAL(void)
26 jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl, 28 jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl,
27 » » const unsigned int *basic_table, 29 const unsigned int *basic_table,
28 » » int scale_factor, boolean force_baseline) 30 int scale_factor, boolean force_baseline)
29 /* Define a quantization table equal to the basic_table times 31 /* Define a quantization table equal to the basic_table times
30 * a scale factor (given as a percentage). 32 * a scale factor (given as a percentage).
31 * If force_baseline is TRUE, the computed quantization table entries 33 * If force_baseline is TRUE, the computed quantization table entries
32 * are limited to 1..255 for JPEG baseline compatibility. 34 * are limited to 1..255 for JPEG baseline compatibility.
33 */ 35 */
34 { 36 {
35 JQUANT_TBL ** qtblptr; 37 JQUANT_TBL **qtblptr;
36 int i; 38 int i;
37 long temp; 39 long temp;
38 40
39 /* Safety check to ensure start_compress not called yet. */ 41 /* Safety check to ensure start_compress not called yet. */
40 if (cinfo->global_state != CSTATE_START) 42 if (cinfo->global_state != CSTATE_START)
41 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); 43 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
42 44
43 if (which_tbl < 0 || which_tbl >= NUM_QUANT_TBLS) 45 if (which_tbl < 0 || which_tbl >= NUM_QUANT_TBLS)
44 ERREXIT1(cinfo, JERR_DQT_INDEX, which_tbl); 46 ERREXIT1(cinfo, JERR_DQT_INDEX, which_tbl);
45 47
46 qtblptr = & cinfo->quant_tbl_ptrs[which_tbl]; 48 qtblptr = & cinfo->quant_tbl_ptrs[which_tbl];
47 49
48 if (*qtblptr == NULL) 50 if (*qtblptr == NULL)
49 *qtblptr = jpeg_alloc_quant_table((j_common_ptr) cinfo); 51 *qtblptr = jpeg_alloc_quant_table((j_common_ptr) cinfo);
50 52
51 for (i = 0; i < DCTSIZE2; i++) { 53 for (i = 0; i < DCTSIZE2; i++) {
52 temp = ((long) basic_table[i] * scale_factor + 50L) / 100L; 54 temp = ((long) basic_table[i] * scale_factor + 50L) / 100L;
53 /* limit the values to the valid range */ 55 /* limit the values to the valid range */
54 if (temp <= 0L) temp = 1L; 56 if (temp <= 0L) temp = 1L;
55 if (temp > 32767L) temp = 32767L; /* max quantizer needed for 12 bits */ 57 if (temp > 32767L) temp = 32767L; /* max quantizer needed for 12 bits */
56 if (force_baseline && temp > 255L) 58 if (force_baseline && temp > 255L)
57 temp = 255L;» » /* limit to baseline range if requested */ 59 temp = 255L; /* limit to baseline range if requested */
58 (*qtblptr)->quantval[i] = (UINT16) temp; 60 (*qtblptr)->quantval[i] = (UINT16) temp;
59 } 61 }
60 62
61 /* Initialize sent_table FALSE so table will be written to JPEG file. */ 63 /* Initialize sent_table FALSE so table will be written to JPEG file. */
62 (*qtblptr)->sent_table = FALSE; 64 (*qtblptr)->sent_table = FALSE;
63 } 65 }
64 66
65 67
66 /* These are the sample quantization tables given in JPEG spec section K.1. 68 /* These are the sample quantization tables given in JPEG spec section K.1.
67 * The spec says that the values given produce "good" quality, and 69 * The spec says that the values given produce "good" quality, and
(...skipping 24 matching lines...) Expand all
92 #if JPEG_LIB_VERSION >= 70 94 #if JPEG_LIB_VERSION >= 70
93 GLOBAL(void) 95 GLOBAL(void)
94 jpeg_default_qtables (j_compress_ptr cinfo, boolean force_baseline) 96 jpeg_default_qtables (j_compress_ptr cinfo, boolean force_baseline)
95 /* Set or change the 'quality' (quantization) setting, using default tables 97 /* Set or change the 'quality' (quantization) setting, using default tables
96 * and straight percentage-scaling quality scales. 98 * and straight percentage-scaling quality scales.
97 * This entry point allows different scalings for luminance and chrominance. 99 * This entry point allows different scalings for luminance and chrominance.
98 */ 100 */
99 { 101 {
100 /* Set up two quantization tables using the specified scaling */ 102 /* Set up two quantization tables using the specified scaling */
101 jpeg_add_quant_table(cinfo, 0, std_luminance_quant_tbl, 103 jpeg_add_quant_table(cinfo, 0, std_luminance_quant_tbl,
102 » » cinfo->q_scale_factor[0], force_baseline); 104 cinfo->q_scale_factor[0], force_baseline);
103 jpeg_add_quant_table(cinfo, 1, std_chrominance_quant_tbl, 105 jpeg_add_quant_table(cinfo, 1, std_chrominance_quant_tbl,
104 » » cinfo->q_scale_factor[1], force_baseline); 106 cinfo->q_scale_factor[1], force_baseline);
105 } 107 }
106 #endif 108 #endif
107 109
108 110
109 GLOBAL(void) 111 GLOBAL(void)
110 jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor, 112 jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor,
111 » » » boolean force_baseline) 113 boolean force_baseline)
112 /* Set or change the 'quality' (quantization) setting, using default tables 114 /* Set or change the 'quality' (quantization) setting, using default tables
113 * and a straight percentage-scaling quality scale. In most cases it's better 115 * and a straight percentage-scaling quality scale. In most cases it's better
114 * to use jpeg_set_quality (below); this entry point is provided for 116 * to use jpeg_set_quality (below); this entry point is provided for
115 * applications that insist on a linear percentage scaling. 117 * applications that insist on a linear percentage scaling.
116 */ 118 */
117 { 119 {
118 /* Set up two quantization tables using the specified scaling */ 120 /* Set up two quantization tables using the specified scaling */
119 jpeg_add_quant_table(cinfo, 0, std_luminance_quant_tbl, 121 jpeg_add_quant_table(cinfo, 0, std_luminance_quant_tbl,
120 » » scale_factor, force_baseline); 122 scale_factor, force_baseline);
121 jpeg_add_quant_table(cinfo, 1, std_chrominance_quant_tbl, 123 jpeg_add_quant_table(cinfo, 1, std_chrominance_quant_tbl,
122 » » scale_factor, force_baseline); 124 scale_factor, force_baseline);
123 } 125 }
124 126
125 127
126 GLOBAL(int) 128 GLOBAL(int)
127 jpeg_quality_scaling (int quality) 129 jpeg_quality_scaling (int quality)
128 /* Convert a user-specified quality rating to a percentage scaling factor 130 /* Convert a user-specified quality rating to a percentage scaling factor
129 * for an underlying quantization table, using our recommended scaling curve. 131 * for an underlying quantization table, using our recommended scaling curve.
130 * The input 'quality' factor should be 0 (terrible) to 100 (very good). 132 * The input 'quality' factor should be 0 (terrible) to 100 (very good).
131 */ 133 */
132 { 134 {
(...skipping 26 matching lines...) Expand all
159 { 161 {
160 /* Convert user 0-100 rating to percentage scaling */ 162 /* Convert user 0-100 rating to percentage scaling */
161 quality = jpeg_quality_scaling(quality); 163 quality = jpeg_quality_scaling(quality);
162 164
163 /* Set up standard quality tables */ 165 /* Set up standard quality tables */
164 jpeg_set_linear_quality(cinfo, quality, force_baseline); 166 jpeg_set_linear_quality(cinfo, quality, force_baseline);
165 } 167 }
166 168
167 169
168 /* 170 /*
169 * Huffman table setup routines
170 */
171
172 LOCAL(void)
173 add_huff_table (j_compress_ptr cinfo,
174 JHUFF_TBL **htblptr, const UINT8 *bits, const UINT8 *val)
175 /* Define a Huffman table */
176 {
177 int nsymbols, len;
178
179 if (*htblptr == NULL)
180 *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
181
182 /* Copy the number-of-symbols-of-each-code-length counts */
183 MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits));
184
185 /* Validate the counts. We do this here mainly so we can copy the right
186 * number of symbols from the val[] array, without risking marching off
187 * the end of memory. jchuff.c will do a more thorough test later.
188 */
189 nsymbols = 0;
190 for (len = 1; len <= 16; len++)
191 nsymbols += bits[len];
192 if (nsymbols < 1 || nsymbols > 256)
193 ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
194
195 MEMCOPY((*htblptr)->huffval, val, nsymbols * SIZEOF(UINT8));
196
197 /* Initialize sent_table FALSE so table will be written to JPEG file. */
198 (*htblptr)->sent_table = FALSE;
199 }
200
201
202 LOCAL(void)
203 std_huff_tables (j_compress_ptr cinfo)
204 /* Set up the standard Huffman tables (cf. JPEG standard section K.3) */
205 /* IMPORTANT: these are only valid for 8-bit data precision! */
206 {
207 static const UINT8 bits_dc_luminance[17] =
208 { /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 };
209 static const UINT8 val_dc_luminance[] =
210 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
211
212 static const UINT8 bits_dc_chrominance[17] =
213 { /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };
214 static const UINT8 val_dc_chrominance[] =
215 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
216
217 static const UINT8 bits_ac_luminance[17] =
218 { /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d };
219 static const UINT8 val_ac_luminance[] =
220 { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
221 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
222 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
223 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
224 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
225 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
226 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
227 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
228 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
229 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
230 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
231 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
232 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
233 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
234 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
235 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
236 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
237 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
238 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
239 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
240 0xf9, 0xfa };
241
242 static const UINT8 bits_ac_chrominance[17] =
243 { /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 };
244 static const UINT8 val_ac_chrominance[] =
245 { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
246 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
247 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
248 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
249 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
250 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
251 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
252 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
253 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
254 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
255 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
256 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
257 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
258 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
259 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
260 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
261 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
262 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
263 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
264 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
265 0xf9, 0xfa };
266
267 add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[0],
268 bits_dc_luminance, val_dc_luminance);
269 add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[0],
270 bits_ac_luminance, val_ac_luminance);
271 add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[1],
272 bits_dc_chrominance, val_dc_chrominance);
273 add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[1],
274 bits_ac_chrominance, val_ac_chrominance);
275 }
276
277
278 /*
279 * Default parameter setup for compression. 171 * Default parameter setup for compression.
280 * 172 *
281 * Applications that don't choose to use this routine must do their 173 * Applications that don't choose to use this routine must do their
282 * own setup of all these parameters. Alternately, you can call this 174 * own setup of all these parameters. Alternately, you can call this
283 * to establish defaults and then alter parameters selectively. This 175 * to establish defaults and then alter parameters selectively. This
284 * is the recommended approach since, if we add any new parameters, 176 * is the recommended approach since, if we add any new parameters,
285 * your code will still work (they'll be set to reasonable defaults). 177 * your code will still work (they'll be set to reasonable defaults).
286 */ 178 */
287 179
288 GLOBAL(void) 180 GLOBAL(void)
289 jpeg_set_defaults (j_compress_ptr cinfo) 181 jpeg_set_defaults (j_compress_ptr cinfo)
290 { 182 {
291 int i; 183 int i;
292 184
293 /* Safety check to ensure start_compress not called yet. */ 185 /* Safety check to ensure start_compress not called yet. */
294 if (cinfo->global_state != CSTATE_START) 186 if (cinfo->global_state != CSTATE_START)
295 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); 187 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
296 188
297 /* Allocate comp_info array large enough for maximum component count. 189 /* Allocate comp_info array large enough for maximum component count.
298 * Array is made permanent in case application wants to compress 190 * Array is made permanent in case application wants to compress
299 * multiple images at same param settings. 191 * multiple images at same param settings.
300 */ 192 */
301 if (cinfo->comp_info == NULL) 193 if (cinfo->comp_info == NULL)
302 cinfo->comp_info = (jpeg_component_info *) 194 cinfo->comp_info = (jpeg_component_info *)
303 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, 195 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
304 » » » » MAX_COMPONENTS * SIZEOF(jpeg_component_info)); 196 MAX_COMPONENTS * sizeof(jpeg_component_info));
305 197
306 /* Initialize everything not dependent on the color space */ 198 /* Initialize everything not dependent on the color space */
307 199
308 #if JPEG_LIB_VERSION >= 70 200 #if JPEG_LIB_VERSION >= 70
309 cinfo->scale_num = 1;»» /* 1:1 scaling */ 201 cinfo->scale_num = 1; /* 1:1 scaling */
310 cinfo->scale_denom = 1; 202 cinfo->scale_denom = 1;
311 #endif 203 #endif
312 cinfo->data_precision = BITS_IN_JSAMPLE; 204 cinfo->data_precision = BITS_IN_JSAMPLE;
313 /* Set up two quantization tables using default quality of 75 */ 205 /* Set up two quantization tables using default quality of 75 */
314 jpeg_set_quality(cinfo, 75, TRUE); 206 jpeg_set_quality(cinfo, 75, TRUE);
315 /* Set up two Huffman tables */ 207 /* Set up two Huffman tables */
316 std_huff_tables(cinfo); 208 std_huff_tables((j_common_ptr) cinfo);
317 209
318 /* Initialize default arithmetic coding conditioning */ 210 /* Initialize default arithmetic coding conditioning */
319 for (i = 0; i < NUM_ARITH_TBLS; i++) { 211 for (i = 0; i < NUM_ARITH_TBLS; i++) {
320 cinfo->arith_dc_L[i] = 0; 212 cinfo->arith_dc_L[i] = 0;
321 cinfo->arith_dc_U[i] = 1; 213 cinfo->arith_dc_U[i] = 1;
322 cinfo->arith_ac_K[i] = 5; 214 cinfo->arith_ac_K[i] = 5;
323 } 215 }
324 216
325 /* Default is no multiple-scan output */ 217 /* Default is no multiple-scan output */
326 cinfo->scan_info = NULL; 218 cinfo->scan_info = NULL;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 * will actually be written is determined by jpeg_set_colorspace. 256 * will actually be written is determined by jpeg_set_colorspace.
365 * 257 *
366 * By default, the library emits JFIF version code 1.01. 258 * By default, the library emits JFIF version code 1.01.
367 * An application that wants to emit JFIF 1.02 extension markers should set 259 * An application that wants to emit JFIF 1.02 extension markers should set
368 * JFIF_minor_version to 2. We could probably get away with just defaulting 260 * JFIF_minor_version to 2. We could probably get away with just defaulting
369 * to 1.02, but there may still be some decoders in use that will complain 261 * to 1.02, but there may still be some decoders in use that will complain
370 * about that; saying 1.01 should minimize compatibility problems. 262 * about that; saying 1.01 should minimize compatibility problems.
371 */ 263 */
372 cinfo->JFIF_major_version = 1; /* Default JFIF version = 1.01 */ 264 cinfo->JFIF_major_version = 1; /* Default JFIF version = 1.01 */
373 cinfo->JFIF_minor_version = 1; 265 cinfo->JFIF_minor_version = 1;
374 cinfo->density_unit = 0;» /* Pixel size is unknown by default */ 266 cinfo->density_unit = 0; /* Pixel size is unknown by default */
375 cinfo->X_density = 1;»» /* Pixel aspect ratio is square by default */ 267 cinfo->X_density = 1; /* Pixel aspect ratio is square by default */
376 cinfo->Y_density = 1; 268 cinfo->Y_density = 1;
377 269
378 /* Choose JPEG colorspace based on input space, set defaults accordingly */ 270 /* Choose JPEG colorspace based on input space, set defaults accordingly */
379 271
380 jpeg_default_colorspace(cinfo); 272 jpeg_default_colorspace(cinfo);
381 } 273 }
382 274
383 275
384 /* 276 /*
385 * Select an appropriate JPEG colorspace for in_color_space. 277 * Select an appropriate JPEG colorspace for in_color_space.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 } 315 }
424 316
425 317
426 /* 318 /*
427 * Set the JPEG colorspace, and choose colorspace-dependent default values. 319 * Set the JPEG colorspace, and choose colorspace-dependent default values.
428 */ 320 */
429 321
430 GLOBAL(void) 322 GLOBAL(void)
431 jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) 323 jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace)
432 { 324 {
433 jpeg_component_info * compptr; 325 jpeg_component_info *compptr;
434 int ci; 326 int ci;
435 327
436 #define SET_COMP(index,id,hsamp,vsamp,quant,dctbl,actbl) \ 328 #define SET_COMP(index,id,hsamp,vsamp,quant,dctbl,actbl) \
437 (compptr = &cinfo->comp_info[index], \ 329 (compptr = &cinfo->comp_info[index], \
438 compptr->component_id = (id), \ 330 compptr->component_id = (id), \
439 compptr->h_samp_factor = (hsamp), \ 331 compptr->h_samp_factor = (hsamp), \
440 compptr->v_samp_factor = (vsamp), \ 332 compptr->v_samp_factor = (vsamp), \
441 compptr->quant_tbl_no = (quant), \ 333 compptr->quant_tbl_no = (quant), \
442 compptr->dc_tbl_no = (dctbl), \ 334 compptr->dc_tbl_no = (dctbl), \
443 compptr->ac_tbl_no = (actbl) ) 335 compptr->ac_tbl_no = (actbl) )
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 cinfo->num_components = 4; 383 cinfo->num_components = 4;
492 SET_COMP(0, 1, 2,2, 0, 0,0); 384 SET_COMP(0, 1, 2,2, 0, 0,0);
493 SET_COMP(1, 2, 1,1, 1, 1,1); 385 SET_COMP(1, 2, 1,1, 1, 1,1);
494 SET_COMP(2, 3, 1,1, 1, 1,1); 386 SET_COMP(2, 3, 1,1, 1, 1,1);
495 SET_COMP(3, 4, 2,2, 0, 0,0); 387 SET_COMP(3, 4, 2,2, 0, 0,0);
496 break; 388 break;
497 case JCS_UNKNOWN: 389 case JCS_UNKNOWN:
498 cinfo->num_components = cinfo->input_components; 390 cinfo->num_components = cinfo->input_components;
499 if (cinfo->num_components < 1 || cinfo->num_components > MAX_COMPONENTS) 391 if (cinfo->num_components < 1 || cinfo->num_components > MAX_COMPONENTS)
500 ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, 392 ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components,
501 » MAX_COMPONENTS); 393 MAX_COMPONENTS);
502 for (ci = 0; ci < cinfo->num_components; ci++) { 394 for (ci = 0; ci < cinfo->num_components; ci++) {
503 SET_COMP(ci, ci, 1,1, 0, 0,0); 395 SET_COMP(ci, ci, 1,1, 0, 0,0);
504 } 396 }
505 break; 397 break;
506 default: 398 default:
507 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); 399 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
508 } 400 }
509 } 401 }
510 402
511 403
512 #ifdef C_PROGRESSIVE_SUPPORTED 404 #ifdef C_PROGRESSIVE_SUPPORTED
513 405
514 LOCAL(jpeg_scan_info *) 406 LOCAL(jpeg_scan_info *)
515 fill_a_scan (jpeg_scan_info * scanptr, int ci, 407 fill_a_scan (jpeg_scan_info *scanptr, int ci,
516 » int Ss, int Se, int Ah, int Al) 408 int Ss, int Se, int Ah, int Al)
517 /* Support routine: generate one scan for specified component */ 409 /* Support routine: generate one scan for specified component */
518 { 410 {
519 scanptr->comps_in_scan = 1; 411 scanptr->comps_in_scan = 1;
520 scanptr->component_index[0] = ci; 412 scanptr->component_index[0] = ci;
521 scanptr->Ss = Ss; 413 scanptr->Ss = Ss;
522 scanptr->Se = Se; 414 scanptr->Se = Se;
523 scanptr->Ah = Ah; 415 scanptr->Ah = Ah;
524 scanptr->Al = Al; 416 scanptr->Al = Al;
525 scanptr++; 417 scanptr++;
526 return scanptr; 418 return scanptr;
527 } 419 }
528 420
529 LOCAL(jpeg_scan_info *) 421 LOCAL(jpeg_scan_info *)
530 fill_scans (jpeg_scan_info * scanptr, int ncomps, 422 fill_scans (jpeg_scan_info *scanptr, int ncomps,
531 » int Ss, int Se, int Ah, int Al) 423 int Ss, int Se, int Ah, int Al)
532 /* Support routine: generate one scan for each component */ 424 /* Support routine: generate one scan for each component */
533 { 425 {
534 int ci; 426 int ci;
535 427
536 for (ci = 0; ci < ncomps; ci++) { 428 for (ci = 0; ci < ncomps; ci++) {
537 scanptr->comps_in_scan = 1; 429 scanptr->comps_in_scan = 1;
538 scanptr->component_index[0] = ci; 430 scanptr->component_index[0] = ci;
539 scanptr->Ss = Ss; 431 scanptr->Ss = Ss;
540 scanptr->Se = Se; 432 scanptr->Se = Se;
541 scanptr->Ah = Ah; 433 scanptr->Ah = Ah;
542 scanptr->Al = Al; 434 scanptr->Al = Al;
543 scanptr++; 435 scanptr++;
544 } 436 }
545 return scanptr; 437 return scanptr;
546 } 438 }
547 439
548 LOCAL(jpeg_scan_info *) 440 LOCAL(jpeg_scan_info *)
549 fill_dc_scans (jpeg_scan_info * scanptr, int ncomps, int Ah, int Al) 441 fill_dc_scans (jpeg_scan_info *scanptr, int ncomps, int Ah, int Al)
550 /* Support routine: generate interleaved DC scan if possible, else N scans */ 442 /* Support routine: generate interleaved DC scan if possible, else N scans */
551 { 443 {
552 int ci; 444 int ci;
553 445
554 if (ncomps <= MAX_COMPS_IN_SCAN) { 446 if (ncomps <= MAX_COMPS_IN_SCAN) {
555 /* Single interleaved DC scan */ 447 /* Single interleaved DC scan */
556 scanptr->comps_in_scan = ncomps; 448 scanptr->comps_in_scan = ncomps;
557 for (ci = 0; ci < ncomps; ci++) 449 for (ci = 0; ci < ncomps; ci++)
558 scanptr->component_index[ci] = ci; 450 scanptr->component_index[ci] = ci;
559 scanptr->Ss = scanptr->Se = 0; 451 scanptr->Ss = scanptr->Se = 0;
(...skipping 11 matching lines...) Expand all
571 /* 463 /*
572 * Create a recommended progressive-JPEG script. 464 * Create a recommended progressive-JPEG script.
573 * cinfo->num_components and cinfo->jpeg_color_space must be correct. 465 * cinfo->num_components and cinfo->jpeg_color_space must be correct.
574 */ 466 */
575 467
576 GLOBAL(void) 468 GLOBAL(void)
577 jpeg_simple_progression (j_compress_ptr cinfo) 469 jpeg_simple_progression (j_compress_ptr cinfo)
578 { 470 {
579 int ncomps = cinfo->num_components; 471 int ncomps = cinfo->num_components;
580 int nscans; 472 int nscans;
581 jpeg_scan_info * scanptr; 473 jpeg_scan_info *scanptr;
582 474
583 /* Safety check to ensure start_compress not called yet. */ 475 /* Safety check to ensure start_compress not called yet. */
584 if (cinfo->global_state != CSTATE_START) 476 if (cinfo->global_state != CSTATE_START)
585 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); 477 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
586 478
587 /* Figure space needed for script. Calculation must match code below! */ 479 /* Figure space needed for script. Calculation must match code below! */
588 if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) { 480 if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) {
589 /* Custom script for YCbCr color images. */ 481 /* Custom script for YCbCr color images. */
590 nscans = 10; 482 nscans = 10;
591 } else { 483 } else {
592 /* All-purpose script for other color spaces. */ 484 /* All-purpose script for other color spaces. */
593 if (ncomps > MAX_COMPS_IN_SCAN) 485 if (ncomps > MAX_COMPS_IN_SCAN)
594 nscans = 6 * ncomps;» /* 2 DC + 4 AC scans per component */ 486 nscans = 6 * ncomps; /* 2 DC + 4 AC scans per component */
595 else 487 else
596 nscans = 2 + 4 * ncomps;» /* 2 DC scans; 4 AC scans per component */ 488 nscans = 2 + 4 * ncomps; /* 2 DC scans; 4 AC scans per component */
597 } 489 }
598 490
599 /* Allocate space for script. 491 /* Allocate space for script.
600 * We need to put it in the permanent pool in case the application performs 492 * We need to put it in the permanent pool in case the application performs
601 * multiple compressions without changing the settings. To avoid a memory 493 * multiple compressions without changing the settings. To avoid a memory
602 * leak if jpeg_simple_progression is called repeatedly for the same JPEG 494 * leak if jpeg_simple_progression is called repeatedly for the same JPEG
603 * object, we try to re-use previously allocated space, and we allocate 495 * object, we try to re-use previously allocated space, and we allocate
604 * enough space to handle YCbCr even if initially asked for grayscale. 496 * enough space to handle YCbCr even if initially asked for grayscale.
605 */ 497 */
606 if (cinfo->script_space == NULL || cinfo->script_space_size < nscans) { 498 if (cinfo->script_space == NULL || cinfo->script_space_size < nscans) {
607 cinfo->script_space_size = MAX(nscans, 10); 499 cinfo->script_space_size = MAX(nscans, 10);
608 cinfo->script_space = (jpeg_scan_info *) 500 cinfo->script_space = (jpeg_scan_info *)
609 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, 501 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
610 » » » cinfo->script_space_size * SIZEOF(jpeg_scan_info)); 502 cinfo->script_space_size * sizeof(jpeg_scan_info));
611 } 503 }
612 scanptr = cinfo->script_space; 504 scanptr = cinfo->script_space;
613 cinfo->scan_info = scanptr; 505 cinfo->scan_info = scanptr;
614 cinfo->num_scans = nscans; 506 cinfo->num_scans = nscans;
615 507
616 if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) { 508 if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) {
617 /* Custom script for YCbCr color images. */ 509 /* Custom script for YCbCr color images. */
618 /* Initial DC scan */ 510 /* Initial DC scan */
619 scanptr = fill_dc_scans(scanptr, ncomps, 0, 1); 511 scanptr = fill_dc_scans(scanptr, ncomps, 0, 1);
620 /* Initial AC scan: get some luma data out in a hurry */ 512 /* Initial AC scan: get some luma data out in a hurry */
(...skipping 20 matching lines...) Expand all
641 scanptr = fill_scans(scanptr, ncomps, 6, 63, 0, 2); 533 scanptr = fill_scans(scanptr, ncomps, 6, 63, 0, 2);
642 /* Successive approximation second pass */ 534 /* Successive approximation second pass */
643 scanptr = fill_scans(scanptr, ncomps, 1, 63, 2, 1); 535 scanptr = fill_scans(scanptr, ncomps, 1, 63, 2, 1);
644 /* Successive approximation final pass */ 536 /* Successive approximation final pass */
645 scanptr = fill_dc_scans(scanptr, ncomps, 1, 0); 537 scanptr = fill_dc_scans(scanptr, ncomps, 1, 0);
646 scanptr = fill_scans(scanptr, ncomps, 1, 63, 1, 0); 538 scanptr = fill_scans(scanptr, ncomps, 1, 63, 1, 0);
647 } 539 }
648 } 540 }
649 541
650 #endif /* C_PROGRESSIVE_SUPPORTED */ 542 #endif /* C_PROGRESSIVE_SUPPORTED */
OLDNEW
« no previous file with comments | « jconfigint.h.in ('k') | jcphuff.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698