comparison jfdctint.c @ 2979:bfabfdf9ce55 libavcodec

COSMETICS: tabs --> spaces, some prettyprinting
author diego
date Thu, 22 Dec 2005 01:10:11 +0000
parents ef2149182f1c
children 9b98e18a1b1c
comparison
equal deleted inserted replaced
2978:403183bbb505 2979:bfabfdf9ce55
90 * shows that the values given below are the most effective. 90 * shows that the values given below are the most effective.
91 */ 91 */
92 92
93 #if BITS_IN_JSAMPLE == 8 93 #if BITS_IN_JSAMPLE == 8
94 #define CONST_BITS 13 94 #define CONST_BITS 13
95 #define PASS1_BITS 4 /* set this to 2 if 16x16 multiplies are faster */ 95 #define PASS1_BITS 4 /* set this to 2 if 16x16 multiplies are faster */
96 #else 96 #else
97 #define CONST_BITS 13 97 #define CONST_BITS 13
98 #define PASS1_BITS 1 /* lose a little precision to avoid overflow */ 98 #define PASS1_BITS 1 /* lose a little precision to avoid overflow */
99 #endif 99 #endif
100 100
101 /* Some C compilers fail to reduce "FIX(constant)" at compile time, thus 101 /* Some C compilers fail to reduce "FIX(constant)" at compile time, thus
102 * causing a lot of useless floating-point operations at run time. 102 * causing a lot of useless floating-point operations at run time.
103 * To get around this we use the following pre-calculated constants. 103 * To get around this we use the following pre-calculated constants.
104 * If you change CONST_BITS you may want to add appropriate values. 104 * If you change CONST_BITS you may want to add appropriate values.
105 * (With a reasonable C compiler, you can just rely on the FIX() macro...) 105 * (With a reasonable C compiler, you can just rely on the FIX() macro...)
106 */ 106 */
107 107
108 #if CONST_BITS == 13 108 #if CONST_BITS == 13
109 #define FIX_0_298631336 ((int32_t) 2446) /* FIX(0.298631336) */ 109 #define FIX_0_298631336 ((int32_t) 2446) /* FIX(0.298631336) */
110 #define FIX_0_390180644 ((int32_t) 3196) /* FIX(0.390180644) */ 110 #define FIX_0_390180644 ((int32_t) 3196) /* FIX(0.390180644) */
111 #define FIX_0_541196100 ((int32_t) 4433) /* FIX(0.541196100) */ 111 #define FIX_0_541196100 ((int32_t) 4433) /* FIX(0.541196100) */
112 #define FIX_0_765366865 ((int32_t) 6270) /* FIX(0.765366865) */ 112 #define FIX_0_765366865 ((int32_t) 6270) /* FIX(0.765366865) */
113 #define FIX_0_899976223 ((int32_t) 7373) /* FIX(0.899976223) */ 113 #define FIX_0_899976223 ((int32_t) 7373) /* FIX(0.899976223) */
114 #define FIX_1_175875602 ((int32_t) 9633) /* FIX(1.175875602) */ 114 #define FIX_1_175875602 ((int32_t) 9633) /* FIX(1.175875602) */
115 #define FIX_1_501321110 ((int32_t) 12299) /* FIX(1.501321110) */ 115 #define FIX_1_501321110 ((int32_t) 12299) /* FIX(1.501321110) */
116 #define FIX_1_847759065 ((int32_t) 15137) /* FIX(1.847759065) */ 116 #define FIX_1_847759065 ((int32_t) 15137) /* FIX(1.847759065) */
117 #define FIX_1_961570560 ((int32_t) 16069) /* FIX(1.961570560) */ 117 #define FIX_1_961570560 ((int32_t) 16069) /* FIX(1.961570560) */
118 #define FIX_2_053119869 ((int32_t) 16819) /* FIX(2.053119869) */ 118 #define FIX_2_053119869 ((int32_t) 16819) /* FIX(2.053119869) */
119 #define FIX_2_562915447 ((int32_t) 20995) /* FIX(2.562915447) */ 119 #define FIX_2_562915447 ((int32_t) 20995) /* FIX(2.562915447) */
120 #define FIX_3_072711026 ((int32_t) 25172) /* FIX(3.072711026) */ 120 #define FIX_3_072711026 ((int32_t) 25172) /* FIX(3.072711026) */
121 #else 121 #else
122 #define FIX_0_298631336 FIX(0.298631336) 122 #define FIX_0_298631336 FIX(0.298631336)
123 #define FIX_0_390180644 FIX(0.390180644) 123 #define FIX_0_390180644 FIX(0.390180644)
124 #define FIX_0_541196100 FIX(0.541196100) 124 #define FIX_0_541196100 FIX(0.541196100)
125 #define FIX_0_765366865 FIX(0.765366865) 125 #define FIX_0_765366865 FIX(0.765366865)
183 dataptr[0] = (DCTELEM) ((tmp10 + tmp11) << PASS1_BITS); 183 dataptr[0] = (DCTELEM) ((tmp10 + tmp11) << PASS1_BITS);
184 dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS); 184 dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS);
185 185
186 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); 186 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
187 dataptr[2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865), 187 dataptr[2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
188 CONST_BITS-PASS1_BITS); 188 CONST_BITS-PASS1_BITS);
189 dataptr[6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065), 189 dataptr[6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
190 CONST_BITS-PASS1_BITS); 190 CONST_BITS-PASS1_BITS);
191 191
192 /* Odd part per figure 8 --- note paper omits factor of sqrt(2). 192 /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
193 * cK represents cos(K*pi/16). 193 * cK represents cos(K*pi/16).
194 * i0..i3 in the paper are tmp4..tmp7 here. 194 * i0..i3 in the paper are tmp4..tmp7 here.
195 */ 195 */
215 dataptr[7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, CONST_BITS-PASS1_BITS); 215 dataptr[7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, CONST_BITS-PASS1_BITS);
216 dataptr[5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, CONST_BITS-PASS1_BITS); 216 dataptr[5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, CONST_BITS-PASS1_BITS);
217 dataptr[3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, CONST_BITS-PASS1_BITS); 217 dataptr[3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, CONST_BITS-PASS1_BITS);
218 dataptr[1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, CONST_BITS-PASS1_BITS); 218 dataptr[1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, CONST_BITS-PASS1_BITS);
219 219
220 dataptr += DCTSIZE; /* advance pointer to next row */ 220 dataptr += DCTSIZE; /* advance pointer to next row */
221 } 221 }
222 } 222 }
223 223
224 /* 224 /*
225 * Perform the forward DCT on one block of samples. 225 * Perform the forward DCT on one block of samples.
265 dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS); 265 dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS);
266 dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS); 266 dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS);
267 267
268 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); 268 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
269 dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865), 269 dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
270 CONST_BITS+PASS1_BITS); 270 CONST_BITS+PASS1_BITS);
271 dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065), 271 dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
272 CONST_BITS+PASS1_BITS); 272 CONST_BITS+PASS1_BITS);
273 273
274 /* Odd part per figure 8 --- note paper omits factor of sqrt(2). 274 /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
275 * cK represents cos(K*pi/16). 275 * cK represents cos(K*pi/16).
276 * i0..i3 in the paper are tmp4..tmp7 here. 276 * i0..i3 in the paper are tmp4..tmp7 here.
277 */ 277 */
293 293
294 z3 += z5; 294 z3 += z5;
295 z4 += z5; 295 z4 += z5;
296 296
297 dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, 297 dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp4 + z1 + z3,
298 CONST_BITS+PASS1_BITS); 298 CONST_BITS+PASS1_BITS);
299 dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, 299 dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp5 + z2 + z4,
300 CONST_BITS+PASS1_BITS); 300 CONST_BITS+PASS1_BITS);
301 dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, 301 dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp6 + z2 + z3,
302 CONST_BITS+PASS1_BITS); 302 CONST_BITS+PASS1_BITS);
303 dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, 303 dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp7 + z1 + z4,
304 CONST_BITS+PASS1_BITS); 304 CONST_BITS+PASS1_BITS);
305 305
306 dataptr++; /* advance pointer to next column */ 306 dataptr++; /* advance pointer to next column */
307 } 307 }
308 } 308 }
309 309
310 /* 310 /*
311 * The secret of DCT2-4-8 is really simple -- you do the usual 1-DCT 311 * The secret of DCT2-4-8 is really simple -- you do the usual 1-DCT
348 dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS); 348 dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS);
349 dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS); 349 dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS);
350 350
351 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); 351 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
352 dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865), 352 dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
353 CONST_BITS+PASS1_BITS); 353 CONST_BITS+PASS1_BITS);
354 dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065), 354 dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
355 CONST_BITS+PASS1_BITS); 355 CONST_BITS+PASS1_BITS);
356 356
357 tmp10 = tmp4 + tmp7; 357 tmp10 = tmp4 + tmp7;
358 tmp11 = tmp5 + tmp6; 358 tmp11 = tmp5 + tmp6;
359 tmp12 = tmp5 - tmp6; 359 tmp12 = tmp5 - tmp6;
360 tmp13 = tmp4 - tmp7; 360 tmp13 = tmp4 - tmp7;
362 dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS); 362 dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS);
363 dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS); 363 dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS);
364 364
365 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); 365 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
366 dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865), 366 dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
367 CONST_BITS+PASS1_BITS); 367 CONST_BITS+PASS1_BITS);
368 dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065), 368 dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
369 CONST_BITS+PASS1_BITS); 369 CONST_BITS+PASS1_BITS);
370 370
371 dataptr++; /* advance pointer to next column */ 371 dataptr++; /* advance pointer to next column */
372 } 372 }
373 } 373 }