ReactOS 0.4.16-dev-2617-g01a0906
jddctmgr.c File Reference
#include "jinclude.h"
#include "jpeglib.h"
#include "jdct.h"
Include dependency graph for jddctmgr.c:

Go to the source code of this file.

Classes

struct  my_idct_controller
 
union  multiplier_table
 

Macros

#define JPEG_INTERNALS
 

Typedefs

typedef my_idct_controllermy_idct_ptr
 

Functions

 start_pass (j_decompress_ptr cinfo)
 
 jinit_inverse_dct (j_decompress_ptr cinfo)
 

Macro Definition Documentation

◆ JPEG_INTERNALS

#define JPEG_INTERNALS

Definition at line 19 of file jddctmgr.c.

Typedef Documentation

◆ my_idct_ptr

Definition at line 55 of file jddctmgr.c.

Function Documentation

◆ jinit_inverse_dct()

jinit_inverse_dct ( j_decompress_ptr  cinfo)

Definition at line 376 of file jddctmgr.c.

377{
378 my_idct_ptr idct;
379 int ci;
381
382 idct = (my_idct_ptr) (*cinfo->mem->alloc_small)
384 cinfo->idct = &idct->pub;
385 idct->pub.start_pass = start_pass;
386
387 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
388 ci++, compptr++) {
389 /* Allocate and pre-zero a multiplier table for each component */
390 compptr->dct_table = (*cinfo->mem->alloc_small)
393 /* Mark multiplier table not yet set up for any method */
394 idct->cur_method[ci] = -1;
395 }
396}
#define SIZEOF(_ar)
Definition: calc.h:97
jpeg_component_info * compptr
Definition: jdct.h:252
start_pass(j_decompress_ptr cinfo)
Definition: jddctmgr.c:78
my_idct_controller * my_idct_ptr
Definition: jddctmgr.c:55
struct jpeg_common_struct * j_common_ptr
Definition: jpeglib.h:284
#define JPOOL_IMAGE
Definition: jpeglib.h:810
struct jpeg_inverse_dct * idct
Definition: jpeglib.h:687
jpeg_component_info * comp_info
Definition: jpeglib.h:584
int cur_method[MAX_COMPONENTS]
Definition: jddctmgr.c:52
struct jpeg_inverse_dct pub
Definition: jddctmgr.c:45
#define MEMZERO(addr, type, size)
Definition: svc_dg.c:324

Referenced by master_selection().

◆ start_pass()

start_pass ( j_decompress_ptr  cinfo)

Definition at line 78 of file jddctmgr.c.

