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

Side by Side Diff: jddctmgr.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 | « jdct.h ('k') | jdhuff.h » ('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 * jddctmgr.c 2 * jddctmgr.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) 1994-1996, Thomas G. Lane. 5 * Copyright (C) 1994-1996, Thomas G. Lane.
6 * Modified 2002-2010 by Guido Vollbeding. 6 * Modified 2002-2010 by Guido Vollbeding.
7 * libjpeg-turbo Modifications: 7 * libjpeg-turbo Modifications:
8 * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB 8 * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
9 * Copyright (C) 2010, D. R. Commander. 9 * Copyright (C) 2010, 2015, D. R. Commander.
10 * For conditions of distribution and use, see the accompanying README file. 10 * Copyright (C) 2013, MIPS Technologies, Inc., California
11 * For conditions of distribution and use, see the accompanying README.ijg
12 * file.
11 * 13 *
12 * This file contains the inverse-DCT management logic. 14 * This file contains the inverse-DCT management logic.
13 * This code selects a particular IDCT implementation to be used, 15 * This code selects a particular IDCT implementation to be used,
14 * and it performs related housekeeping chores. No code in this file 16 * and it performs related housekeeping chores. No code in this file
15 * is executed per IDCT step, only during output pass setup. 17 * is executed per IDCT step, only during output pass setup.
16 * 18 *
17 * Note that the IDCT routines are responsible for performing coefficient 19 * Note that the IDCT routines are responsible for performing coefficient
18 * dequantization as well as the IDCT proper. This module sets up the 20 * dequantization as well as the IDCT proper. This module sets up the
19 * dequantization multiplier table needed by the IDCT routine. 21 * dequantization multiplier table needed by the IDCT routine.
20 */ 22 */
21 23
22 #define JPEG_INTERNALS 24 #define JPEG_INTERNALS
23 #include "jinclude.h" 25 #include "jinclude.h"
24 #include "jpeglib.h" 26 #include "jpeglib.h"
25 #include "jdct.h"» » /* Private declarations for DCT subsystem */ 27 #include "jdct.h" /* Private declarations for DCT subsystem */
26 #include "jsimddct.h" 28 #include "jsimddct.h"
27 #include "jpegcomp.h" 29 #include "jpegcomp.h"
28 30
29 31
30 /* 32 /*
31 * The decompressor input side (jdinput.c) saves away the appropriate 33 * The decompressor input side (jdinput.c) saves away the appropriate
32 * quantization table for each component at the start of the first scan 34 * quantization table for each component at the start of the first scan
33 * involving that component. (This is necessary in order to correctly 35 * involving that component. (This is necessary in order to correctly
34 * decode files that reuse Q-table slots.) 36 * decode files that reuse Q-table slots.)
35 * When we are ready to make an output pass, the saved Q-table is converted 37 * When we are ready to make an output pass, the saved Q-table is converted
36 * to a multiplier table that will actually be used by the IDCT routine. 38 * to a multiplier table that will actually be used by the IDCT routine.
37 * The multiplier table contents are IDCT-method-dependent. To support 39 * The multiplier table contents are IDCT-method-dependent. To support
38 * application changes in IDCT method between scans, we can remake the 40 * application changes in IDCT method between scans, we can remake the
39 * multiplier tables if necessary. 41 * multiplier tables if necessary.
40 * In buffered-image mode, the first output pass may occur before any data 42 * In buffered-image mode, the first output pass may occur before any data
41 * has been seen for some components, and thus before their Q-tables have 43 * has been seen for some components, and thus before their Q-tables have
42 * been saved away. To handle this case, multiplier tables are preset 44 * been saved away. To handle this case, multiplier tables are preset
43 * to zeroes; the result of the IDCT will be a neutral gray level. 45 * to zeroes; the result of the IDCT will be a neutral gray level.
44 */ 46 */
45 47
46 48
47 /* Private subobject for this module */ 49 /* Private subobject for this module */
48 50
49 typedef struct { 51 typedef struct {
50 struct jpeg_inverse_dct pub;» /* public fields */ 52 struct jpeg_inverse_dct pub; /* public fields */
51 53
52 /* This array contains the IDCT method code that each multiplier table 54 /* This array contains the IDCT method code that each multiplier table
53 * is currently set up for, or -1 if it's not yet set up. 55 * is currently set up for, or -1 if it's not yet set up.
54 * The actual multiplier tables are pointed to by dct_table in the 56 * The actual multiplier tables are pointed to by dct_table in the
55 * per-component comp_info structures. 57 * per-component comp_info structures.
56 */ 58 */
57 int cur_method[MAX_COMPONENTS]; 59 int cur_method[MAX_COMPONENTS];
58 } my_idct_controller; 60 } my_idct_controller;
59 61
60 typedef my_idct_controller * my_idct_ptr; 62 typedef my_idct_controller *my_idct_ptr;
61 63
62 64
63 /* Allocated multiplier tables: big enough for any supported variant */ 65 /* Allocated multiplier tables: big enough for any supported variant */
64 66
65 typedef union { 67 typedef union {
66 ISLOW_MULT_TYPE islow_array[DCTSIZE2]; 68 ISLOW_MULT_TYPE islow_array[DCTSIZE2];
67 #ifdef DCT_IFAST_SUPPORTED 69 #ifdef DCT_IFAST_SUPPORTED
68 IFAST_MULT_TYPE ifast_array[DCTSIZE2]; 70 IFAST_MULT_TYPE ifast_array[DCTSIZE2];
69 #endif 71 #endif
70 #ifdef DCT_FLOAT_SUPPORTED 72 #ifdef DCT_FLOAT_SUPPORTED
(...skipping 21 matching lines...) Expand all
92 */ 94 */
93 95
94 METHODDEF(void) 96 METHODDEF(void)
95 start_pass (j_decompress_ptr cinfo) 97 start_pass (j_decompress_ptr cinfo)
96 { 98 {
97 my_idct_ptr idct = (my_idct_ptr) cinfo->idct; 99 my_idct_ptr idct = (my_idct_ptr) cinfo->idct;
98 int ci, i; 100 int ci, i;
99 jpeg_component_info *compptr; 101 jpeg_component_info *compptr;
100 int method = 0; 102 int method = 0;
101 inverse_DCT_method_ptr method_ptr = NULL; 103 inverse_DCT_method_ptr method_ptr = NULL;
102 JQUANT_TBL * qtbl; 104 JQUANT_TBL *qtbl;
103 105
104 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; 106 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
105 ci++, compptr++) { 107 ci++, compptr++) {
106 /* Select the proper IDCT routine for this component's scaling */ 108 /* Select the proper IDCT routine for this component's scaling */
107 switch (compptr->_DCT_scaled_size) { 109 switch (compptr->_DCT_scaled_size) {
108 #ifdef IDCT_SCALING_SUPPORTED 110 #ifdef IDCT_SCALING_SUPPORTED
109 case 1: 111 case 1:
110 method_ptr = jpeg_idct_1x1; 112 method_ptr = jpeg_idct_1x1;
111 method = JDCT_ISLOW;» /* jidctred uses islow-style table */ 113 method = JDCT_ISLOW; /* jidctred uses islow-style table */
112 break; 114 break;
113 case 2: 115 case 2:
114 if (jsimd_can_idct_2x2()) 116 if (jsimd_can_idct_2x2())
115 method_ptr = jsimd_idct_2x2; 117 method_ptr = jsimd_idct_2x2;
116 else 118 else
117 method_ptr = jpeg_idct_2x2; 119 method_ptr = jpeg_idct_2x2;
118 method = JDCT_ISLOW;» /* jidctred uses islow-style table */ 120 method = JDCT_ISLOW; /* jidctred uses islow-style table */
119 break; 121 break;
120 case 3: 122 case 3:
121 method_ptr = jpeg_idct_3x3; 123 method_ptr = jpeg_idct_3x3;
122 method = JDCT_ISLOW;» /* jidctint uses islow-style table */ 124 method = JDCT_ISLOW; /* jidctint uses islow-style table */
123 break; 125 break;
124 case 4: 126 case 4:
125 if (jsimd_can_idct_4x4()) 127 if (jsimd_can_idct_4x4())
126 method_ptr = jsimd_idct_4x4; 128 method_ptr = jsimd_idct_4x4;
127 else 129 else
128 method_ptr = jpeg_idct_4x4; 130 method_ptr = jpeg_idct_4x4;
129 method = JDCT_ISLOW;» /* jidctred uses islow-style table */ 131 method = JDCT_ISLOW; /* jidctred uses islow-style table */
130 break; 132 break;
131 case 5: 133 case 5:
132 method_ptr = jpeg_idct_5x5; 134 method_ptr = jpeg_idct_5x5;
133 method = JDCT_ISLOW;» /* jidctint uses islow-style table */ 135 method = JDCT_ISLOW; /* jidctint uses islow-style table */
134 break; 136 break;
135 case 6: 137 case 6:
138 #if defined(__mips__)
139 if (jsimd_can_idct_6x6())
140 method_ptr = jsimd_idct_6x6;
141 else
142 #endif
136 method_ptr = jpeg_idct_6x6; 143 method_ptr = jpeg_idct_6x6;
137 method = JDCT_ISLOW;» /* jidctint uses islow-style table */ 144 method = JDCT_ISLOW; /* jidctint uses islow-style table */
138 break; 145 break;
139 case 7: 146 case 7:
140 method_ptr = jpeg_idct_7x7; 147 method_ptr = jpeg_idct_7x7;
141 method = JDCT_ISLOW;» /* jidctint uses islow-style table */ 148 method = JDCT_ISLOW; /* jidctint uses islow-style table */
142 break; 149 break;
143 #endif 150 #endif
144 case DCTSIZE: 151 case DCTSIZE:
145 switch (cinfo->dct_method) { 152 switch (cinfo->dct_method) {
146 #ifdef DCT_ISLOW_SUPPORTED 153 #ifdef DCT_ISLOW_SUPPORTED
147 case JDCT_ISLOW: 154 case JDCT_ISLOW:
148 » if (jsimd_can_idct_islow()) 155 if (jsimd_can_idct_islow())
149 » method_ptr = jsimd_idct_islow; 156 method_ptr = jsimd_idct_islow;
150 » else 157 else
151 » method_ptr = jpeg_idct_islow; 158 method_ptr = jpeg_idct_islow;
152 » method = JDCT_ISLOW; 159 method = JDCT_ISLOW;
153 » break; 160 break;
154 #endif 161 #endif
155 #ifdef DCT_IFAST_SUPPORTED 162 #ifdef DCT_IFAST_SUPPORTED
156 case JDCT_IFAST: 163 case JDCT_IFAST:
157 » if (jsimd_can_idct_ifast()) 164 if (jsimd_can_idct_ifast())
158 » method_ptr = jsimd_idct_ifast; 165 method_ptr = jsimd_idct_ifast;
159 » else 166 else
160 » method_ptr = jpeg_idct_ifast; 167 method_ptr = jpeg_idct_ifast;
161 » method = JDCT_IFAST; 168 method = JDCT_IFAST;
162 » break; 169 break;
163 #endif 170 #endif
164 #ifdef DCT_FLOAT_SUPPORTED 171 #ifdef DCT_FLOAT_SUPPORTED
165 case JDCT_FLOAT: 172 case JDCT_FLOAT:
166 » if (jsimd_can_idct_float()) 173 if (jsimd_can_idct_float())
167 » method_ptr = jsimd_idct_float; 174 method_ptr = jsimd_idct_float;
168 » else 175 else
169 » method_ptr = jpeg_idct_float; 176 method_ptr = jpeg_idct_float;
170 » method = JDCT_FLOAT; 177 method = JDCT_FLOAT;
171 » break; 178 break;
172 #endif 179 #endif
173 default: 180 default:
174 » ERREXIT(cinfo, JERR_NOT_COMPILED); 181 ERREXIT(cinfo, JERR_NOT_COMPILED);
175 » break; 182 break;
176 } 183 }
177 break; 184 break;
185 #ifdef IDCT_SCALING_SUPPORTED
178 case 9: 186 case 9:
179 method_ptr = jpeg_idct_9x9; 187 method_ptr = jpeg_idct_9x9;
180 method = JDCT_ISLOW;» /* jidctint uses islow-style table */ 188 method = JDCT_ISLOW; /* jidctint uses islow-style table */
181 break; 189 break;
182 case 10: 190 case 10:
183 method_ptr = jpeg_idct_10x10; 191 method_ptr = jpeg_idct_10x10;
184 method = JDCT_ISLOW;» /* jidctint uses islow-style table */ 192 method = JDCT_ISLOW; /* jidctint uses islow-style table */
185 break; 193 break;
186 case 11: 194 case 11:
187 method_ptr = jpeg_idct_11x11; 195 method_ptr = jpeg_idct_11x11;
188 method = JDCT_ISLOW;» /* jidctint uses islow-style table */ 196 method = JDCT_ISLOW; /* jidctint uses islow-style table */
189 break; 197 break;
190 case 12: 198 case 12:
199 #if defined(__mips__)
200 if (jsimd_can_idct_12x12())
201 method_ptr = jsimd_idct_12x12;
202 else
203 #endif
191 method_ptr = jpeg_idct_12x12; 204 method_ptr = jpeg_idct_12x12;
192 method = JDCT_ISLOW;» /* jidctint uses islow-style table */ 205 method = JDCT_ISLOW; /* jidctint uses islow-style table */
193 break; 206 break;
194 case 13: 207 case 13:
195 method_ptr = jpeg_idct_13x13; 208 method_ptr = jpeg_idct_13x13;
196 method = JDCT_ISLOW;» /* jidctint uses islow-style table */ 209 method = JDCT_ISLOW; /* jidctint uses islow-style table */
197 break; 210 break;
198 case 14: 211 case 14:
199 method_ptr = jpeg_idct_14x14; 212 method_ptr = jpeg_idct_14x14;
200 method = JDCT_ISLOW;» /* jidctint uses islow-style table */ 213 method = JDCT_ISLOW; /* jidctint uses islow-style table */
201 break; 214 break;
202 case 15: 215 case 15:
203 method_ptr = jpeg_idct_15x15; 216 method_ptr = jpeg_idct_15x15;
204 method = JDCT_ISLOW;» /* jidctint uses islow-style table */ 217 method = JDCT_ISLOW; /* jidctint uses islow-style table */
205 break; 218 break;
206 case 16: 219 case 16:
207 method_ptr = jpeg_idct_16x16; 220 method_ptr = jpeg_idct_16x16;
208 method = JDCT_ISLOW;» /* jidctint uses islow-style table */ 221 method = JDCT_ISLOW; /* jidctint uses islow-style table */
209 break; 222 break;
223 #endif
210 default: 224 default:
211 ERREXIT1(cinfo, JERR_BAD_DCTSIZE, compptr->_DCT_scaled_size); 225 ERREXIT1(cinfo, JERR_BAD_DCTSIZE, compptr->_DCT_scaled_size);
212 break; 226 break;
213 } 227 }
214 idct->pub.inverse_DCT[ci] = method_ptr; 228 idct->pub.inverse_DCT[ci] = method_ptr;
215 /* Create multiplier table from quant table. 229 /* Create multiplier table from quant table.
216 * However, we can skip this if the component is uninteresting 230 * However, we can skip this if the component is uninteresting
217 * or if we already built the table. Also, if no quant table 231 * or if we already built the table. Also, if no quant table
218 * has yet been saved for the component, we leave the 232 * has yet been saved for the component, we leave the
219 * multiplier table all-zero; we'll be reading zeroes from the 233 * multiplier table all-zero; we'll be reading zeroes from the
220 * coefficient controller's buffer anyway. 234 * coefficient controller's buffer anyway.
221 */ 235 */
222 if (! compptr->component_needed || idct->cur_method[ci] == method) 236 if (! compptr->component_needed || idct->cur_method[ci] == method)
223 continue; 237 continue;
224 qtbl = compptr->quant_table; 238 qtbl = compptr->quant_table;
225 if (qtbl == NULL)» » /* happens if no data yet for component */ 239 if (qtbl == NULL) /* happens if no data yet for component */
226 continue; 240 continue;
227 idct->cur_method[ci] = method; 241 idct->cur_method[ci] = method;
228 switch (method) { 242 switch (method) {
229 #ifdef PROVIDE_ISLOW_TABLES 243 #ifdef PROVIDE_ISLOW_TABLES
230 case JDCT_ISLOW: 244 case JDCT_ISLOW:
231 { 245 {
232 » /* For LL&M IDCT method, multipliers are equal to raw quantization 246 /* For LL&M IDCT method, multipliers are equal to raw quantization
233 » * coefficients, but are stored as ints to ensure access efficiency. 247 * coefficients, but are stored as ints to ensure access efficiency.
234 » */ 248 */
235 » ISLOW_MULT_TYPE * ismtbl = (ISLOW_MULT_TYPE *) compptr->dct_table; 249 ISLOW_MULT_TYPE *ismtbl = (ISLOW_MULT_TYPE *) compptr->dct_table;
236 » for (i = 0; i < DCTSIZE2; i++) { 250 for (i = 0; i < DCTSIZE2; i++) {
237 » ismtbl[i] = (ISLOW_MULT_TYPE) qtbl->quantval[i]; 251 ismtbl[i] = (ISLOW_MULT_TYPE) qtbl->quantval[i];
238 » } 252 }
239 } 253 }
240 break; 254 break;
241 #endif 255 #endif
242 #ifdef DCT_IFAST_SUPPORTED 256 #ifdef DCT_IFAST_SUPPORTED
243 case JDCT_IFAST: 257 case JDCT_IFAST:
244 { 258 {
245 » /* For AA&N IDCT method, multipliers are equal to quantization 259 /* For AA&N IDCT method, multipliers are equal to quantization
246 » * coefficients scaled by scalefactor[row]*scalefactor[col], where 260 * coefficients scaled by scalefactor[row]*scalefactor[col], where
247 » * scalefactor[0] = 1 261 * scalefactor[0] = 1
248 » * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 262 * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7
249 » * For integer operation, the multiplier table is to be scaled by 263 * For integer operation, the multiplier table is to be scaled by
250 » * IFAST_SCALE_BITS. 264 * IFAST_SCALE_BITS.
251 » */ 265 */
252 » IFAST_MULT_TYPE * ifmtbl = (IFAST_MULT_TYPE *) compptr->dct_table; 266 IFAST_MULT_TYPE *ifmtbl = (IFAST_MULT_TYPE *) compptr->dct_table;
253 #define CONST_BITS 14 267 #define CONST_BITS 14
254 » static const INT16 aanscales[DCTSIZE2] = { 268 static const INT16 aanscales[DCTSIZE2] = {
255 » /* precomputed values scaled up by 14 bits */ 269 /* precomputed values scaled up by 14 bits */
256 » 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, 270 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520,
257 » 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270, 271 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270,
258 » 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906, 272 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906,
259 » 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315, 273 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315,
260 » 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, 274 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520,
261 » 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552, 275 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552,
262 » 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446, 276 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446,
263 » 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247 277 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247
264 » }; 278 };
265 » SHIFT_TEMPS 279 SHIFT_TEMPS
266 280
267 » for (i = 0; i < DCTSIZE2; i++) { 281 for (i = 0; i < DCTSIZE2; i++) {
268 » ifmtbl[i] = (IFAST_MULT_TYPE) 282 ifmtbl[i] = (IFAST_MULT_TYPE)
269 » DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], 283 DESCALE(MULTIPLY16V16((JLONG) qtbl->quantval[i],
270 » » » » (INT32) aanscales[i]), 284 (JLONG) aanscales[i]),
271 » » CONST_BITS-IFAST_SCALE_BITS); 285 CONST_BITS-IFAST_SCALE_BITS);
272 » } 286 }
273 } 287 }
274 break; 288 break;
275 #endif 289 #endif
276 #ifdef DCT_FLOAT_SUPPORTED 290 #ifdef DCT_FLOAT_SUPPORTED
277 case JDCT_FLOAT: 291 case JDCT_FLOAT:
278 { 292 {
279 » /* For float AA&N IDCT method, multipliers are equal to quantization 293 /* For float AA&N IDCT method, multipliers are equal to quantization
280 » * coefficients scaled by scalefactor[row]*scalefactor[col], where 294 * coefficients scaled by scalefactor[row]*scalefactor[col], where
281 » * scalefactor[0] = 1 295 * scalefactor[0] = 1
282 » * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 296 * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7
283 » */ 297 */
284 » FLOAT_MULT_TYPE * fmtbl = (FLOAT_MULT_TYPE *) compptr->dct_table; 298 FLOAT_MULT_TYPE *fmtbl = (FLOAT_MULT_TYPE *) compptr->dct_table;
285 » int row, col; 299 int row, col;
286 » static const double aanscalefactor[DCTSIZE] = { 300 static const double aanscalefactor[DCTSIZE] = {
287 » 1.0, 1.387039845, 1.306562965, 1.175875602, 301 1.0, 1.387039845, 1.306562965, 1.175875602,
288 » 1.0, 0.785694958, 0.541196100, 0.275899379 302 1.0, 0.785694958, 0.541196100, 0.275899379
289 » }; 303 };
290 304
291 » i = 0; 305 i = 0;
292 » for (row = 0; row < DCTSIZE; row++) { 306 for (row = 0; row < DCTSIZE; row++) {
293 » for (col = 0; col < DCTSIZE; col++) { 307 for (col = 0; col < DCTSIZE; col++) {
294 » fmtbl[i] = (FLOAT_MULT_TYPE) 308 fmtbl[i] = (FLOAT_MULT_TYPE)
295 » ((double) qtbl->quantval[i] * 309 ((double) qtbl->quantval[i] *
296 » aanscalefactor[row] * aanscalefactor[col]); 310 aanscalefactor[row] * aanscalefactor[col]);
297 » i++; 311 i++;
298 » } 312 }
299 » } 313 }
300 } 314 }
301 break; 315 break;
302 #endif 316 #endif
303 default: 317 default:
304 ERREXIT(cinfo, JERR_NOT_COMPILED); 318 ERREXIT(cinfo, JERR_NOT_COMPILED);
305 break; 319 break;
306 } 320 }
307 } 321 }
308 } 322 }
309 323
310 324
311 /* 325 /*
312 * Initialize IDCT manager. 326 * Initialize IDCT manager.
313 */ 327 */
314 328
315 GLOBAL(void) 329 GLOBAL(void)
316 jinit_inverse_dct (j_decompress_ptr cinfo) 330 jinit_inverse_dct (j_decompress_ptr cinfo)
317 { 331 {
318 my_idct_ptr idct; 332 my_idct_ptr idct;
319 int ci; 333 int ci;
320 jpeg_component_info *compptr; 334 jpeg_component_info *compptr;
321 335
322 idct = (my_idct_ptr) 336 idct = (my_idct_ptr)
323 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, 337 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
324 » » » » SIZEOF(my_idct_controller)); 338 sizeof(my_idct_controller));
325 cinfo->idct = (struct jpeg_inverse_dct *) idct; 339 cinfo->idct = (struct jpeg_inverse_dct *) idct;
326 idct->pub.start_pass = start_pass; 340 idct->pub.start_pass = start_pass;
327 341
328 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; 342 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
329 ci++, compptr++) { 343 ci++, compptr++) {
330 /* Allocate and pre-zero a multiplier table for each component */ 344 /* Allocate and pre-zero a multiplier table for each component */
331 compptr->dct_table = 345 compptr->dct_table =
332 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, 346 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
333 » » » » SIZEOF(multiplier_table)); 347 sizeof(multiplier_table));
334 MEMZERO(compptr->dct_table, SIZEOF(multiplier_table)); 348 MEMZERO(compptr->dct_table, sizeof(multiplier_table));
335 /* Mark multiplier table not yet set up for any method */ 349 /* Mark multiplier table not yet set up for any method */
336 idct->cur_method[ci] = -1; 350 idct->cur_method[ci] = -1;
337 } 351 }
338 } 352 }
OLDNEW
« no previous file with comments | « jdct.h ('k') | jdhuff.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698