Mercurial > libavcodec.hg
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 } |