79{
80 my_idct_ptr idct = (my_idct_ptr) cinfo->idct;
81 int ci, i;
83 int method = 0;
84 inverse_DCT_method_ptr method_ptr = NULL;
85 JQUANT_TBL * qtbl;
86
87 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
88 ci++, compptr++) {
89 /* Select the proper IDCT routine for this component's scaling */
91#ifdef IDCT_SCALING_SUPPORTED
92/*
93 * The current scaled-IDCT routines require ISLOW-style multiplier tables,
94 * so be sure to compile that code if either ISLOW or SCALING is requested.
95 */
96#ifndef PROVIDE_ISLOW_TABLES
97#define PROVIDE_ISLOW_TABLES
98#endif
99 case ((1 << 8) + 1):
100 method_ptr = jpeg_idct_1x1;
101 method = JDCT_ISLOW; /* jidctint uses islow-style table */
102 break;
103 case ((2 << 8) + 2):
104 method_ptr = jpeg_idct_2x2;
105 method = JDCT_ISLOW; /* jidctint uses islow-style table */
106 break;
107 case ((3 << 8) + 3):
108 method_ptr = jpeg_idct_3x3;
109 method = JDCT_ISLOW; /* jidctint uses islow-style table */
110 break;
111 case ((4 << 8) + 4):
112 method_ptr = jpeg_idct_4x4;
113 method = JDCT_ISLOW; /* jidctint uses islow-style table */
114 break;
115 case ((5 << 8) + 5):
116 method_ptr = jpeg_idct_5x5;
117 method = JDCT_ISLOW; /* jidctint uses islow-style table */
118 break;
119 case ((6 << 8) + 6):
120 method_ptr = jpeg_idct_6x6;
121 method = JDCT_ISLOW; /* jidctint uses islow-style table */
122 break;
123 case ((7 << 8) + 7):
124 method_ptr = jpeg_idct_7x7;
125 method = JDCT_ISLOW; /* jidctint uses islow-style table */
126 break;
127 case ((9 << 8) + 9):
128 method_ptr = jpeg_idct_9x9;
129 method = JDCT_ISLOW; /* jidctint uses islow-style table */
130 break;
131 case ((10 << 8) + 10):
132 method_ptr = jpeg_idct_10x10;
133 method = JDCT_ISLOW; /* jidctint uses islow-style table */
134 break;
135 case ((11 << 8) + 11):
136 method_ptr = jpeg_idct_11x11;
137 method = JDCT_ISLOW; /* jidctint uses islow-style table */
138 break;
139 case ((12 << 8) + 12):
140 method_ptr = jpeg_idct_12x12;
141 method = JDCT_ISLOW; /* jidctint uses islow-style table */
142 break;
143 case ((13 << 8) + 13):
144 method_ptr = jpeg_idct_13x13;
145 method = JDCT_ISLOW; /* jidctint uses islow-style table */
146 break;
147 case ((14 << 8) + 14):
148 method_ptr = jpeg_idct_14x14;
149 method = JDCT_ISLOW; /* jidctint uses islow-style table */
150 break;
151 case ((15 << 8) + 15):
152 method_ptr = jpeg_idct_15x15;
153 method = JDCT_ISLOW; /* jidctint uses islow-style table */
154 break;
155 case ((16 << 8) + 16):
156 method_ptr = jpeg_idct_16x16;
157 method = JDCT_ISLOW; /* jidctint uses islow-style table */
158 break;
159 case ((16 << 8) + 8):
160 method_ptr = jpeg_idct_16x8;
161 method = JDCT_ISLOW; /* jidctint uses islow-style table */
162 break;
163 case ((14 << 8) + 7):
164 method_ptr = jpeg_idct_14x7;
165 method = JDCT_ISLOW; /* jidctint uses islow-style table */
166 break;
167 case ((12 << 8) + 6):
168 method_ptr = jpeg_idct_12x6;
169 method = JDCT_ISLOW; /* jidctint uses islow-style table */
170 break;
171 case ((10 << 8) + 5):
172 method_ptr = jpeg_idct_10x5;
173 method = JDCT_ISLOW; /* jidctint uses islow-style table */
174 break;
175 case ((8 << 8) + 4):
176 method_ptr = jpeg_idct_8x4;
177 method = JDCT_ISLOW; /* jidctint uses islow-style table */
178 break;
179 case ((6 << 8) + 3):
180 method_ptr = jpeg_idct_6x3;
181 method = JDCT_ISLOW; /* jidctint uses islow-style table */
182 break;
183 case ((4 << 8) + 2):
184 method_ptr = jpeg_idct_4x2;
185 method = JDCT_ISLOW; /* jidctint uses islow-style table */
186 break;
187 case ((2 << 8) + 1):
188 method_ptr = jpeg_idct_2x1;
189 method = JDCT_ISLOW; /* jidctint uses islow-style table */
190 break;
191 case ((8 << 8) + 16):
192 method_ptr = jpeg_idct_8x16;
193 method = JDCT_ISLOW; /* jidctint uses islow-style table */
194 break;
195 case ((7 << 8) + 14):
196 method_ptr = jpeg_idct_7x14;
197 method = JDCT_ISLOW; /* jidctint uses islow-style table */
198 break;
199 case ((6 << 8) + 12):
200 method_ptr = jpeg_idct_6x12;
201 method = JDCT_ISLOW; /* jidctint uses islow-style table */
202 break;
203 case ((5 << 8) + 10):
204 method_ptr = jpeg_idct_5x10;
205 method = JDCT_ISLOW; /* jidctint uses islow-style table */
206 break;
207 case ((4 << 8) + 8):
208 method_ptr = jpeg_idct_4x8;
209 method = JDCT_ISLOW; /* jidctint uses islow-style table */
210 break;
211 case ((3 << 8) + 6):
212 method_ptr = jpeg_idct_3x6;
213 method = JDCT_ISLOW; /* jidctint uses islow-style table */
214 break;
215 case ((2 << 8) + 4):
216 method_ptr = jpeg_idct_2x4;
217 method = JDCT_ISLOW; /* jidctint uses islow-style table */
218 break;
219 case ((1 << 8) + 2):
220 method_ptr = jpeg_idct_1x2;
221 method = JDCT_ISLOW; /* jidctint uses islow-style table */
222 break;
223#endif
224 case ((DCTSIZE << 8) + DCTSIZE):
225 switch (cinfo->dct_method) {
226#ifdef DCT_ISLOW_SUPPORTED
227 case JDCT_ISLOW:
228#ifndef PROVIDE_ISLOW_TABLES
229#define PROVIDE_ISLOW_TABLES
230#endif
231 method_ptr = jpeg_idct_islow;
233 break;
234#endif
235#ifdef DCT_IFAST_SUPPORTED
236 case JDCT_IFAST:
237 method_ptr = jpeg_idct_ifast;
239 break;
240#endif
241#ifdef DCT_FLOAT_SUPPORTED
242 case JDCT_FLOAT:
243 method_ptr = jpeg_idct_float;
245 break;
246#endif
247 default:
248 ERREXIT(cinfo, JERR_NOT_COMPILED);
249 }
250 break;
251 default:
252 ERREXIT2(cinfo, JERR_BAD_DCTSIZE,
254 }
255 idct->pub.inverse_DCT[ci] = method_ptr;
256 /* Create multiplier table from quant table.
257 * However, we can skip this if the component is uninteresting
258 * or if we already built the table. Also, if no quant table
259 * has yet been saved for the component, we leave the
260 * multiplier table all-zero; we'll be reading zeroes
261 * from the coefficient controller's buffer anyway.
262 */
263 if (! compptr->component_needed || idct->cur_method[ci] == method)
264 continue;
265 qtbl = compptr->quant_table;
266 if (qtbl == NULL) /* happens if no data yet for component */
267 continue;
268 idct->cur_method[ci] = method;
269 switch (method) {
270#ifdef PROVIDE_ISLOW_TABLES
271 case JDCT_ISLOW:
272 {
273 /* For LL&M IDCT method, multipliers are equal to raw quantization
274 * coefficients, but are stored as ints to ensure access efficiency.
275 */
277 for (i = 0; i < DCTSIZE2; i++) {
278 ismtbl[i] = (ISLOW_MULT_TYPE) qtbl->quantval[i];
279 }
280 }
281 break;
282#endif
283#ifdef DCT_IFAST_SUPPORTED
284 case JDCT_IFAST:
285 {
286 /* For AA&N IDCT method, multipliers are equal to quantization
287 * coefficients scaled by scalefactor[row]*scalefactor[col], where
288 * scalefactor[0] = 1
289 * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7
290 * For integer operation, the multiplier table is to be scaled by
291 * IFAST_SCALE_BITS.
292 */
294#define CONST_BITS 14
295 static const INT16 aanscales[DCTSIZE2] = {
296 /* precomputed values scaled up by 14 bits */
297 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520,
298 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270,
299 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906,
300 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315,
301 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520,
302 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552,
303 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446,
304 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247
305 };
307
308 for (i = 0; i < DCTSIZE2; i++) {
309 ifmtbl[i] = (IFAST_MULT_TYPE)
310 DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i],
311 (INT32) aanscales[i]),
312 CONST_BITS-IFAST_SCALE_BITS);
313 }
314 }
315 break;
316#endif
317#ifdef DCT_FLOAT_SUPPORTED
318 case JDCT_FLOAT:
319 {
320 /* For float AA&N IDCT method, multipliers are equal to quantization
321 * coefficients scaled by scalefactor[row]*scalefactor[col], where
322 * scalefactor[0] = 1
323 * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7
324 * We apply a further scale factor of 1/8
325 * with adjustment if necessary.
326 */
328 int row, col;
329 static const double aanscalefactor[DCTSIZE] = {
330 1.0, 1.387039845, 1.306562965, 1.175875602,
331 1.0, 0.785694958, 0.541196100, 0.275899379
332 };
333#if JPEG_DATA_PRECISION == BITS_IN_JSAMPLE
334
335 i = 0;
336 for (row = 0; row < DCTSIZE; row++) {
337 for (col = 0; col < DCTSIZE; col++) {
338 fmtbl[i] = (FLOAT_MULT_TYPE) ((double) qtbl->quantval[i] *
339 aanscalefactor[row] * aanscalefactor[col] * 0.125);
340#else
341 double extrafactor = 0.125;
342
343 /* Adjust extra factor */
344#if JPEG_DATA_PRECISION < BITS_IN_JSAMPLE
346 do { extrafactor *= 2.0; } while (--i);
347#else
349 do { extrafactor *= 0.5; } while (--i);
350#endif
351
352 i = 0;
353 for (row = 0; row < DCTSIZE; row++) {
354 for (col = 0; col < DCTSIZE; col++) {
355 fmtbl[i] = (FLOAT_MULT_TYPE) ((double) qtbl->quantval[i] *
356 aanscalefactor[row] * aanscalefactor[col] * extrafactor);
357#endif
358 i++;
359 }
360 }
361 }
362 break;
363#endif
364 default:
365 ERREXIT(cinfo, JERR_NOT_COMPILED);
366 }
367 }
368}
short INT16
Definition: actypes.h:130
#define NULL
Definition: types.h:112
struct png_info_def *typedef unsigned char **typedef struct png_info_def *typedef struct png_info_def *typedef struct png_info_def *typedef unsigned char ** row
Definition: typeof.h:78
method
Definition: dragdrop.c:54
for(i=0;i< ARRAY_SIZE(offsets);i++)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
MULTIPLIER ISLOW_MULT_TYPE
Definition: jdct.h:79
MULTIPLIER IFAST_MULT_TYPE
Definition: jdct.h:81
#define MULTIPLY16V16(var1, var2)
Definition: jdct.h:402
#define IFAST_SCALE_BITS
Definition: jdct.h:82
FAST_FLOAT FLOAT_MULT_TYPE
Definition: jdct.h:88
#define ERREXIT2(cinfo, code, p1, p2)
Definition: jerror.h:216
#define JPEG_DATA_PRECISION
Definition: jmorecfg.h:15
#define BITS_IN_JSAMPLE
Definition: jmorecfg.h:16
#define SHIFT_TEMPS
Definition: jpegint.h:300
#define DESCALE(x, n)
Definition: jpegint.h:309
#define DCTSIZE
Definition: jpeglib.h:50
@ JDCT_IFAST
Definition: jpeglib.h:242
@ JDCT_FLOAT
Definition: jpeglib.h:243
@ JDCT_ISLOW
Definition: jpeglib.h:241
#define DCTSIZE2
Definition: jpeglib.h:51
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
boolean component_needed
Definition: jpeglib.h:174
JQUANT_TBL * quant_table
Definition: jpeglib.h:189
J_DCT_METHOD dct_method
Definition: jpeglib.h:488
int32_t INT32
Definition: typedefs.h:58

Referenced by jinit_inverse_dct().