COSMOS core  1.0.2 (beta)
Comprehensive Open-architecture Solution for Mission Operations Systems
jddctmgr.cpp File Reference
#include "jinclude.h"
#include "jpeglib.h"
#include "jdct.h"
Include dependency graph for jddctmgr.cpp:

Classes

struct  my_idct_controller
 
union  multiplier_table
 

Macros

#define JPEG_INTERNALS
 
#define PROVIDE_ISLOW_TABLES
 
#define CONST_BITS   14
 

Typedefs

typedef my_idct_controllermy_idct_ptr
 

Functions

static void start_pass (j_decompress_ptr cinfo)
 
void jinit_inverse_dct (j_decompress_ptr cinfo)
 

Macro Definition Documentation

#define JPEG_INTERNALS
#define PROVIDE_ISLOW_TABLES
#define CONST_BITS   14

Typedef Documentation

Function Documentation

static void start_pass ( j_decompress_ptr  cinfo)
static
90 {
91  my_idct_ptr idct = (my_idct_ptr) cinfo->idct;
92  int ci, i;
94  int method = 0;
95  inverse_DCT_method_ptr method_ptr = NULL;
96  JQUANT_TBL * qtbl;
97 
98  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
99  ci++, compptr++) {
100  /* Select the proper IDCT routine for this component's scaling */
101  switch (compptr->DCT_scaled_size) {
102 #ifdef IDCT_SCALING_SUPPORTED
103  case 1:
104  method_ptr = jpeg_idct_1x1;
105  method = JDCT_ISLOW; /* jidctred uses islow-style table */
106  break;
107  case 2:
108  method_ptr = jpeg_idct_2x2;
109  method = JDCT_ISLOW; /* jidctred uses islow-style table */
110  break;
111  case 4:
112  method_ptr = jpeg_idct_4x4;
113  method = JDCT_ISLOW; /* jidctred uses islow-style table */
114  break;
115 #endif
116  case DCTSIZE:
117  switch (cinfo->dct_method) {
118 #ifdef DCT_ISLOW_SUPPORTED
119  case JDCT_ISLOW:
120  method_ptr = jpeg_idct_islow;
121  method = JDCT_ISLOW;
122  break;
123 #endif
124 #ifdef DCT_IFAST_SUPPORTED
125  case JDCT_IFAST:
126  method_ptr = jpeg_idct_ifast;
127  method = JDCT_IFAST;
128  break;
129 #endif
130 #ifdef DCT_FLOAT_SUPPORTED
131  case JDCT_FLOAT:
132  method_ptr = jpeg_idct_float;
133  method = JDCT_FLOAT;
134  break;
135 #endif
136  default:
137  ERREXIT(cinfo, JERR_NOT_COMPILED);
138  break;
139  }
140  break;
141  default:
143  break;
144  }
145  idct->pub.inverse_DCT[ci] = method_ptr;
146  /* Create multiplier table from quant table.
147  * However, we can skip this if the component is uninteresting
148  * or if we already built the table. Also, if no quant table
149  * has yet been saved for the component, we leave the
150  * multiplier table all-zero; we'll be reading zeroes from the
151  * coefficient controller's buffer anyway.
152  */
153  if (! compptr->component_needed || idct->cur_method[ci] == method)
154  continue;
155  qtbl = compptr->quant_table;
156  if (qtbl == NULL) /* happens if no data yet for component */
157  continue;
158  idct->cur_method[ci] = method;
159  switch (method) {
160 #ifdef PROVIDE_ISLOW_TABLES
161  case JDCT_ISLOW:
162  {
163  /* For LL&M IDCT method, multipliers are equal to raw quantization
164  * coefficients, but are stored as ints to ensure access efficiency.
165  */
167  for (i = 0; i < DCTSIZE2; i++) {
168  ismtbl[i] = (ISLOW_MULT_TYPE) qtbl->quantval[i];
169  }
170  }
171  break;
172 #endif
173 #ifdef DCT_IFAST_SUPPORTED
174  case JDCT_IFAST:
175  {
176  /* For AA&N IDCT method, multipliers are equal to quantization
177  * coefficients scaled by scalefactor[row]*scalefactor[col], where
178  * scalefactor[0] = 1
179  * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7
180  * For integer operation, the multiplier table is to be scaled by
181  * IFAST_SCALE_BITS.
182  */
184 #define CONST_BITS 14
185  static const int16_t aanscales[DCTSIZE2] = {
186  /* precomputed values scaled up by 14 bits */
187  16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520,
188  22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270,
189  21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906,
190  19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315,
191  16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520,
192  12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552,
193  8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446,
194  4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247
195  };
197 
198  for (i = 0; i < DCTSIZE2; i++) {
199  ifmtbl[i] = (IFAST_MULT_TYPE)
200  DESCALE(MULTIPLY16V16((int32_t) qtbl->quantval[i],
201  (int32_t) aanscales[i]),
203  }
204  }
205  break;
206 #endif
207 #ifdef DCT_FLOAT_SUPPORTED
208  case JDCT_FLOAT:
209  {
210  /* For float AA&N IDCT method, multipliers are equal to quantization
211  * coefficients scaled by scalefactor[row]*scalefactor[col], where
212  * scalefactor[0] = 1
213  * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7
214  */
216  int row, col;
217  static const double aanscalefactor[DCTSIZE] = {
218  1.0, 1.387039845, 1.306562965, 1.175875602,
219  1.0, 0.785694958, 0.541196100, 0.275899379
220  };
221 
222  i = 0;
223  for (row = 0; row < DCTSIZE; row++) {
224  for (col = 0; col < DCTSIZE; col++) {
225  fmtbl[i] = (FLOAT_MULT_TYPE)
226  ((double) qtbl->quantval[i] *
227  aanscalefactor[row] * aanscalefactor[col]);
228  i++;
229  }
230  }
231  }
232  break;
233 #endif
234  default:
235  ERREXIT(cinfo, JERR_NOT_COMPILED);
236  break;
237  }
238  }
239 }
#define DESCALE(x, n)
Definition: jdct.h:146
void jpeg_idct_1x1(j_decompress_ptr cinfo, jpeg_component_info *compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)
Definition: jidctred.cpp:379
#define IFAST_SCALE_BITS
Definition: jdct.h:62
jpeg_component_info * comp_info
Definition: jpeglib.h:540
int i
Definition: rw_test.cpp:37
inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS]
Definition: jpegint.h:228
void * dct_table
Definition: jpeglib.h:183
void jpeg_idct_2x2(j_decompress_ptr cinfo, jpeg_component_info *compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)
Definition: jidctred.cpp:271
my_idct_controller * my_idct_ptr
Definition: jddctmgr.cpp:54
Definition: jddctmgr.cpp:43
Definition: jpeglib.h:88
int DCT_scaled_size
Definition: jpeglib.h:152
#define ERREXIT(cinfo, code)
Definition: jerror.h:205
boolean component_needed
Definition: jpeglib.h:165
#define SHIFT_TEMPS
Definition: jpegint.h:289
Definition: jpeglib.h:224
jpeg_component_info * compptr
Definition: jdct.h:102
int32_t IFAST_MULT_TYPE
Definition: jdct.h:61
void jpeg_idct_islow(j_decompress_ptr cinfo, jpeg_component_info *compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)
Definition: jidctint.cpp:148
void jpeg_idct_float(j_decompress_ptr cinfo, jpeg_component_info *compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)
Definition: jidctflt.cpp:68
Definition: jerror.h:95
#define DCTSIZE2
Definition: jpeglib.h:47
J_DCT_METHOD dct_method
Definition: jpeglib.h:444
MULTIPLIER ISLOW_MULT_TYPE
Definition: jdct.h:56
FAST_FLOAT FLOAT_MULT_TYPE
Definition: jdct.h:64
JQUANT_TBL * quant_table
Definition: jpeglib.h:180
#define ERREXIT1(cinfo, code, p1)
Definition: jerror.h:208
struct jpeg_inverse_dct pub
Definition: jddctmgr.cpp:44
Definition: jpeglib.h:121
Definition: jpeglib.h:225
#define DCTSIZE
Definition: jpeglib.h:46
void jpeg_idct_ifast(j_decompress_ptr cinfo, jpeg_component_info *compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)
Definition: jidctfst.cpp:168
int cur_method[10]
Definition: jddctmgr.cpp:51
struct jpeg_inverse_dct * idct
Definition: jpeglib.h:631
Definition: jerror.h:49
#define CONST_BITS
void jpeg_idct_4x4(j_decompress_ptr cinfo, jpeg_component_info *compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)
Definition: jidctred.cpp:118
Definition: jpeglib.h:223
#define MULTIPLY16V16(var1, var2)
Definition: jdct.h:175
void jinit_inverse_dct ( j_decompress_ptr  cinfo)
248 {
249  my_idct_ptr idct;
250  int ci;
252 
253  idct = (my_idct_ptr)
254  (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
256  cinfo->idct = (struct jpeg_inverse_dct *) idct;
257  idct->pub.start_pass = start_pass;
258 
259  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
260  ci++, compptr++) {
261  /* Allocate and pre-zero a multiplier table for each component */
262  compptr->dct_table =
263  (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
266  /* Mark multiplier table not yet set up for any method */
267  idct->cur_method[ci] = -1;
268  }
269 }
static void start_pass(j_decompress_ptr cinfo)
Definition: jddctmgr.cpp:89
jpeg_component_info * comp_info
Definition: jpeglib.h:540
struct jpeg_common_struct * j_common_ptr
Definition: jpeglib.h:266
void * dct_table
Definition: jpeglib.h:183
void *(* alloc_small)()
Definition: jpeglib.h:764
my_idct_controller * my_idct_ptr
Definition: jddctmgr.cpp:54
Definition: jddctmgr.cpp:43
Definition: jpeglib.h:258
#define SIZEOF(object)
Definition: jinclude.h:80
jpeg_component_info * compptr
Definition: jdct.h:102
#define JPOOL_IMAGE
Definition: jpeglib.h:754
struct jpeg_memory_mgr * mem
Definition: jpeglib.h:417
struct jpeg_inverse_dct pub
Definition: jddctmgr.cpp:44
Definition: jpeglib.h:121
Definition: jddctmgr.cpp:59
int cur_method[10]
Definition: jddctmgr.cpp:51
Definition: jpegint.h:225
struct jpeg_inverse_dct * idct
Definition: jpeglib.h:631
#define MEMZERO(target, size)
Definition: jinclude.h:67