xref: /utopia/UTPA2-700.0.x/modules/ojpd_vdec_v1/api/jpeg/cmodel/src/jidctint.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 //    Software and any modification/derivatives thereof.
18 //    No right, ownership, or interest to MStar Software and any
19 //    modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 //    supplied together with third party`s software and the use of MStar
23 //    Software may require additional licenses from third parties.
24 //    Therefore, you hereby agree it is your sole responsibility to separately
25 //    obtain any and all third party right and license necessary for your use of
26 //    such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 //    MStar`s confidential information and you agree to keep MStar`s
30 //    confidential information in strictest confidence and not disclose to any
31 //    third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35 //    without limitation, any warranties of merchantability, non-infringement of
36 //    intellectual property rights, fitness for a particular purpose, error free
37 //    and in conformity with any international standard.  You agree to waive any
38 //    claim against MStar for any loss, damage, cost or expense that you may
39 //    incur related to your use of MStar Software.
40 //    In no event shall MStar be liable for any direct, indirect, incidental or
41 //    consequential damages, including without limitation, lost of profit or
42 //    revenues, lost or damage of data, and unauthorized system use.
43 //    You agree that this Section 4 shall still apply without being affected
44 //    even if MStar Software has been modified by MStar in accordance with your
45 //    request or instruction for your use, except otherwise agreed by both
46 //    parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 //    services in relation with MStar Software to you for your use of
50 //    MStar Software in conjunction with your or your customer`s product
51 //    ("Services").
52 //    You understand and agree that, except otherwise agreed by both parties in
53 //    writing, Services are provided on an "AS IS" basis and the warranty
54 //    disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 //    or otherwise:
58 //    (a) conferring any license or right to use MStar name, trademark, service
59 //        mark, symbol or any other identification;
60 //    (b) obligating MStar or any of its affiliates to furnish any person,
61 //        including without limitation, you and your customers, any assistance
62 //        of any kind whatsoever, or any information; or
63 //    (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 //    of Taiwan, R.O.C., excluding its conflict of law rules.
67 //    Any and all dispute arising out hereof or related hereto shall be finally
68 //    settled by arbitration referred to the Chinese Arbitration Association,
69 //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 //    Rules of the Association by three (3) arbitrators appointed in accordance
71 //    with the said Rules.
72 //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73 //    be English.
74 //    The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 /*
79  * jidctint.c
80  *
81  * Copyright (C) 1991-1998, Thomas G. Lane.
82  * This file is part of the Independent JPEG Group's software.
83  * For conditions of distribution and use, see the accompanying README file.
84  *
85  * This file contains a slow-but-accurate integer implementation of the
86  * inverse DCT (Discrete Cosine Transform).  In the IJG code, this routine
87  * must also perform dequantization of the input coefficients.
88  *
89  * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT
90  * on each row (or vice versa, but it's more convenient to emit a row at
91  * a time).  Direct algorithms are also available, but they are much more
92  * complex and seem not to be any faster when reduced to code.
93  *
94  * This implementation is based on an algorithm described in
95  *   C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT
96  *   Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics,
97  *   Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991.
98  * The primary algorithm described there uses 11 multiplies and 29 adds.
99  * We use their alternate method with 12 multiplies and 32 adds.
100  * The advantage of this method is that no data path contains more than one
101  * multiplication; this allows a very simple and accurate implementation in
102  * scaled fixed-point arithmetic, with a minimal number of shifts.
103  */
104 
105 #include "jpegmain.h"
106 #include "apiJPEG.h"
107 ///#define JPEG_INTERNALS
108 ///#include "jinclude.h"
109 ///#include "jpeglib.h"
110 ///#include "jdct.h"        /* Private declarations for DCT subsystem */
111 
112 #if 1///def DCT_ISLOW_SUPPORTED
113 
114 
115 /*
116  * This module is specialized to the case DCTSIZE = 8.
117  */
118 
119 #define DCTSIZE 8
120 #define BITS_IN_JSAMPLE 8
121 
122 
123 #if DCTSIZE != 8
124 Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
125 #endif
126 
127 
128 /*
129  * The poop on this scaling stuff is as follows:
130  *
131  * Each 1-D IDCT step produces outputs which are a factor of sqrt(N)
132  * larger than the true IDCT outputs.  The final outputs are therefore
133  * a factor of N larger than desired; since N=8 this can be cured by
134  * a simple right shift at the end of the algorithm.  The advantage of
135  * this arrangement is that we save two multiplications per 1-D IDCT,
136  * because the y0 and y4 inputs need not be divided by sqrt(N).
137  *
138  * We have to do addition and subtraction of the integer inputs, which
139  * is no problem, and multiplication by fractional constants, which is
140  * a problem to do in integer arithmetic.  We multiply all the constants
141  * by CONST_SCALE and convert them to integer constants (thus retaining
142  * CONST_BITS bits of precision in the constants).  After doing a
143  * multiplication we have to divide the product by CONST_SCALE, with proper
144  * rounding, to produce the correct output.  This division can be done
145  * cheaply as a right shift of CONST_BITS bits.  We postpone shifting
146  * as long as possible so that partial sums can be added together with
147  * full fractional precision.
148  *
149  * The outputs of the first pass are scaled up by PASS1_BITS bits so that
150  * they are represented to better-than-integral precision.  These outputs
151  * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word
152  * with the recommended scaling.  (To scale up 12-bit sample data further, an
153  * intermediate INT32 array would be needed.)
154  *
155  * To avoid overflow of the 32-bit intermediate results in pass 2, we must
156  * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26.  Error analysis
157  * shows that the values given below are the most effective.
158  */
159 
160 #if BITS_IN_JSAMPLE == 8
161 #define CONST_BITS  13
162 #define PASS1_BITS  2
163 #else
164 #define CONST_BITS  13
165 #define PASS1_BITS  1       /* lose a little precision to avoid overflow */
166 #endif
167 
168 /* Some C compilers fail to reduce "FIX(constant)" at compile time, thus
169  * causing a lot of useless floating-point operations at run time.
170  * To get around this we use the following pre-calculated constants.
171  * If you change CONST_BITS you may want to add appropriate values.
172  * (With a reasonable C compiler, you can just rely on the FIX() macro...)
173  */
174 
175 #if CONST_BITS == 13
176 #define FIX_0_298631336  ((INT32)  2446)    /* FIX(0.298631336) */
177 #define FIX_0_390180644  ((INT32)  3196)    /* FIX(0.390180644) */
178 #define FIX_0_541196100  ((INT32)  4433)    /* FIX(0.541196100) */
179 #define FIX_0_765366865  ((INT32)  6270)    /* FIX(0.765366865) */
180 #define FIX_0_899976223  ((INT32)  7373)    /* FIX(0.899976223) */
181 #define FIX_1_175875602  ((INT32)  9633)    /* FIX(1.175875602) */
182 #define FIX_1_501321110  ((INT32)  12299)   /* FIX(1.501321110) */
183 #define FIX_1_847759065  ((INT32)  15137)   /* FIX(1.847759065) */
184 #define FIX_1_961570560  ((INT32)  16069)   /* FIX(1.961570560) */
185 #define FIX_2_053119869  ((INT32)  16819)   /* FIX(2.053119869) */
186 #define FIX_2_562915447  ((INT32)  20995)   /* FIX(2.562915447) */
187 #define FIX_3_072711026  ((INT32)  25172)   /* FIX(3.072711026) */
188 #else
189 #define FIX_0_298631336  FIX(0.298631336)
190 #define FIX_0_390180644  FIX(0.390180644)
191 #define FIX_0_541196100  FIX(0.541196100)
192 #define FIX_0_765366865  FIX(0.765366865)
193 #define FIX_0_899976223  FIX(0.899976223)
194 #define FIX_1_175875602  FIX(1.175875602)
195 #define FIX_1_501321110  FIX(1.501321110)
196 #define FIX_1_847759065  FIX(1.847759065)
197 #define FIX_1_961570560  FIX(1.961570560)
198 #define FIX_2_053119869  FIX(2.053119869)
199 #define FIX_2_562915447  FIX(2.562915447)
200 #define FIX_3_072711026  FIX(3.072711026)
201 #endif
202 
203 
204 /* Multiply an INT32 variable by an INT32 constant to yield an INT32 result.
205  * For 8-bit samples with the recommended scaling, all the variable
206  * and constant values involved are no more than 16 bits wide, so a
207  * 16x16->32 bit multiply can be used instead of a full 32x32 multiply.
208  * For 12-bit samples, a full 32-bit multiplication will be needed.
209  */
210 
211 /*
212 #if 0 ///BITS_IN_JSAMPLE == 8
213 #define MULTIPLY(var,const)  MULTIPLY16C16(var,const)
214 #else
215 #define MULTIPLY(var,const)  ((var) * (const))
216 #endif
217 */
218 #define MULTIPLY(var,cnst)  ((var) * (cnst))
219 
220 /* Dequantize a coefficient by multiplying it by the multiplier-table
221  * entry; produce an int result.  In this module, both inputs and result
222  * are 16 bits or less, so either int or short multiply will work.
223  */
224 
225 #define ISLOW_MULT_TYPE int
226 #define DEQUANTIZE(coef,quantval)  (coef) //(((ISLOW_MULT_TYPE) (coef)) )  ///(((ISLOW_MULT_TYPE) (coef)) * (quantval))
227 
228 //#define DESCALE(x,n)  ( ( (x) + (1 << ((n)-1)) ) >> n)
229 #define SCALEDONE ((int32) 1)
230 #define DESCALE(x,n)  (((x) + (SCALEDONE << ((n)-1))) >> (n))
231 
232 /*
233  * Perform dequantization and inverse DCT on one block of coefficients.
234  */
235 
236 ///GLOBAL(void)
237 ///jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr,
238 ///      JCOEFPTR coef_block,
239 ///      JSAMPARRAY output_buf, JDIMENSION output_col)
240 #define clamp(i) if (i & 0xFF00) i = (((~i) >> 15) & 0xFF);
241 void jpeg_idct_islow( JPEG_BLOCK_TYPE *data, U8 *Pdst_ptr )
242 {
243     #define INT32   S32
244     #define DCTSIZE2 64
245     #define DCTSIZE 8
246 
247     INT32 tmp0, tmp1, tmp2, tmp3;
248     INT32 tmp10, tmp11, tmp12, tmp13;
249     INT32 z1, z2, z3, z4, z5;
250     ///JCOEFPTR inptr;
251     register JPEG_BLOCK_TYPE *inptr;
252     ///ISLOW_MULT_TYPE *quantptr;
253     U8 *outptr = Pdst_ptr;
254     ///JSAMPLE *range_limit = IDCT_range_limit(cinfo);
255     int ctr;
256     JPEG_BLOCK_TYPE workspace[DCTSIZE2]; /* buffers data between passes */
257     JPEG_BLOCK_TYPE *wsptr;
258     ///SHIFT_TEMPS
259     S16 i;
260 //printf("Jidctint::jpeg_idct_islow\n");
261     /* Pass 1: process columns from input, store into work array. */
262     /* Note results are scaled up by sqrt(8) compared to a true IDCT; */
263     /* furthermore, we scale the results by 2**PASS1_BITS. */
264 
265     inptr = data;
266     ///quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
267     wsptr = workspace;
268     for ( ctr = DCTSIZE; ctr > 0; ctr-- )
269     {
270         /* Due to quantization, we will usually find that many of the input
271          * coefficients are zero, especially the AC terms.  We can exploit this
272          * by short-circuiting the IDCT calculation for any column in which all
273          * the AC terms are zero.  In that case each output is equal to the
274          * DC coefficient (with scale factor as needed).
275          * With typical images and quantization tables, half or more of the
276          * column DCT calculations can be simplified this way.
277          */
278 
279         if ( ( inptr[DCTSIZE * 1] | inptr[DCTSIZE * 2] | inptr[DCTSIZE * 3] | inptr[DCTSIZE * 4] | inptr[DCTSIZE * 5] | inptr[DCTSIZE * 6] | inptr[DCTSIZE * 7] ) == 0 )
280         {
281             /* AC terms all zero */
282             int dcval = DEQUANTIZE( inptr[DCTSIZE*0], quantptr[DCTSIZE*0] ) << PASS1_BITS;
283 
284             wsptr[DCTSIZE * 0] = dcval;
285             wsptr[DCTSIZE * 1] = dcval;
286             wsptr[DCTSIZE * 2] = dcval;
287             wsptr[DCTSIZE * 3] = dcval;
288             wsptr[DCTSIZE * 4] = dcval;
289             wsptr[DCTSIZE * 5] = dcval;
290             wsptr[DCTSIZE * 6] = dcval;
291             wsptr[DCTSIZE * 7] = dcval;
292 
293             inptr++;            /* advance pointers to next column */
294             //quantptr++;
295             wsptr++;
296             continue;
297         }
298 
299         /* Even part: reverse the even part of the forward DCT. */
300         /* The rotator is sqrt(2)*c(-6). */
301 
302         z2 = DEQUANTIZE( inptr[DCTSIZE * 2], quantptr[DCTSIZE * 2] );
303         z3 = DEQUANTIZE( inptr[DCTSIZE * 6], quantptr[DCTSIZE * 6] );
304 
305         z1 = MULTIPLY( z2 + z3, FIX_0_541196100 );
306         tmp2 = z1 + MULTIPLY( z3, -FIX_1_847759065 );
307         tmp3 = z1 + MULTIPLY( z2, FIX_0_765366865 );
308 
309         z2 = DEQUANTIZE( inptr[DCTSIZE * 0], quantptr[DCTSIZE * 0] );
310         z3 = DEQUANTIZE( inptr[DCTSIZE * 4], quantptr[DCTSIZE * 4] );
311 
312         tmp0 = ( z2 + z3 ) << CONST_BITS;
313         tmp1 = ( z2 - z3 ) << CONST_BITS;
314 
315         tmp10 = tmp0 + tmp3;
316         tmp13 = tmp0 - tmp3;
317         tmp11 = tmp1 + tmp2;
318         tmp12 = tmp1 - tmp2;
319 
320         /* Odd part per figure 8; the matrix is unitary and hence its
321          * transpose is its inverse.  i0..i3 are y7,y5,y3,y1 respectively.
322          */
323 
324         tmp0 = DEQUANTIZE( inptr[DCTSIZE * 7], quantptr[DCTSIZE * 7] );
325         tmp1 = DEQUANTIZE( inptr[DCTSIZE * 5], quantptr[DCTSIZE * 5] );
326         tmp2 = DEQUANTIZE( inptr[DCTSIZE * 3], quantptr[DCTSIZE * 3] );
327         tmp3 = DEQUANTIZE( inptr[DCTSIZE * 1], quantptr[DCTSIZE * 1] );
328 
329         z1 = tmp0 + tmp3;
330         z2 = tmp1 + tmp2;
331         z3 = tmp0 + tmp2;
332         z4 = tmp1 + tmp3;
333         z5 = MULTIPLY( z3 + z4, FIX_1_175875602 ); /* sqrt(2) * c3 */
334 
335         tmp0 = MULTIPLY( tmp0, FIX_0_298631336 ); /* sqrt(2) * (-c1+c3+c5-c7) */
336         tmp1 = MULTIPLY( tmp1, FIX_2_053119869 ); /* sqrt(2) * ( c1+c3-c5+c7) */
337         tmp2 = MULTIPLY( tmp2, FIX_3_072711026 ); /* sqrt(2) * ( c1+c3+c5-c7) */
338         tmp3 = MULTIPLY( tmp3, FIX_1_501321110 ); /* sqrt(2) * ( c1+c3-c5-c7) */
339         z1 = MULTIPLY( z1, -FIX_0_899976223 ); /* sqrt(2) * (c7-c3) */
340         z2 = MULTIPLY( z2, -FIX_2_562915447 ); /* sqrt(2) * (-c1-c3) */
341         z3 = MULTIPLY( z3, -FIX_1_961570560 ); /* sqrt(2) * (-c3-c5) */
342         z4 = MULTIPLY( z4, -FIX_0_390180644 ); /* sqrt(2) * (c5-c3) */
343 
344         z3 += z5;
345         z4 += z5;
346 
347         tmp0 += z1 + z3;
348         tmp1 += z2 + z4;
349         tmp2 += z2 + z3;
350         tmp3 += z1 + z4;
351 
352         /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */
353 
354         wsptr[DCTSIZE * 0] = ( int )DESCALE( tmp10 + tmp3, CONST_BITS - PASS1_BITS );
355         wsptr[DCTSIZE * 7] = ( int )DESCALE( tmp10 - tmp3, CONST_BITS - PASS1_BITS );
356         wsptr[DCTSIZE * 1] = ( int )DESCALE( tmp11 + tmp2, CONST_BITS - PASS1_BITS );
357         wsptr[DCTSIZE * 6] = ( int )DESCALE( tmp11 - tmp2, CONST_BITS - PASS1_BITS );
358         wsptr[DCTSIZE * 2] = ( int )DESCALE( tmp12 + tmp1, CONST_BITS - PASS1_BITS );
359         wsptr[DCTSIZE * 5] = ( int )DESCALE( tmp12 - tmp1, CONST_BITS - PASS1_BITS );
360         wsptr[DCTSIZE * 3] = ( int )DESCALE( tmp13 + tmp0, CONST_BITS - PASS1_BITS );
361         wsptr[DCTSIZE * 4] = ( int )DESCALE( tmp13 - tmp0, CONST_BITS - PASS1_BITS );
362 
363         inptr++;            /* advance pointers to next column */
364         //quantptr++;
365         wsptr++;
366     }
367 
368     /* Pass 2: process rows from work array, store into output array. */
369     /* Note that we must descale the results by a factor of 8 == 2**3, */
370     /* and also undo the PASS1_BITS scaling. */
371 
372     wsptr = workspace;
373     for ( ctr = 0; ctr < DCTSIZE; ctr++ )
374     {
375         ///outptr = output_buf[ctr] + output_col;
376         /* Rows of zeroes can be exploited in the same way as we did with columns.
377          * However, the column calculation has created many nonzero AC terms, so
378          * the simplification applies less often (typically 5% to 10% of the time).
379          * On machines with very fast multiplication, it's possible that the
380          * test takes more time than it's worth.  In that case this section
381          * may be commented out.
382          */
383 
384         #if 1///ndef NO_ZERO_ROW_TEST
385         if ( ( wsptr[1] | wsptr[2] | wsptr[3] | wsptr[4] | wsptr[5] | wsptr[6] | wsptr[7] ) == 0 )
386         {
387             /* AC terms all zero */
388             int dcval = ( int )DESCALE( ( INT32 )wsptr[DCTSIZE*0], PASS1_BITS + 3 ) + 128; ///range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) & RANGE_MASK];
389             clamp( dcval )
390             outptr[0] = dcval;
391             outptr[1] = dcval;
392             outptr[2] = dcval;
393             outptr[3] = dcval;
394             outptr[4] = dcval;
395             outptr[5] = dcval;
396             outptr[6] = dcval;
397             outptr[7] = dcval;
398 
399             wsptr += DCTSIZE;       /* advance pointer to next row */
400             outptr += DCTSIZE;
401             continue;
402         }
403         #endif
404 
405         /* Even part: reverse the even part of the forward DCT. */
406         /* The rotator is sqrt(2)*c(-6). */
407 
408         z2 = ( INT32 )wsptr[2];
409         z3 = ( INT32 )wsptr[6];
410 
411         z1 = MULTIPLY( z2 + z3, FIX_0_541196100 );
412         tmp2 = z1 + MULTIPLY( z3, -FIX_1_847759065 );
413         tmp3 = z1 + MULTIPLY( z2, FIX_0_765366865 );
414 
415         tmp0 = ( ( INT32 )wsptr[0] + ( INT32 )wsptr[4] ) << CONST_BITS;
416         tmp1 = ( ( INT32 )wsptr[0] - ( INT32 )wsptr[4] ) << CONST_BITS;
417 
418         tmp10 = tmp0 + tmp3;
419         tmp13 = tmp0 - tmp3;
420         tmp11 = tmp1 + tmp2;
421         tmp12 = tmp1 - tmp2;
422 
423         /* Odd part per figure 8; the matrix is unitary and hence its
424          * transpose is its inverse.  i0..i3 are y7,y5,y3,y1 respectively.
425          */
426 
427         tmp0 = ( INT32 )wsptr[7];
428         tmp1 = ( INT32 )wsptr[5];
429         tmp2 = ( INT32 )wsptr[3];
430         tmp3 = ( INT32 )wsptr[1];
431 
432         z1 = tmp0 + tmp3;
433         z2 = tmp1 + tmp2;
434         z3 = tmp0 + tmp2;
435         z4 = tmp1 + tmp3;
436         z5 = MULTIPLY( z3 + z4, FIX_1_175875602 ); /* sqrt(2) * c3 */
437 
438         tmp0 = MULTIPLY( tmp0, FIX_0_298631336 ); /* sqrt(2) * (-c1+c3+c5-c7) */
439         tmp1 = MULTIPLY( tmp1, FIX_2_053119869 ); /* sqrt(2) * ( c1+c3-c5+c7) */
440         tmp2 = MULTIPLY( tmp2, FIX_3_072711026 ); /* sqrt(2) * ( c1+c3+c5-c7) */
441         tmp3 = MULTIPLY( tmp3, FIX_1_501321110 ); /* sqrt(2) * ( c1+c3-c5-c7) */
442         z1 = MULTIPLY( z1, -FIX_0_899976223 ); /* sqrt(2) * (c7-c3) */
443         z2 = MULTIPLY( z2, -FIX_2_562915447 ); /* sqrt(2) * (-c1-c3) */
444         z3 = MULTIPLY( z3, -FIX_1_961570560 ); /* sqrt(2) * (-c3-c5) */
445         z4 = MULTIPLY( z4, -FIX_0_390180644 ); /* sqrt(2) * (c5-c3) */
446 
447         z3 += z5;
448         z4 += z5;
449 
450         tmp0 += z1 + z3;
451         tmp1 += z2 + z4;
452         tmp2 += z2 + z3;
453         tmp3 += z1 + z4;
454 
455         /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */
456         i = ( int )DESCALE( tmp10 + tmp3, CONST_BITS + PASS1_BITS + 3 ) + 128; ///range_limit[(int) DESCALE(tmp10 + tmp3, CONST_BITS+PASS1_BITS+3) & RANGE_MASK];
457         clamp( i )
458         outptr[0] = ( U8 )i;
459 
460         i = ( int )DESCALE( tmp10 - tmp3, CONST_BITS + PASS1_BITS + 3 ) + 128; ///range_limit[(int) DESCALE(tmp10 - tmp3, CONST_BITS+PASS1_BITS+3) & RANGE_MASK];
461         clamp( i )
462         outptr[7] = ( U8 )i;
463         i = ( int )DESCALE( tmp11 + tmp2, CONST_BITS + PASS1_BITS + 3 ) + 128; ///range_limit[(int) DESCALE(tmp11 + tmp2, CONST_BITS+PASS1_BITS+3) & RANGE_MASK];
464         clamp( i )
465         outptr[1] = ( U8 )i;
466         i = ( int )DESCALE( tmp11 - tmp2, CONST_BITS + PASS1_BITS + 3 ) + 128; ///range_limit[(int) DESCALE(tmp11 - tmp2, CONST_BITS+PASS1_BITS+3) & RANGE_MASK];
467         clamp( i )
468         outptr[6] = ( U8 )i;
469         i = ( int )DESCALE( tmp12 + tmp1, CONST_BITS + PASS1_BITS + 3 ) + 128; ///range_limit[(int) DESCALE(tmp12 + tmp1, CONST_BITS+PASS1_BITS+3) & RANGE_MASK];
470         clamp( i )
471         outptr[2] = ( U8 )i;
472         i = ( int )DESCALE( tmp12 - tmp1, CONST_BITS + PASS1_BITS + 3 ) + 128; ///range_limit[(int) DESCALE(tmp12 - tmp1, CONST_BITS+PASS1_BITS+3) & RANGE_MASK];
473         clamp( i )
474         outptr[5] = ( U8 )i;
475         i = ( int )DESCALE( tmp13 + tmp0, CONST_BITS + PASS1_BITS + 3 ) + 128; ///range_limit[(int) DESCALE(tmp13 + tmp0, CONST_BITS+PASS1_BITS+3) & RANGE_MASK];
476         clamp( i )
477         outptr[3] = ( U8 )i;
478         i = ( int )DESCALE( tmp13 - tmp0, CONST_BITS + PASS1_BITS + 3 ) + 128; ///range_limit[(int) DESCALE(tmp13 - tmp0, CONST_BITS+PASS1_BITS+3) & RANGE_MASK];
479         clamp( i )
480         outptr[4] = ( U8 )i;
481 
482         wsptr += DCTSIZE;       /* advance pointer to next row */
483         outptr += DCTSIZE;
484     }
485 }
486 
487 
488 #endif /* DCT_ISLOW_SUPPORTED */
489 
490