Mercurial > libavcodec.hg
comparison jrevdct.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 |
---|---|
93 */ | 93 */ |
94 | 94 |
95 #ifdef EIGHT_BIT_SAMPLES | 95 #ifdef EIGHT_BIT_SAMPLES |
96 #define PASS1_BITS 2 | 96 #define PASS1_BITS 2 |
97 #else | 97 #else |
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 #define ONE ((int32_t) 1) | 101 #define ONE ((int32_t) 1) |
102 | 102 |
103 #define CONST_SCALE (ONE << CONST_BITS) | 103 #define CONST_SCALE (ONE << CONST_BITS) |
104 | 104 |
105 /* Convert a positive real constant to an integer scaled by CONST_SCALE. | 105 /* Convert a positive real constant to an integer scaled by CONST_SCALE. |
106 * IMPORTANT: if your compiler doesn't do this arithmetic at compile time, | 106 * IMPORTANT: if your compiler doesn't do this arithmetic at compile time, |
107 * you will pay a significant penalty in run time. In that case, figure | 107 * you will pay a significant penalty in run time. In that case, figure |
108 * the correct integer constant values and insert them by hand. | 108 * the correct integer constant values and insert them by hand. |
109 */ | 109 */ |
110 | 110 |
111 /* Actually FIX is no longer used, we precomputed them all */ | 111 /* Actually FIX is no longer used, we precomputed them all */ |
112 #define FIX(x) ((int32_t) ((x) * CONST_SCALE + 0.5)) | 112 #define FIX(x) ((int32_t) ((x) * CONST_SCALE + 0.5)) |
113 | 113 |
114 /* Descale and correctly round an int32_t value that's scaled by N bits. | 114 /* Descale and correctly round an int32_t value that's scaled by N bits. |
115 * We assume RIGHT_SHIFT rounds towards minus infinity, so adding | 115 * We assume RIGHT_SHIFT rounds towards minus infinity, so adding |
116 * the fudge factor is correct for either sign of X. | 116 * the fudge factor is correct for either sign of X. |
117 */ | 117 */ |
128 * combination of casts. | 128 * combination of casts. |
129 * NB: for 12-bit samples, a full 32-bit multiplication will be needed. | 129 * NB: for 12-bit samples, a full 32-bit multiplication will be needed. |
130 */ | 130 */ |
131 | 131 |
132 #ifdef EIGHT_BIT_SAMPLES | 132 #ifdef EIGHT_BIT_SAMPLES |
133 #ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ | 133 #ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ |
134 #define MULTIPLY(var,const) (((int16_t) (var)) * ((int16_t) (const))) | 134 #define MULTIPLY(var,const) (((int16_t) (var)) * ((int16_t) (const))) |
135 #endif | 135 #endif |
136 #ifdef SHORTxLCONST_32 /* known to work with Microsoft C 6.0 */ | 136 #ifdef SHORTxLCONST_32 /* known to work with Microsoft C 6.0 */ |
137 #define MULTIPLY(var,const) (((int16_t) (var)) * ((int32_t) (const))) | 137 #define MULTIPLY(var,const) (((int16_t) (var)) * ((int32_t) (const))) |
138 #endif | 138 #endif |
139 #endif | 139 #endif |
140 | 140 |
141 #ifndef MULTIPLY /* default definition */ | 141 #ifndef MULTIPLY /* default definition */ |
142 #define MULTIPLY(var,const) ((var) * (const)) | 142 #define MULTIPLY(var,const) ((var) * (const)) |
143 #endif | 143 #endif |
144 | 144 |
145 | 145 |
146 /* | 146 /* |
215 d7 = dataptr[7]; | 215 d7 = dataptr[7]; |
216 | 216 |
217 if ((d1 | d2 | d3 | d4 | d5 | d6 | d7) == 0) { | 217 if ((d1 | d2 | d3 | d4 | d5 | d6 | d7) == 0) { |
218 /* AC terms all zero */ | 218 /* AC terms all zero */ |
219 if (d0) { | 219 if (d0) { |
220 /* Compute a 32 bit value to assign. */ | 220 /* Compute a 32 bit value to assign. */ |
221 DCTELEM dcval = (DCTELEM) (d0 << PASS1_BITS); | 221 DCTELEM dcval = (DCTELEM) (d0 << PASS1_BITS); |
222 register int v = (dcval & 0xffff) | ((dcval << 16) & 0xffff0000); | 222 register int v = (dcval & 0xffff) | ((dcval << 16) & 0xffff0000); |
223 | 223 |
224 idataptr[0] = v; | 224 idataptr[0] = v; |
225 idataptr[1] = v; | 225 idataptr[1] = v; |
226 idataptr[2] = v; | 226 idataptr[2] = v; |
227 idataptr[3] = v; | 227 idataptr[3] = v; |
228 } | 228 } |
229 | 229 |
230 dataptr += DCTSIZE; /* advance pointer to next row */ | 230 dataptr += DCTSIZE; /* advance pointer to next row */ |
231 continue; | 231 continue; |
232 } | 232 } |
233 | 233 |
234 /* Even part: reverse the even part of the forward DCT. */ | 234 /* Even part: reverse the even part of the forward DCT. */ |
235 /* The rotator is sqrt(2)*c(-6). */ | 235 /* The rotator is sqrt(2)*c(-6). */ |
236 { | 236 { |
237 if (d6) { | 237 if (d6) { |
238 if (d2) { | 238 if (d2) { |
239 /* d0 != 0, d2 != 0, d4 != 0, d6 != 0 */ | 239 /* d0 != 0, d2 != 0, d4 != 0, d6 != 0 */ |
240 z1 = MULTIPLY(d2 + d6, FIX_0_541196100); | 240 z1 = MULTIPLY(d2 + d6, FIX_0_541196100); |
241 tmp2 = z1 + MULTIPLY(-d6, FIX_1_847759065); | 241 tmp2 = z1 + MULTIPLY(-d6, FIX_1_847759065); |
242 tmp3 = z1 + MULTIPLY(d2, FIX_0_765366865); | 242 tmp3 = z1 + MULTIPLY(d2, FIX_0_765366865); |
243 | 243 |
244 tmp0 = (d0 + d4) << CONST_BITS; | 244 tmp0 = (d0 + d4) << CONST_BITS; |
245 tmp1 = (d0 - d4) << CONST_BITS; | 245 tmp1 = (d0 - d4) << CONST_BITS; |
246 | 246 |
247 tmp10 = tmp0 + tmp3; | 247 tmp10 = tmp0 + tmp3; |
248 tmp13 = tmp0 - tmp3; | 248 tmp13 = tmp0 - tmp3; |
249 tmp11 = tmp1 + tmp2; | 249 tmp11 = tmp1 + tmp2; |
250 tmp12 = tmp1 - tmp2; | 250 tmp12 = tmp1 - tmp2; |
251 } else { | 251 } else { |
252 /* d0 != 0, d2 == 0, d4 != 0, d6 != 0 */ | 252 /* d0 != 0, d2 == 0, d4 != 0, d6 != 0 */ |
253 tmp2 = MULTIPLY(-d6, FIX_1_306562965); | 253 tmp2 = MULTIPLY(-d6, FIX_1_306562965); |
254 tmp3 = MULTIPLY(d6, FIX_0_541196100); | 254 tmp3 = MULTIPLY(d6, FIX_0_541196100); |
255 | 255 |
256 tmp0 = (d0 + d4) << CONST_BITS; | 256 tmp0 = (d0 + d4) << CONST_BITS; |
257 tmp1 = (d0 - d4) << CONST_BITS; | 257 tmp1 = (d0 - d4) << CONST_BITS; |
258 | 258 |
259 tmp10 = tmp0 + tmp3; | 259 tmp10 = tmp0 + tmp3; |
260 tmp13 = tmp0 - tmp3; | 260 tmp13 = tmp0 - tmp3; |
261 tmp11 = tmp1 + tmp2; | 261 tmp11 = tmp1 + tmp2; |
262 tmp12 = tmp1 - tmp2; | 262 tmp12 = tmp1 - tmp2; |
263 } | 263 } |
264 } else { | 264 } else { |
265 if (d2) { | 265 if (d2) { |
266 /* d0 != 0, d2 != 0, d4 != 0, d6 == 0 */ | 266 /* d0 != 0, d2 != 0, d4 != 0, d6 == 0 */ |
267 tmp2 = MULTIPLY(d2, FIX_0_541196100); | 267 tmp2 = MULTIPLY(d2, FIX_0_541196100); |
268 tmp3 = MULTIPLY(d2, FIX_1_306562965); | 268 tmp3 = MULTIPLY(d2, FIX_1_306562965); |
269 | 269 |
270 tmp0 = (d0 + d4) << CONST_BITS; | 270 tmp0 = (d0 + d4) << CONST_BITS; |
271 tmp1 = (d0 - d4) << CONST_BITS; | 271 tmp1 = (d0 - d4) << CONST_BITS; |
272 | 272 |
273 tmp10 = tmp0 + tmp3; | 273 tmp10 = tmp0 + tmp3; |
274 tmp13 = tmp0 - tmp3; | 274 tmp13 = tmp0 - tmp3; |
275 tmp11 = tmp1 + tmp2; | 275 tmp11 = tmp1 + tmp2; |
276 tmp12 = tmp1 - tmp2; | 276 tmp12 = tmp1 - tmp2; |
277 } else { | 277 } else { |
278 /* d0 != 0, d2 == 0, d4 != 0, d6 == 0 */ | 278 /* d0 != 0, d2 == 0, d4 != 0, d6 == 0 */ |
279 tmp10 = tmp13 = (d0 + d4) << CONST_BITS; | 279 tmp10 = tmp13 = (d0 + d4) << CONST_BITS; |
280 tmp11 = tmp12 = (d0 - d4) << CONST_BITS; | 280 tmp11 = tmp12 = (d0 - d4) << CONST_BITS; |
281 } | 281 } |
282 } | 282 } |
283 | 283 |
284 /* Odd part per figure 8; the matrix is unitary and hence its | 284 /* Odd part per figure 8; the matrix is unitary and hence its |
285 * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. | 285 * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. |
286 */ | 286 */ |
287 | 287 |
288 if (d7) { | 288 if (d7) { |
289 if (d5) { | 289 if (d5) { |
290 if (d3) { | 290 if (d3) { |
291 if (d1) { | 291 if (d1) { |
292 /* d1 != 0, d3 != 0, d5 != 0, d7 != 0 */ | 292 /* d1 != 0, d3 != 0, d5 != 0, d7 != 0 */ |
293 z1 = d7 + d1; | 293 z1 = d7 + d1; |
294 z2 = d5 + d3; | 294 z2 = d5 + d3; |
295 z3 = d7 + d3; | 295 z3 = d7 + d3; |
296 z4 = d5 + d1; | 296 z4 = d5 + d1; |
297 z5 = MULTIPLY(z3 + z4, FIX_1_175875602); | 297 z5 = MULTIPLY(z3 + z4, FIX_1_175875602); |
298 | 298 |
299 tmp0 = MULTIPLY(d7, FIX_0_298631336); | 299 tmp0 = MULTIPLY(d7, FIX_0_298631336); |
300 tmp1 = MULTIPLY(d5, FIX_2_053119869); | 300 tmp1 = MULTIPLY(d5, FIX_2_053119869); |
301 tmp2 = MULTIPLY(d3, FIX_3_072711026); | 301 tmp2 = MULTIPLY(d3, FIX_3_072711026); |
302 tmp3 = MULTIPLY(d1, FIX_1_501321110); | 302 tmp3 = MULTIPLY(d1, FIX_1_501321110); |
303 z1 = MULTIPLY(-z1, FIX_0_899976223); | 303 z1 = MULTIPLY(-z1, FIX_0_899976223); |
304 z2 = MULTIPLY(-z2, FIX_2_562915447); | 304 z2 = MULTIPLY(-z2, FIX_2_562915447); |
305 z3 = MULTIPLY(-z3, FIX_1_961570560); | 305 z3 = MULTIPLY(-z3, FIX_1_961570560); |
306 z4 = MULTIPLY(-z4, FIX_0_390180644); | 306 z4 = MULTIPLY(-z4, FIX_0_390180644); |
307 | 307 |
308 z3 += z5; | 308 z3 += z5; |
309 z4 += z5; | 309 z4 += z5; |
310 | 310 |
311 tmp0 += z1 + z3; | 311 tmp0 += z1 + z3; |
312 tmp1 += z2 + z4; | 312 tmp1 += z2 + z4; |
313 tmp2 += z2 + z3; | 313 tmp2 += z2 + z3; |
314 tmp3 += z1 + z4; | 314 tmp3 += z1 + z4; |
315 } else { | 315 } else { |
316 /* d1 == 0, d3 != 0, d5 != 0, d7 != 0 */ | 316 /* d1 == 0, d3 != 0, d5 != 0, d7 != 0 */ |
317 z2 = d5 + d3; | 317 z2 = d5 + d3; |
318 z3 = d7 + d3; | 318 z3 = d7 + d3; |
319 z5 = MULTIPLY(z3 + d5, FIX_1_175875602); | 319 z5 = MULTIPLY(z3 + d5, FIX_1_175875602); |
320 | 320 |
321 tmp0 = MULTIPLY(d7, FIX_0_298631336); | 321 tmp0 = MULTIPLY(d7, FIX_0_298631336); |
322 tmp1 = MULTIPLY(d5, FIX_2_053119869); | 322 tmp1 = MULTIPLY(d5, FIX_2_053119869); |
323 tmp2 = MULTIPLY(d3, FIX_3_072711026); | 323 tmp2 = MULTIPLY(d3, FIX_3_072711026); |
324 z1 = MULTIPLY(-d7, FIX_0_899976223); | 324 z1 = MULTIPLY(-d7, FIX_0_899976223); |
325 z2 = MULTIPLY(-z2, FIX_2_562915447); | 325 z2 = MULTIPLY(-z2, FIX_2_562915447); |
326 z3 = MULTIPLY(-z3, FIX_1_961570560); | 326 z3 = MULTIPLY(-z3, FIX_1_961570560); |
327 z4 = MULTIPLY(-d5, FIX_0_390180644); | 327 z4 = MULTIPLY(-d5, FIX_0_390180644); |
328 | 328 |
329 z3 += z5; | 329 z3 += z5; |
330 z4 += z5; | 330 z4 += z5; |
331 | 331 |
332 tmp0 += z1 + z3; | 332 tmp0 += z1 + z3; |
333 tmp1 += z2 + z4; | 333 tmp1 += z2 + z4; |
334 tmp2 += z2 + z3; | 334 tmp2 += z2 + z3; |
335 tmp3 = z1 + z4; | 335 tmp3 = z1 + z4; |
336 } | 336 } |
337 } else { | 337 } else { |
338 if (d1) { | 338 if (d1) { |
339 /* d1 != 0, d3 == 0, d5 != 0, d7 != 0 */ | 339 /* d1 != 0, d3 == 0, d5 != 0, d7 != 0 */ |
340 z1 = d7 + d1; | 340 z1 = d7 + d1; |
341 z4 = d5 + d1; | 341 z4 = d5 + d1; |
342 z5 = MULTIPLY(d7 + z4, FIX_1_175875602); | 342 z5 = MULTIPLY(d7 + z4, FIX_1_175875602); |
343 | 343 |
344 tmp0 = MULTIPLY(d7, FIX_0_298631336); | 344 tmp0 = MULTIPLY(d7, FIX_0_298631336); |
345 tmp1 = MULTIPLY(d5, FIX_2_053119869); | 345 tmp1 = MULTIPLY(d5, FIX_2_053119869); |
346 tmp3 = MULTIPLY(d1, FIX_1_501321110); | 346 tmp3 = MULTIPLY(d1, FIX_1_501321110); |
347 z1 = MULTIPLY(-z1, FIX_0_899976223); | 347 z1 = MULTIPLY(-z1, FIX_0_899976223); |
348 z2 = MULTIPLY(-d5, FIX_2_562915447); | 348 z2 = MULTIPLY(-d5, FIX_2_562915447); |
349 z3 = MULTIPLY(-d7, FIX_1_961570560); | 349 z3 = MULTIPLY(-d7, FIX_1_961570560); |
350 z4 = MULTIPLY(-z4, FIX_0_390180644); | 350 z4 = MULTIPLY(-z4, FIX_0_390180644); |
351 | 351 |
352 z3 += z5; | 352 z3 += z5; |
353 z4 += z5; | 353 z4 += z5; |
354 | 354 |
355 tmp0 += z1 + z3; | 355 tmp0 += z1 + z3; |
356 tmp1 += z2 + z4; | 356 tmp1 += z2 + z4; |
357 tmp2 = z2 + z3; | 357 tmp2 = z2 + z3; |
358 tmp3 += z1 + z4; | 358 tmp3 += z1 + z4; |
359 } else { | 359 } else { |
360 /* d1 == 0, d3 == 0, d5 != 0, d7 != 0 */ | 360 /* d1 == 0, d3 == 0, d5 != 0, d7 != 0 */ |
361 tmp0 = MULTIPLY(-d7, FIX_0_601344887); | 361 tmp0 = MULTIPLY(-d7, FIX_0_601344887); |
362 z1 = MULTIPLY(-d7, FIX_0_899976223); | 362 z1 = MULTIPLY(-d7, FIX_0_899976223); |
363 z3 = MULTIPLY(-d7, FIX_1_961570560); | 363 z3 = MULTIPLY(-d7, FIX_1_961570560); |
364 tmp1 = MULTIPLY(-d5, FIX_0_509795579); | 364 tmp1 = MULTIPLY(-d5, FIX_0_509795579); |
365 z2 = MULTIPLY(-d5, FIX_2_562915447); | 365 z2 = MULTIPLY(-d5, FIX_2_562915447); |
366 z4 = MULTIPLY(-d5, FIX_0_390180644); | 366 z4 = MULTIPLY(-d5, FIX_0_390180644); |
367 z5 = MULTIPLY(d5 + d7, FIX_1_175875602); | 367 z5 = MULTIPLY(d5 + d7, FIX_1_175875602); |
368 | 368 |
369 z3 += z5; | 369 z3 += z5; |
370 z4 += z5; | 370 z4 += z5; |
371 | 371 |
372 tmp0 += z3; | 372 tmp0 += z3; |
373 tmp1 += z4; | 373 tmp1 += z4; |
374 tmp2 = z2 + z3; | 374 tmp2 = z2 + z3; |
375 tmp3 = z1 + z4; | 375 tmp3 = z1 + z4; |
376 } | 376 } |
377 } | 377 } |
378 } else { | 378 } else { |
379 if (d3) { | 379 if (d3) { |
380 if (d1) { | 380 if (d1) { |
381 /* d1 != 0, d3 != 0, d5 == 0, d7 != 0 */ | 381 /* d1 != 0, d3 != 0, d5 == 0, d7 != 0 */ |
382 z1 = d7 + d1; | 382 z1 = d7 + d1; |
383 z3 = d7 + d3; | 383 z3 = d7 + d3; |
384 z5 = MULTIPLY(z3 + d1, FIX_1_175875602); | 384 z5 = MULTIPLY(z3 + d1, FIX_1_175875602); |
385 | 385 |
386 tmp0 = MULTIPLY(d7, FIX_0_298631336); | 386 tmp0 = MULTIPLY(d7, FIX_0_298631336); |
387 tmp2 = MULTIPLY(d3, FIX_3_072711026); | 387 tmp2 = MULTIPLY(d3, FIX_3_072711026); |
388 tmp3 = MULTIPLY(d1, FIX_1_501321110); | 388 tmp3 = MULTIPLY(d1, FIX_1_501321110); |
389 z1 = MULTIPLY(-z1, FIX_0_899976223); | 389 z1 = MULTIPLY(-z1, FIX_0_899976223); |
390 z2 = MULTIPLY(-d3, FIX_2_562915447); | 390 z2 = MULTIPLY(-d3, FIX_2_562915447); |
391 z3 = MULTIPLY(-z3, FIX_1_961570560); | 391 z3 = MULTIPLY(-z3, FIX_1_961570560); |
392 z4 = MULTIPLY(-d1, FIX_0_390180644); | 392 z4 = MULTIPLY(-d1, FIX_0_390180644); |
393 | 393 |
394 z3 += z5; | 394 z3 += z5; |
395 z4 += z5; | 395 z4 += z5; |
396 | 396 |
397 tmp0 += z1 + z3; | 397 tmp0 += z1 + z3; |
398 tmp1 = z2 + z4; | 398 tmp1 = z2 + z4; |
399 tmp2 += z2 + z3; | 399 tmp2 += z2 + z3; |
400 tmp3 += z1 + z4; | 400 tmp3 += z1 + z4; |
401 } else { | 401 } else { |
402 /* d1 == 0, d3 != 0, d5 == 0, d7 != 0 */ | 402 /* d1 == 0, d3 != 0, d5 == 0, d7 != 0 */ |
403 z3 = d7 + d3; | 403 z3 = d7 + d3; |
404 | 404 |
405 tmp0 = MULTIPLY(-d7, FIX_0_601344887); | 405 tmp0 = MULTIPLY(-d7, FIX_0_601344887); |
406 z1 = MULTIPLY(-d7, FIX_0_899976223); | 406 z1 = MULTIPLY(-d7, FIX_0_899976223); |
407 tmp2 = MULTIPLY(d3, FIX_0_509795579); | 407 tmp2 = MULTIPLY(d3, FIX_0_509795579); |
408 z2 = MULTIPLY(-d3, FIX_2_562915447); | 408 z2 = MULTIPLY(-d3, FIX_2_562915447); |
409 z5 = MULTIPLY(z3, FIX_1_175875602); | 409 z5 = MULTIPLY(z3, FIX_1_175875602); |
410 z3 = MULTIPLY(-z3, FIX_0_785694958); | 410 z3 = MULTIPLY(-z3, FIX_0_785694958); |
411 | 411 |
412 tmp0 += z3; | 412 tmp0 += z3; |
413 tmp1 = z2 + z5; | 413 tmp1 = z2 + z5; |
414 tmp2 += z3; | 414 tmp2 += z3; |
415 tmp3 = z1 + z5; | 415 tmp3 = z1 + z5; |
416 } | 416 } |
417 } else { | 417 } else { |
418 if (d1) { | 418 if (d1) { |
419 /* d1 != 0, d3 == 0, d5 == 0, d7 != 0 */ | 419 /* d1 != 0, d3 == 0, d5 == 0, d7 != 0 */ |
420 z1 = d7 + d1; | 420 z1 = d7 + d1; |
421 z5 = MULTIPLY(z1, FIX_1_175875602); | 421 z5 = MULTIPLY(z1, FIX_1_175875602); |
422 | 422 |
423 z1 = MULTIPLY(z1, FIX_0_275899380); | 423 z1 = MULTIPLY(z1, FIX_0_275899380); |
424 z3 = MULTIPLY(-d7, FIX_1_961570560); | 424 z3 = MULTIPLY(-d7, FIX_1_961570560); |
425 tmp0 = MULTIPLY(-d7, FIX_1_662939225); | 425 tmp0 = MULTIPLY(-d7, FIX_1_662939225); |
426 z4 = MULTIPLY(-d1, FIX_0_390180644); | 426 z4 = MULTIPLY(-d1, FIX_0_390180644); |
427 tmp3 = MULTIPLY(d1, FIX_1_111140466); | 427 tmp3 = MULTIPLY(d1, FIX_1_111140466); |
428 | 428 |
429 tmp0 += z1; | 429 tmp0 += z1; |
430 tmp1 = z4 + z5; | 430 tmp1 = z4 + z5; |
431 tmp2 = z3 + z5; | 431 tmp2 = z3 + z5; |
432 tmp3 += z1; | 432 tmp3 += z1; |
433 } else { | 433 } else { |
434 /* d1 == 0, d3 == 0, d5 == 0, d7 != 0 */ | 434 /* d1 == 0, d3 == 0, d5 == 0, d7 != 0 */ |
435 tmp0 = MULTIPLY(-d7, FIX_1_387039845); | 435 tmp0 = MULTIPLY(-d7, FIX_1_387039845); |
436 tmp1 = MULTIPLY(d7, FIX_1_175875602); | 436 tmp1 = MULTIPLY(d7, FIX_1_175875602); |
437 tmp2 = MULTIPLY(-d7, FIX_0_785694958); | 437 tmp2 = MULTIPLY(-d7, FIX_0_785694958); |
438 tmp3 = MULTIPLY(d7, FIX_0_275899380); | 438 tmp3 = MULTIPLY(d7, FIX_0_275899380); |
439 } | 439 } |
440 } | 440 } |
441 } | 441 } |
442 } else { | 442 } else { |
443 if (d5) { | 443 if (d5) { |
444 if (d3) { | 444 if (d3) { |
445 if (d1) { | 445 if (d1) { |
446 /* d1 != 0, d3 != 0, d5 != 0, d7 == 0 */ | 446 /* d1 != 0, d3 != 0, d5 != 0, d7 == 0 */ |
447 z2 = d5 + d3; | 447 z2 = d5 + d3; |
448 z4 = d5 + d1; | 448 z4 = d5 + d1; |
449 z5 = MULTIPLY(d3 + z4, FIX_1_175875602); | 449 z5 = MULTIPLY(d3 + z4, FIX_1_175875602); |
450 | 450 |
451 tmp1 = MULTIPLY(d5, FIX_2_053119869); | 451 tmp1 = MULTIPLY(d5, FIX_2_053119869); |
452 tmp2 = MULTIPLY(d3, FIX_3_072711026); | 452 tmp2 = MULTIPLY(d3, FIX_3_072711026); |
453 tmp3 = MULTIPLY(d1, FIX_1_501321110); | 453 tmp3 = MULTIPLY(d1, FIX_1_501321110); |
454 z1 = MULTIPLY(-d1, FIX_0_899976223); | 454 z1 = MULTIPLY(-d1, FIX_0_899976223); |
455 z2 = MULTIPLY(-z2, FIX_2_562915447); | 455 z2 = MULTIPLY(-z2, FIX_2_562915447); |
456 z3 = MULTIPLY(-d3, FIX_1_961570560); | 456 z3 = MULTIPLY(-d3, FIX_1_961570560); |
457 z4 = MULTIPLY(-z4, FIX_0_390180644); | 457 z4 = MULTIPLY(-z4, FIX_0_390180644); |
458 | 458 |
459 z3 += z5; | 459 z3 += z5; |
460 z4 += z5; | 460 z4 += z5; |
461 | 461 |
462 tmp0 = z1 + z3; | 462 tmp0 = z1 + z3; |
463 tmp1 += z2 + z4; | 463 tmp1 += z2 + z4; |
464 tmp2 += z2 + z3; | 464 tmp2 += z2 + z3; |
465 tmp3 += z1 + z4; | 465 tmp3 += z1 + z4; |
466 } else { | 466 } else { |
467 /* d1 == 0, d3 != 0, d5 != 0, d7 == 0 */ | 467 /* d1 == 0, d3 != 0, d5 != 0, d7 == 0 */ |
468 z2 = d5 + d3; | 468 z2 = d5 + d3; |
469 | 469 |
470 z5 = MULTIPLY(z2, FIX_1_175875602); | 470 z5 = MULTIPLY(z2, FIX_1_175875602); |
471 tmp1 = MULTIPLY(d5, FIX_1_662939225); | 471 tmp1 = MULTIPLY(d5, FIX_1_662939225); |
472 z4 = MULTIPLY(-d5, FIX_0_390180644); | 472 z4 = MULTIPLY(-d5, FIX_0_390180644); |
473 z2 = MULTIPLY(-z2, FIX_1_387039845); | 473 z2 = MULTIPLY(-z2, FIX_1_387039845); |
474 tmp2 = MULTIPLY(d3, FIX_1_111140466); | 474 tmp2 = MULTIPLY(d3, FIX_1_111140466); |
475 z3 = MULTIPLY(-d3, FIX_1_961570560); | 475 z3 = MULTIPLY(-d3, FIX_1_961570560); |
476 | 476 |
477 tmp0 = z3 + z5; | 477 tmp0 = z3 + z5; |
478 tmp1 += z2; | 478 tmp1 += z2; |
479 tmp2 += z2; | 479 tmp2 += z2; |
480 tmp3 = z4 + z5; | 480 tmp3 = z4 + z5; |
481 } | 481 } |
482 } else { | 482 } else { |
483 if (d1) { | 483 if (d1) { |
484 /* d1 != 0, d3 == 0, d5 != 0, d7 == 0 */ | 484 /* d1 != 0, d3 == 0, d5 != 0, d7 == 0 */ |
485 z4 = d5 + d1; | 485 z4 = d5 + d1; |
486 | 486 |
487 z5 = MULTIPLY(z4, FIX_1_175875602); | 487 z5 = MULTIPLY(z4, FIX_1_175875602); |
488 z1 = MULTIPLY(-d1, FIX_0_899976223); | 488 z1 = MULTIPLY(-d1, FIX_0_899976223); |
489 tmp3 = MULTIPLY(d1, FIX_0_601344887); | 489 tmp3 = MULTIPLY(d1, FIX_0_601344887); |
490 tmp1 = MULTIPLY(-d5, FIX_0_509795579); | 490 tmp1 = MULTIPLY(-d5, FIX_0_509795579); |
491 z2 = MULTIPLY(-d5, FIX_2_562915447); | 491 z2 = MULTIPLY(-d5, FIX_2_562915447); |
492 z4 = MULTIPLY(z4, FIX_0_785694958); | 492 z4 = MULTIPLY(z4, FIX_0_785694958); |
493 | 493 |
494 tmp0 = z1 + z5; | 494 tmp0 = z1 + z5; |
495 tmp1 += z4; | 495 tmp1 += z4; |
496 tmp2 = z2 + z5; | 496 tmp2 = z2 + z5; |
497 tmp3 += z4; | 497 tmp3 += z4; |
498 } else { | 498 } else { |
499 /* d1 == 0, d3 == 0, d5 != 0, d7 == 0 */ | 499 /* d1 == 0, d3 == 0, d5 != 0, d7 == 0 */ |
500 tmp0 = MULTIPLY(d5, FIX_1_175875602); | 500 tmp0 = MULTIPLY(d5, FIX_1_175875602); |
501 tmp1 = MULTIPLY(d5, FIX_0_275899380); | 501 tmp1 = MULTIPLY(d5, FIX_0_275899380); |
502 tmp2 = MULTIPLY(-d5, FIX_1_387039845); | 502 tmp2 = MULTIPLY(-d5, FIX_1_387039845); |
503 tmp3 = MULTIPLY(d5, FIX_0_785694958); | 503 tmp3 = MULTIPLY(d5, FIX_0_785694958); |
504 } | 504 } |
505 } | 505 } |
506 } else { | 506 } else { |
507 if (d3) { | 507 if (d3) { |
508 if (d1) { | 508 if (d1) { |
509 /* d1 != 0, d3 != 0, d5 == 0, d7 == 0 */ | 509 /* d1 != 0, d3 != 0, d5 == 0, d7 == 0 */ |
510 z5 = d1 + d3; | 510 z5 = d1 + d3; |
511 tmp3 = MULTIPLY(d1, FIX_0_211164243); | 511 tmp3 = MULTIPLY(d1, FIX_0_211164243); |
512 tmp2 = MULTIPLY(-d3, FIX_1_451774981); | 512 tmp2 = MULTIPLY(-d3, FIX_1_451774981); |
513 z1 = MULTIPLY(d1, FIX_1_061594337); | 513 z1 = MULTIPLY(d1, FIX_1_061594337); |
514 z2 = MULTIPLY(-d3, FIX_2_172734803); | 514 z2 = MULTIPLY(-d3, FIX_2_172734803); |
515 z4 = MULTIPLY(z5, FIX_0_785694958); | 515 z4 = MULTIPLY(z5, FIX_0_785694958); |
516 z5 = MULTIPLY(z5, FIX_1_175875602); | 516 z5 = MULTIPLY(z5, FIX_1_175875602); |
517 | 517 |
518 tmp0 = z1 - z4; | 518 tmp0 = z1 - z4; |
519 tmp1 = z2 + z4; | 519 tmp1 = z2 + z4; |
520 tmp2 += z5; | 520 tmp2 += z5; |
521 tmp3 += z5; | 521 tmp3 += z5; |
522 } else { | 522 } else { |
523 /* d1 == 0, d3 != 0, d5 == 0, d7 == 0 */ | 523 /* d1 == 0, d3 != 0, d5 == 0, d7 == 0 */ |
524 tmp0 = MULTIPLY(-d3, FIX_0_785694958); | 524 tmp0 = MULTIPLY(-d3, FIX_0_785694958); |
525 tmp1 = MULTIPLY(-d3, FIX_1_387039845); | 525 tmp1 = MULTIPLY(-d3, FIX_1_387039845); |
526 tmp2 = MULTIPLY(-d3, FIX_0_275899380); | 526 tmp2 = MULTIPLY(-d3, FIX_0_275899380); |
527 tmp3 = MULTIPLY(d3, FIX_1_175875602); | 527 tmp3 = MULTIPLY(d3, FIX_1_175875602); |
528 } | 528 } |
529 } else { | 529 } else { |
530 if (d1) { | 530 if (d1) { |
531 /* d1 != 0, d3 == 0, d5 == 0, d7 == 0 */ | 531 /* d1 != 0, d3 == 0, d5 == 0, d7 == 0 */ |
532 tmp0 = MULTIPLY(d1, FIX_0_275899380); | 532 tmp0 = MULTIPLY(d1, FIX_0_275899380); |
533 tmp1 = MULTIPLY(d1, FIX_0_785694958); | 533 tmp1 = MULTIPLY(d1, FIX_0_785694958); |
534 tmp2 = MULTIPLY(d1, FIX_1_175875602); | 534 tmp2 = MULTIPLY(d1, FIX_1_175875602); |
535 tmp3 = MULTIPLY(d1, FIX_1_387039845); | 535 tmp3 = MULTIPLY(d1, FIX_1_387039845); |
536 } else { | 536 } else { |
537 /* d1 == 0, d3 == 0, d5 == 0, d7 == 0 */ | 537 /* d1 == 0, d3 == 0, d5 == 0, d7 == 0 */ |
538 tmp0 = tmp1 = tmp2 = tmp3 = 0; | 538 tmp0 = tmp1 = tmp2 = tmp3 = 0; |
539 } | 539 } |
540 } | 540 } |
541 } | 541 } |
542 } | 542 } |
543 } | 543 } |
544 /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ | 544 /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ |
545 | 545 |
546 dataptr[0] = (DCTELEM) DESCALE(tmp10 + tmp3, CONST_BITS-PASS1_BITS); | 546 dataptr[0] = (DCTELEM) DESCALE(tmp10 + tmp3, CONST_BITS-PASS1_BITS); |
550 dataptr[2] = (DCTELEM) DESCALE(tmp12 + tmp1, CONST_BITS-PASS1_BITS); | 550 dataptr[2] = (DCTELEM) DESCALE(tmp12 + tmp1, CONST_BITS-PASS1_BITS); |
551 dataptr[5] = (DCTELEM) DESCALE(tmp12 - tmp1, CONST_BITS-PASS1_BITS); | 551 dataptr[5] = (DCTELEM) DESCALE(tmp12 - tmp1, CONST_BITS-PASS1_BITS); |
552 dataptr[3] = (DCTELEM) DESCALE(tmp13 + tmp0, CONST_BITS-PASS1_BITS); | 552 dataptr[3] = (DCTELEM) DESCALE(tmp13 + tmp0, CONST_BITS-PASS1_BITS); |
553 dataptr[4] = (DCTELEM) DESCALE(tmp13 - tmp0, CONST_BITS-PASS1_BITS); | 553 dataptr[4] = (DCTELEM) DESCALE(tmp13 - tmp0, CONST_BITS-PASS1_BITS); |
554 | 554 |
555 dataptr += DCTSIZE; /* advance pointer to next row */ | 555 dataptr += DCTSIZE; /* advance pointer to next row */ |
556 } | 556 } |
557 | 557 |
558 /* Pass 2: process columns. */ | 558 /* Pass 2: process columns. */ |
559 /* Note that we must descale the results by a factor of 8 == 2**3, */ | 559 /* Note that we must descale the results by a factor of 8 == 2**3, */ |
560 /* and also undo the PASS1_BITS scaling. */ | 560 /* and also undo the PASS1_BITS scaling. */ |
579 d7 = dataptr[DCTSIZE*7]; | 579 d7 = dataptr[DCTSIZE*7]; |
580 | 580 |
581 /* Even part: reverse the even part of the forward DCT. */ | 581 /* Even part: reverse the even part of the forward DCT. */ |
582 /* The rotator is sqrt(2)*c(-6). */ | 582 /* The rotator is sqrt(2)*c(-6). */ |
583 if (d6) { | 583 if (d6) { |
584 if (d2) { | 584 if (d2) { |
585 /* d0 != 0, d2 != 0, d4 != 0, d6 != 0 */ | 585 /* d0 != 0, d2 != 0, d4 != 0, d6 != 0 */ |
586 z1 = MULTIPLY(d2 + d6, FIX_0_541196100); | 586 z1 = MULTIPLY(d2 + d6, FIX_0_541196100); |
587 tmp2 = z1 + MULTIPLY(-d6, FIX_1_847759065); | 587 tmp2 = z1 + MULTIPLY(-d6, FIX_1_847759065); |
588 tmp3 = z1 + MULTIPLY(d2, FIX_0_765366865); | 588 tmp3 = z1 + MULTIPLY(d2, FIX_0_765366865); |
589 | 589 |
590 tmp0 = (d0 + d4) << CONST_BITS; | 590 tmp0 = (d0 + d4) << CONST_BITS; |
591 tmp1 = (d0 - d4) << CONST_BITS; | 591 tmp1 = (d0 - d4) << CONST_BITS; |
592 | 592 |
593 tmp10 = tmp0 + tmp3; | 593 tmp10 = tmp0 + tmp3; |
594 tmp13 = tmp0 - tmp3; | 594 tmp13 = tmp0 - tmp3; |
595 tmp11 = tmp1 + tmp2; | 595 tmp11 = tmp1 + tmp2; |
596 tmp12 = tmp1 - tmp2; | 596 tmp12 = tmp1 - tmp2; |
597 } else { | 597 } else { |
598 /* d0 != 0, d2 == 0, d4 != 0, d6 != 0 */ | 598 /* d0 != 0, d2 == 0, d4 != 0, d6 != 0 */ |
599 tmp2 = MULTIPLY(-d6, FIX_1_306562965); | 599 tmp2 = MULTIPLY(-d6, FIX_1_306562965); |
600 tmp3 = MULTIPLY(d6, FIX_0_541196100); | 600 tmp3 = MULTIPLY(d6, FIX_0_541196100); |
601 | 601 |
602 tmp0 = (d0 + d4) << CONST_BITS; | 602 tmp0 = (d0 + d4) << CONST_BITS; |
603 tmp1 = (d0 - d4) << CONST_BITS; | 603 tmp1 = (d0 - d4) << CONST_BITS; |
604 | 604 |
605 tmp10 = tmp0 + tmp3; | 605 tmp10 = tmp0 + tmp3; |
606 tmp13 = tmp0 - tmp3; | 606 tmp13 = tmp0 - tmp3; |
607 tmp11 = tmp1 + tmp2; | 607 tmp11 = tmp1 + tmp2; |
608 tmp12 = tmp1 - tmp2; | 608 tmp12 = tmp1 - tmp2; |
609 } | 609 } |
610 } else { | 610 } else { |
611 if (d2) { | 611 if (d2) { |
612 /* d0 != 0, d2 != 0, d4 != 0, d6 == 0 */ | 612 /* d0 != 0, d2 != 0, d4 != 0, d6 == 0 */ |
613 tmp2 = MULTIPLY(d2, FIX_0_541196100); | 613 tmp2 = MULTIPLY(d2, FIX_0_541196100); |
614 tmp3 = MULTIPLY(d2, FIX_1_306562965); | 614 tmp3 = MULTIPLY(d2, FIX_1_306562965); |
615 | 615 |
616 tmp0 = (d0 + d4) << CONST_BITS; | 616 tmp0 = (d0 + d4) << CONST_BITS; |
617 tmp1 = (d0 - d4) << CONST_BITS; | 617 tmp1 = (d0 - d4) << CONST_BITS; |
618 | 618 |
619 tmp10 = tmp0 + tmp3; | 619 tmp10 = tmp0 + tmp3; |
620 tmp13 = tmp0 - tmp3; | 620 tmp13 = tmp0 - tmp3; |
621 tmp11 = tmp1 + tmp2; | 621 tmp11 = tmp1 + tmp2; |
622 tmp12 = tmp1 - tmp2; | 622 tmp12 = tmp1 - tmp2; |
623 } else { | 623 } else { |
624 /* d0 != 0, d2 == 0, d4 != 0, d6 == 0 */ | 624 /* d0 != 0, d2 == 0, d4 != 0, d6 == 0 */ |
625 tmp10 = tmp13 = (d0 + d4) << CONST_BITS; | 625 tmp10 = tmp13 = (d0 + d4) << CONST_BITS; |
626 tmp11 = tmp12 = (d0 - d4) << CONST_BITS; | 626 tmp11 = tmp12 = (d0 - d4) << CONST_BITS; |
627 } | 627 } |
628 } | 628 } |
629 | 629 |
630 /* Odd part per figure 8; the matrix is unitary and hence its | 630 /* Odd part per figure 8; the matrix is unitary and hence its |
631 * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. | 631 * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. |
632 */ | 632 */ |
633 if (d7) { | 633 if (d7) { |
634 if (d5) { | 634 if (d5) { |
635 if (d3) { | 635 if (d3) { |
636 if (d1) { | 636 if (d1) { |
637 /* d1 != 0, d3 != 0, d5 != 0, d7 != 0 */ | 637 /* d1 != 0, d3 != 0, d5 != 0, d7 != 0 */ |
638 z1 = d7 + d1; | 638 z1 = d7 + d1; |
639 z2 = d5 + d3; | 639 z2 = d5 + d3; |
640 z3 = d7 + d3; | 640 z3 = d7 + d3; |
641 z4 = d5 + d1; | 641 z4 = d5 + d1; |
642 z5 = MULTIPLY(z3 + z4, FIX_1_175875602); | 642 z5 = MULTIPLY(z3 + z4, FIX_1_175875602); |
643 | 643 |
644 tmp0 = MULTIPLY(d7, FIX_0_298631336); | 644 tmp0 = MULTIPLY(d7, FIX_0_298631336); |
645 tmp1 = MULTIPLY(d5, FIX_2_053119869); | 645 tmp1 = MULTIPLY(d5, FIX_2_053119869); |
646 tmp2 = MULTIPLY(d3, FIX_3_072711026); | 646 tmp2 = MULTIPLY(d3, FIX_3_072711026); |
647 tmp3 = MULTIPLY(d1, FIX_1_501321110); | 647 tmp3 = MULTIPLY(d1, FIX_1_501321110); |
648 z1 = MULTIPLY(-z1, FIX_0_899976223); | 648 z1 = MULTIPLY(-z1, FIX_0_899976223); |
649 z2 = MULTIPLY(-z2, FIX_2_562915447); | 649 z2 = MULTIPLY(-z2, FIX_2_562915447); |
650 z3 = MULTIPLY(-z3, FIX_1_961570560); | 650 z3 = MULTIPLY(-z3, FIX_1_961570560); |
651 z4 = MULTIPLY(-z4, FIX_0_390180644); | 651 z4 = MULTIPLY(-z4, FIX_0_390180644); |
652 | 652 |
653 z3 += z5; | 653 z3 += z5; |
654 z4 += z5; | 654 z4 += z5; |
655 | 655 |
656 tmp0 += z1 + z3; | 656 tmp0 += z1 + z3; |
657 tmp1 += z2 + z4; | 657 tmp1 += z2 + z4; |
658 tmp2 += z2 + z3; | 658 tmp2 += z2 + z3; |
659 tmp3 += z1 + z4; | 659 tmp3 += z1 + z4; |
660 } else { | 660 } else { |
661 /* d1 == 0, d3 != 0, d5 != 0, d7 != 0 */ | 661 /* d1 == 0, d3 != 0, d5 != 0, d7 != 0 */ |
662 z1 = d7; | 662 z1 = d7; |
663 z2 = d5 + d3; | 663 z2 = d5 + d3; |
664 z3 = d7 + d3; | 664 z3 = d7 + d3; |
665 z5 = MULTIPLY(z3 + d5, FIX_1_175875602); | 665 z5 = MULTIPLY(z3 + d5, FIX_1_175875602); |
666 | 666 |
667 tmp0 = MULTIPLY(d7, FIX_0_298631336); | 667 tmp0 = MULTIPLY(d7, FIX_0_298631336); |
668 tmp1 = MULTIPLY(d5, FIX_2_053119869); | 668 tmp1 = MULTIPLY(d5, FIX_2_053119869); |
669 tmp2 = MULTIPLY(d3, FIX_3_072711026); | 669 tmp2 = MULTIPLY(d3, FIX_3_072711026); |
670 z1 = MULTIPLY(-d7, FIX_0_899976223); | 670 z1 = MULTIPLY(-d7, FIX_0_899976223); |
671 z2 = MULTIPLY(-z2, FIX_2_562915447); | 671 z2 = MULTIPLY(-z2, FIX_2_562915447); |
672 z3 = MULTIPLY(-z3, FIX_1_961570560); | 672 z3 = MULTIPLY(-z3, FIX_1_961570560); |
673 z4 = MULTIPLY(-d5, FIX_0_390180644); | 673 z4 = MULTIPLY(-d5, FIX_0_390180644); |
674 | 674 |
675 z3 += z5; | 675 z3 += z5; |
676 z4 += z5; | 676 z4 += z5; |
677 | 677 |
678 tmp0 += z1 + z3; | 678 tmp0 += z1 + z3; |
679 tmp1 += z2 + z4; | 679 tmp1 += z2 + z4; |
680 tmp2 += z2 + z3; | 680 tmp2 += z2 + z3; |
681 tmp3 = z1 + z4; | 681 tmp3 = z1 + z4; |
682 } | 682 } |
683 } else { | 683 } else { |
684 if (d1) { | 684 if (d1) { |
685 /* d1 != 0, d3 == 0, d5 != 0, d7 != 0 */ | 685 /* d1 != 0, d3 == 0, d5 != 0, d7 != 0 */ |
686 z1 = d7 + d1; | 686 z1 = d7 + d1; |
687 z2 = d5; | 687 z2 = d5; |
688 z3 = d7; | 688 z3 = d7; |
689 z4 = d5 + d1; | 689 z4 = d5 + d1; |
690 z5 = MULTIPLY(z3 + z4, FIX_1_175875602); | 690 z5 = MULTIPLY(z3 + z4, FIX_1_175875602); |
691 | 691 |
692 tmp0 = MULTIPLY(d7, FIX_0_298631336); | 692 tmp0 = MULTIPLY(d7, FIX_0_298631336); |
693 tmp1 = MULTIPLY(d5, FIX_2_053119869); | 693 tmp1 = MULTIPLY(d5, FIX_2_053119869); |
694 tmp3 = MULTIPLY(d1, FIX_1_501321110); | 694 tmp3 = MULTIPLY(d1, FIX_1_501321110); |
695 z1 = MULTIPLY(-z1, FIX_0_899976223); | 695 z1 = MULTIPLY(-z1, FIX_0_899976223); |
696 z2 = MULTIPLY(-d5, FIX_2_562915447); | 696 z2 = MULTIPLY(-d5, FIX_2_562915447); |
697 z3 = MULTIPLY(-d7, FIX_1_961570560); | 697 z3 = MULTIPLY(-d7, FIX_1_961570560); |
698 z4 = MULTIPLY(-z4, FIX_0_390180644); | 698 z4 = MULTIPLY(-z4, FIX_0_390180644); |
699 | 699 |
700 z3 += z5; | 700 z3 += z5; |
701 z4 += z5; | 701 z4 += z5; |
702 | 702 |
703 tmp0 += z1 + z3; | 703 tmp0 += z1 + z3; |
704 tmp1 += z2 + z4; | 704 tmp1 += z2 + z4; |
705 tmp2 = z2 + z3; | 705 tmp2 = z2 + z3; |
706 tmp3 += z1 + z4; | 706 tmp3 += z1 + z4; |
707 } else { | 707 } else { |
708 /* d1 == 0, d3 == 0, d5 != 0, d7 != 0 */ | 708 /* d1 == 0, d3 == 0, d5 != 0, d7 != 0 */ |
709 tmp0 = MULTIPLY(-d7, FIX_0_601344887); | 709 tmp0 = MULTIPLY(-d7, FIX_0_601344887); |
710 z1 = MULTIPLY(-d7, FIX_0_899976223); | 710 z1 = MULTIPLY(-d7, FIX_0_899976223); |
711 z3 = MULTIPLY(-d7, FIX_1_961570560); | 711 z3 = MULTIPLY(-d7, FIX_1_961570560); |
712 tmp1 = MULTIPLY(-d5, FIX_0_509795579); | 712 tmp1 = MULTIPLY(-d5, FIX_0_509795579); |
713 z2 = MULTIPLY(-d5, FIX_2_562915447); | 713 z2 = MULTIPLY(-d5, FIX_2_562915447); |
714 z4 = MULTIPLY(-d5, FIX_0_390180644); | 714 z4 = MULTIPLY(-d5, FIX_0_390180644); |
715 z5 = MULTIPLY(d5 + d7, FIX_1_175875602); | 715 z5 = MULTIPLY(d5 + d7, FIX_1_175875602); |
716 | 716 |
717 z3 += z5; | 717 z3 += z5; |
718 z4 += z5; | 718 z4 += z5; |
719 | 719 |
720 tmp0 += z3; | 720 tmp0 += z3; |
721 tmp1 += z4; | 721 tmp1 += z4; |
722 tmp2 = z2 + z3; | 722 tmp2 = z2 + z3; |
723 tmp3 = z1 + z4; | 723 tmp3 = z1 + z4; |
724 } | 724 } |
725 } | 725 } |
726 } else { | 726 } else { |
727 if (d3) { | 727 if (d3) { |
728 if (d1) { | 728 if (d1) { |
729 /* d1 != 0, d3 != 0, d5 == 0, d7 != 0 */ | 729 /* d1 != 0, d3 != 0, d5 == 0, d7 != 0 */ |
730 z1 = d7 + d1; | 730 z1 = d7 + d1; |
731 z3 = d7 + d3; | 731 z3 = d7 + d3; |
732 z5 = MULTIPLY(z3 + d1, FIX_1_175875602); | 732 z5 = MULTIPLY(z3 + d1, FIX_1_175875602); |
733 | 733 |
734 tmp0 = MULTIPLY(d7, FIX_0_298631336); | 734 tmp0 = MULTIPLY(d7, FIX_0_298631336); |
735 tmp2 = MULTIPLY(d3, FIX_3_072711026); | 735 tmp2 = MULTIPLY(d3, FIX_3_072711026); |
736 tmp3 = MULTIPLY(d1, FIX_1_501321110); | 736 tmp3 = MULTIPLY(d1, FIX_1_501321110); |
737 z1 = MULTIPLY(-z1, FIX_0_899976223); | 737 z1 = MULTIPLY(-z1, FIX_0_899976223); |
738 z2 = MULTIPLY(-d3, FIX_2_562915447); | 738 z2 = MULTIPLY(-d3, FIX_2_562915447); |
739 z3 = MULTIPLY(-z3, FIX_1_961570560); | 739 z3 = MULTIPLY(-z3, FIX_1_961570560); |
740 z4 = MULTIPLY(-d1, FIX_0_390180644); | 740 z4 = MULTIPLY(-d1, FIX_0_390180644); |
741 | 741 |
742 z3 += z5; | 742 z3 += z5; |
743 z4 += z5; | 743 z4 += z5; |
744 | 744 |
745 tmp0 += z1 + z3; | 745 tmp0 += z1 + z3; |
746 tmp1 = z2 + z4; | 746 tmp1 = z2 + z4; |
747 tmp2 += z2 + z3; | 747 tmp2 += z2 + z3; |
748 tmp3 += z1 + z4; | 748 tmp3 += z1 + z4; |
749 } else { | 749 } else { |
750 /* d1 == 0, d3 != 0, d5 == 0, d7 != 0 */ | 750 /* d1 == 0, d3 != 0, d5 == 0, d7 != 0 */ |
751 z3 = d7 + d3; | 751 z3 = d7 + d3; |
752 | 752 |
753 tmp0 = MULTIPLY(-d7, FIX_0_601344887); | 753 tmp0 = MULTIPLY(-d7, FIX_0_601344887); |
754 z1 = MULTIPLY(-d7, FIX_0_899976223); | 754 z1 = MULTIPLY(-d7, FIX_0_899976223); |
755 tmp2 = MULTIPLY(d3, FIX_0_509795579); | 755 tmp2 = MULTIPLY(d3, FIX_0_509795579); |
756 z2 = MULTIPLY(-d3, FIX_2_562915447); | 756 z2 = MULTIPLY(-d3, FIX_2_562915447); |
757 z5 = MULTIPLY(z3, FIX_1_175875602); | 757 z5 = MULTIPLY(z3, FIX_1_175875602); |
758 z3 = MULTIPLY(-z3, FIX_0_785694958); | 758 z3 = MULTIPLY(-z3, FIX_0_785694958); |
759 | 759 |
760 tmp0 += z3; | 760 tmp0 += z3; |
761 tmp1 = z2 + z5; | 761 tmp1 = z2 + z5; |
762 tmp2 += z3; | 762 tmp2 += z3; |
763 tmp3 = z1 + z5; | 763 tmp3 = z1 + z5; |
764 } | 764 } |
765 } else { | 765 } else { |
766 if (d1) { | 766 if (d1) { |
767 /* d1 != 0, d3 == 0, d5 == 0, d7 != 0 */ | 767 /* d1 != 0, d3 == 0, d5 == 0, d7 != 0 */ |
768 z1 = d7 + d1; | 768 z1 = d7 + d1; |
769 z5 = MULTIPLY(z1, FIX_1_175875602); | 769 z5 = MULTIPLY(z1, FIX_1_175875602); |
770 | 770 |
771 z1 = MULTIPLY(z1, FIX_0_275899380); | 771 z1 = MULTIPLY(z1, FIX_0_275899380); |
772 z3 = MULTIPLY(-d7, FIX_1_961570560); | 772 z3 = MULTIPLY(-d7, FIX_1_961570560); |
773 tmp0 = MULTIPLY(-d7, FIX_1_662939225); | 773 tmp0 = MULTIPLY(-d7, FIX_1_662939225); |
774 z4 = MULTIPLY(-d1, FIX_0_390180644); | 774 z4 = MULTIPLY(-d1, FIX_0_390180644); |
775 tmp3 = MULTIPLY(d1, FIX_1_111140466); | 775 tmp3 = MULTIPLY(d1, FIX_1_111140466); |
776 | 776 |
777 tmp0 += z1; | 777 tmp0 += z1; |
778 tmp1 = z4 + z5; | 778 tmp1 = z4 + z5; |
779 tmp2 = z3 + z5; | 779 tmp2 = z3 + z5; |
780 tmp3 += z1; | 780 tmp3 += z1; |
781 } else { | 781 } else { |
782 /* d1 == 0, d3 == 0, d5 == 0, d7 != 0 */ | 782 /* d1 == 0, d3 == 0, d5 == 0, d7 != 0 */ |
783 tmp0 = MULTIPLY(-d7, FIX_1_387039845); | 783 tmp0 = MULTIPLY(-d7, FIX_1_387039845); |
784 tmp1 = MULTIPLY(d7, FIX_1_175875602); | 784 tmp1 = MULTIPLY(d7, FIX_1_175875602); |
785 tmp2 = MULTIPLY(-d7, FIX_0_785694958); | 785 tmp2 = MULTIPLY(-d7, FIX_0_785694958); |
786 tmp3 = MULTIPLY(d7, FIX_0_275899380); | 786 tmp3 = MULTIPLY(d7, FIX_0_275899380); |
787 } | 787 } |
788 } | 788 } |
789 } | 789 } |
790 } else { | 790 } else { |
791 if (d5) { | 791 if (d5) { |
792 if (d3) { | 792 if (d3) { |
793 if (d1) { | 793 if (d1) { |
794 /* d1 != 0, d3 != 0, d5 != 0, d7 == 0 */ | 794 /* d1 != 0, d3 != 0, d5 != 0, d7 == 0 */ |
795 z2 = d5 + d3; | 795 z2 = d5 + d3; |
796 z4 = d5 + d1; | 796 z4 = d5 + d1; |
797 z5 = MULTIPLY(d3 + z4, FIX_1_175875602); | 797 z5 = MULTIPLY(d3 + z4, FIX_1_175875602); |
798 | 798 |
799 tmp1 = MULTIPLY(d5, FIX_2_053119869); | 799 tmp1 = MULTIPLY(d5, FIX_2_053119869); |
800 tmp2 = MULTIPLY(d3, FIX_3_072711026); | 800 tmp2 = MULTIPLY(d3, FIX_3_072711026); |
801 tmp3 = MULTIPLY(d1, FIX_1_501321110); | 801 tmp3 = MULTIPLY(d1, FIX_1_501321110); |
802 z1 = MULTIPLY(-d1, FIX_0_899976223); | 802 z1 = MULTIPLY(-d1, FIX_0_899976223); |
803 z2 = MULTIPLY(-z2, FIX_2_562915447); | 803 z2 = MULTIPLY(-z2, FIX_2_562915447); |
804 z3 = MULTIPLY(-d3, FIX_1_961570560); | 804 z3 = MULTIPLY(-d3, FIX_1_961570560); |
805 z4 = MULTIPLY(-z4, FIX_0_390180644); | 805 z4 = MULTIPLY(-z4, FIX_0_390180644); |
806 | 806 |
807 z3 += z5; | 807 z3 += z5; |
808 z4 += z5; | 808 z4 += z5; |
809 | 809 |
810 tmp0 = z1 + z3; | 810 tmp0 = z1 + z3; |
811 tmp1 += z2 + z4; | 811 tmp1 += z2 + z4; |
812 tmp2 += z2 + z3; | 812 tmp2 += z2 + z3; |
813 tmp3 += z1 + z4; | 813 tmp3 += z1 + z4; |
814 } else { | 814 } else { |
815 /* d1 == 0, d3 != 0, d5 != 0, d7 == 0 */ | 815 /* d1 == 0, d3 != 0, d5 != 0, d7 == 0 */ |
816 z2 = d5 + d3; | 816 z2 = d5 + d3; |
817 | 817 |
818 z5 = MULTIPLY(z2, FIX_1_175875602); | 818 z5 = MULTIPLY(z2, FIX_1_175875602); |
819 tmp1 = MULTIPLY(d5, FIX_1_662939225); | 819 tmp1 = MULTIPLY(d5, FIX_1_662939225); |
820 z4 = MULTIPLY(-d5, FIX_0_390180644); | 820 z4 = MULTIPLY(-d5, FIX_0_390180644); |
821 z2 = MULTIPLY(-z2, FIX_1_387039845); | 821 z2 = MULTIPLY(-z2, FIX_1_387039845); |
822 tmp2 = MULTIPLY(d3, FIX_1_111140466); | 822 tmp2 = MULTIPLY(d3, FIX_1_111140466); |
823 z3 = MULTIPLY(-d3, FIX_1_961570560); | 823 z3 = MULTIPLY(-d3, FIX_1_961570560); |
824 | 824 |
825 tmp0 = z3 + z5; | 825 tmp0 = z3 + z5; |
826 tmp1 += z2; | 826 tmp1 += z2; |
827 tmp2 += z2; | 827 tmp2 += z2; |
828 tmp3 = z4 + z5; | 828 tmp3 = z4 + z5; |
829 } | 829 } |
830 } else { | 830 } else { |
831 if (d1) { | 831 if (d1) { |
832 /* d1 != 0, d3 == 0, d5 != 0, d7 == 0 */ | 832 /* d1 != 0, d3 == 0, d5 != 0, d7 == 0 */ |
833 z4 = d5 + d1; | 833 z4 = d5 + d1; |
834 | 834 |
835 z5 = MULTIPLY(z4, FIX_1_175875602); | 835 z5 = MULTIPLY(z4, FIX_1_175875602); |
836 z1 = MULTIPLY(-d1, FIX_0_899976223); | 836 z1 = MULTIPLY(-d1, FIX_0_899976223); |
837 tmp3 = MULTIPLY(d1, FIX_0_601344887); | 837 tmp3 = MULTIPLY(d1, FIX_0_601344887); |
838 tmp1 = MULTIPLY(-d5, FIX_0_509795579); | 838 tmp1 = MULTIPLY(-d5, FIX_0_509795579); |
839 z2 = MULTIPLY(-d5, FIX_2_562915447); | 839 z2 = MULTIPLY(-d5, FIX_2_562915447); |
840 z4 = MULTIPLY(z4, FIX_0_785694958); | 840 z4 = MULTIPLY(z4, FIX_0_785694958); |
841 | 841 |
842 tmp0 = z1 + z5; | 842 tmp0 = z1 + z5; |
843 tmp1 += z4; | 843 tmp1 += z4; |
844 tmp2 = z2 + z5; | 844 tmp2 = z2 + z5; |
845 tmp3 += z4; | 845 tmp3 += z4; |
846 } else { | 846 } else { |
847 /* d1 == 0, d3 == 0, d5 != 0, d7 == 0 */ | 847 /* d1 == 0, d3 == 0, d5 != 0, d7 == 0 */ |
848 tmp0 = MULTIPLY(d5, FIX_1_175875602); | 848 tmp0 = MULTIPLY(d5, FIX_1_175875602); |
849 tmp1 = MULTIPLY(d5, FIX_0_275899380); | 849 tmp1 = MULTIPLY(d5, FIX_0_275899380); |
850 tmp2 = MULTIPLY(-d5, FIX_1_387039845); | 850 tmp2 = MULTIPLY(-d5, FIX_1_387039845); |
851 tmp3 = MULTIPLY(d5, FIX_0_785694958); | 851 tmp3 = MULTIPLY(d5, FIX_0_785694958); |
852 } | 852 } |
853 } | 853 } |
854 } else { | 854 } else { |
855 if (d3) { | 855 if (d3) { |
856 if (d1) { | 856 if (d1) { |
857 /* d1 != 0, d3 != 0, d5 == 0, d7 == 0 */ | 857 /* d1 != 0, d3 != 0, d5 == 0, d7 == 0 */ |
858 z5 = d1 + d3; | 858 z5 = d1 + d3; |
859 tmp3 = MULTIPLY(d1, FIX_0_211164243); | 859 tmp3 = MULTIPLY(d1, FIX_0_211164243); |
860 tmp2 = MULTIPLY(-d3, FIX_1_451774981); | 860 tmp2 = MULTIPLY(-d3, FIX_1_451774981); |
861 z1 = MULTIPLY(d1, FIX_1_061594337); | 861 z1 = MULTIPLY(d1, FIX_1_061594337); |
862 z2 = MULTIPLY(-d3, FIX_2_172734803); | 862 z2 = MULTIPLY(-d3, FIX_2_172734803); |
863 z4 = MULTIPLY(z5, FIX_0_785694958); | 863 z4 = MULTIPLY(z5, FIX_0_785694958); |
864 z5 = MULTIPLY(z5, FIX_1_175875602); | 864 z5 = MULTIPLY(z5, FIX_1_175875602); |
865 | 865 |
866 tmp0 = z1 - z4; | 866 tmp0 = z1 - z4; |
867 tmp1 = z2 + z4; | 867 tmp1 = z2 + z4; |
868 tmp2 += z5; | 868 tmp2 += z5; |
869 tmp3 += z5; | 869 tmp3 += z5; |
870 } else { | 870 } else { |
871 /* d1 == 0, d3 != 0, d5 == 0, d7 == 0 */ | 871 /* d1 == 0, d3 != 0, d5 == 0, d7 == 0 */ |
872 tmp0 = MULTIPLY(-d3, FIX_0_785694958); | 872 tmp0 = MULTIPLY(-d3, FIX_0_785694958); |
873 tmp1 = MULTIPLY(-d3, FIX_1_387039845); | 873 tmp1 = MULTIPLY(-d3, FIX_1_387039845); |
874 tmp2 = MULTIPLY(-d3, FIX_0_275899380); | 874 tmp2 = MULTIPLY(-d3, FIX_0_275899380); |
875 tmp3 = MULTIPLY(d3, FIX_1_175875602); | 875 tmp3 = MULTIPLY(d3, FIX_1_175875602); |
876 } | 876 } |
877 } else { | 877 } else { |
878 if (d1) { | 878 if (d1) { |
879 /* d1 != 0, d3 == 0, d5 == 0, d7 == 0 */ | 879 /* d1 != 0, d3 == 0, d5 == 0, d7 == 0 */ |
880 tmp0 = MULTIPLY(d1, FIX_0_275899380); | 880 tmp0 = MULTIPLY(d1, FIX_0_275899380); |
881 tmp1 = MULTIPLY(d1, FIX_0_785694958); | 881 tmp1 = MULTIPLY(d1, FIX_0_785694958); |
882 tmp2 = MULTIPLY(d1, FIX_1_175875602); | 882 tmp2 = MULTIPLY(d1, FIX_1_175875602); |
883 tmp3 = MULTIPLY(d1, FIX_1_387039845); | 883 tmp3 = MULTIPLY(d1, FIX_1_387039845); |
884 } else { | 884 } else { |
885 /* d1 == 0, d3 == 0, d5 == 0, d7 == 0 */ | 885 /* d1 == 0, d3 == 0, d5 == 0, d7 == 0 */ |
886 tmp0 = tmp1 = tmp2 = tmp3 = 0; | 886 tmp0 = tmp1 = tmp2 = tmp3 = 0; |
887 } | 887 } |
888 } | 888 } |
889 } | 889 } |
890 } | 890 } |
891 | 891 |
892 /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ | 892 /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ |
893 | 893 |
894 dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp3, | 894 dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp3, |
895 CONST_BITS+PASS1_BITS+3); | 895 CONST_BITS+PASS1_BITS+3); |
896 dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp10 - tmp3, | 896 dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp10 - tmp3, |
897 CONST_BITS+PASS1_BITS+3); | 897 CONST_BITS+PASS1_BITS+3); |
898 dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp11 + tmp2, | 898 dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp11 + tmp2, |
899 CONST_BITS+PASS1_BITS+3); | 899 CONST_BITS+PASS1_BITS+3); |
900 dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(tmp11 - tmp2, | 900 dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(tmp11 - tmp2, |
901 CONST_BITS+PASS1_BITS+3); | 901 CONST_BITS+PASS1_BITS+3); |
902 dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(tmp12 + tmp1, | 902 dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(tmp12 + tmp1, |
903 CONST_BITS+PASS1_BITS+3); | 903 CONST_BITS+PASS1_BITS+3); |
904 dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp12 - tmp1, | 904 dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp12 - tmp1, |
905 CONST_BITS+PASS1_BITS+3); | 905 CONST_BITS+PASS1_BITS+3); |
906 dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp13 + tmp0, | 906 dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp13 + tmp0, |
907 CONST_BITS+PASS1_BITS+3); | 907 CONST_BITS+PASS1_BITS+3); |
908 dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp13 - tmp0, | 908 dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp13 - tmp0, |
909 CONST_BITS+PASS1_BITS+3); | 909 CONST_BITS+PASS1_BITS+3); |
910 | 910 |
911 dataptr++; /* advance pointer to next column */ | 911 dataptr++; /* advance pointer to next column */ |
912 } | 912 } |
913 } | 913 } |
914 | 914 |
915 #undef DCTSIZE | 915 #undef DCTSIZE |
916 #define DCTSIZE 4 | 916 #define DCTSIZE 4 |
951 d6 = dataptr[3]; | 951 d6 = dataptr[3]; |
952 | 952 |
953 if ((d2 | d4 | d6) == 0) { | 953 if ((d2 | d4 | d6) == 0) { |
954 /* AC terms all zero */ | 954 /* AC terms all zero */ |
955 if (d0) { | 955 if (d0) { |
956 /* Compute a 32 bit value to assign. */ | 956 /* Compute a 32 bit value to assign. */ |
957 DCTELEM dcval = (DCTELEM) (d0 << PASS1_BITS); | 957 DCTELEM dcval = (DCTELEM) (d0 << PASS1_BITS); |
958 register int v = (dcval & 0xffff) | ((dcval << 16) & 0xffff0000); | 958 register int v = (dcval & 0xffff) | ((dcval << 16) & 0xffff0000); |
959 | 959 |
960 idataptr[0] = v; | 960 idataptr[0] = v; |
961 idataptr[1] = v; | 961 idataptr[1] = v; |
962 } | 962 } |
963 | 963 |
964 dataptr += DCTSTRIDE; /* advance pointer to next row */ | 964 dataptr += DCTSTRIDE; /* advance pointer to next row */ |
965 continue; | 965 continue; |
966 } | 966 } |
967 | 967 |
968 /* Even part: reverse the even part of the forward DCT. */ | 968 /* Even part: reverse the even part of the forward DCT. */ |
969 /* The rotator is sqrt(2)*c(-6). */ | 969 /* The rotator is sqrt(2)*c(-6). */ |
970 if (d6) { | 970 if (d6) { |
971 if (d2) { | 971 if (d2) { |
972 /* d0 != 0, d2 != 0, d4 != 0, d6 != 0 */ | 972 /* d0 != 0, d2 != 0, d4 != 0, d6 != 0 */ |
973 z1 = MULTIPLY(d2 + d6, FIX_0_541196100); | 973 z1 = MULTIPLY(d2 + d6, FIX_0_541196100); |
974 tmp2 = z1 + MULTIPLY(-d6, FIX_1_847759065); | 974 tmp2 = z1 + MULTIPLY(-d6, FIX_1_847759065); |
975 tmp3 = z1 + MULTIPLY(d2, FIX_0_765366865); | 975 tmp3 = z1 + MULTIPLY(d2, FIX_0_765366865); |
976 | 976 |
977 tmp0 = (d0 + d4) << CONST_BITS; | 977 tmp0 = (d0 + d4) << CONST_BITS; |
978 tmp1 = (d0 - d4) << CONST_BITS; | 978 tmp1 = (d0 - d4) << CONST_BITS; |
979 | 979 |
980 tmp10 = tmp0 + tmp3; | 980 tmp10 = tmp0 + tmp3; |
981 tmp13 = tmp0 - tmp3; | 981 tmp13 = tmp0 - tmp3; |
982 tmp11 = tmp1 + tmp2; | 982 tmp11 = tmp1 + tmp2; |
983 tmp12 = tmp1 - tmp2; | 983 tmp12 = tmp1 - tmp2; |
984 } else { | 984 } else { |
985 /* d0 != 0, d2 == 0, d4 != 0, d6 != 0 */ | 985 /* d0 != 0, d2 == 0, d4 != 0, d6 != 0 */ |
986 tmp2 = MULTIPLY(-d6, FIX_1_306562965); | 986 tmp2 = MULTIPLY(-d6, FIX_1_306562965); |
987 tmp3 = MULTIPLY(d6, FIX_0_541196100); | 987 tmp3 = MULTIPLY(d6, FIX_0_541196100); |
988 | 988 |
989 tmp0 = (d0 + d4) << CONST_BITS; | 989 tmp0 = (d0 + d4) << CONST_BITS; |
990 tmp1 = (d0 - d4) << CONST_BITS; | 990 tmp1 = (d0 - d4) << CONST_BITS; |
991 | 991 |
992 tmp10 = tmp0 + tmp3; | 992 tmp10 = tmp0 + tmp3; |
993 tmp13 = tmp0 - tmp3; | 993 tmp13 = tmp0 - tmp3; |
994 tmp11 = tmp1 + tmp2; | 994 tmp11 = tmp1 + tmp2; |
995 tmp12 = tmp1 - tmp2; | 995 tmp12 = tmp1 - tmp2; |
996 } | 996 } |
997 } else { | 997 } else { |
998 if (d2) { | 998 if (d2) { |
999 /* d0 != 0, d2 != 0, d4 != 0, d6 == 0 */ | 999 /* d0 != 0, d2 != 0, d4 != 0, d6 == 0 */ |
1000 tmp2 = MULTIPLY(d2, FIX_0_541196100); | 1000 tmp2 = MULTIPLY(d2, FIX_0_541196100); |
1001 tmp3 = MULTIPLY(d2, FIX_1_306562965); | 1001 tmp3 = MULTIPLY(d2, FIX_1_306562965); |
1002 | 1002 |
1003 tmp0 = (d0 + d4) << CONST_BITS; | 1003 tmp0 = (d0 + d4) << CONST_BITS; |
1004 tmp1 = (d0 - d4) << CONST_BITS; | 1004 tmp1 = (d0 - d4) << CONST_BITS; |
1005 | 1005 |
1006 tmp10 = tmp0 + tmp3; | 1006 tmp10 = tmp0 + tmp3; |
1007 tmp13 = tmp0 - tmp3; | 1007 tmp13 = tmp0 - tmp3; |
1008 tmp11 = tmp1 + tmp2; | 1008 tmp11 = tmp1 + tmp2; |
1009 tmp12 = tmp1 - tmp2; | 1009 tmp12 = tmp1 - tmp2; |
1010 } else { | 1010 } else { |
1011 /* d0 != 0, d2 == 0, d4 != 0, d6 == 0 */ | 1011 /* d0 != 0, d2 == 0, d4 != 0, d6 == 0 */ |
1012 tmp10 = tmp13 = (d0 + d4) << CONST_BITS; | 1012 tmp10 = tmp13 = (d0 + d4) << CONST_BITS; |
1013 tmp11 = tmp12 = (d0 - d4) << CONST_BITS; | 1013 tmp11 = tmp12 = (d0 - d4) << CONST_BITS; |
1014 } | 1014 } |
1015 } | 1015 } |
1016 | 1016 |
1017 /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ | 1017 /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ |
1018 | 1018 |
1019 dataptr[0] = (DCTELEM) DESCALE(tmp10, CONST_BITS-PASS1_BITS); | 1019 dataptr[0] = (DCTELEM) DESCALE(tmp10, CONST_BITS-PASS1_BITS); |
1020 dataptr[1] = (DCTELEM) DESCALE(tmp11, CONST_BITS-PASS1_BITS); | 1020 dataptr[1] = (DCTELEM) DESCALE(tmp11, CONST_BITS-PASS1_BITS); |
1021 dataptr[2] = (DCTELEM) DESCALE(tmp12, CONST_BITS-PASS1_BITS); | 1021 dataptr[2] = (DCTELEM) DESCALE(tmp12, CONST_BITS-PASS1_BITS); |
1022 dataptr[3] = (DCTELEM) DESCALE(tmp13, CONST_BITS-PASS1_BITS); | 1022 dataptr[3] = (DCTELEM) DESCALE(tmp13, CONST_BITS-PASS1_BITS); |
1023 | 1023 |
1024 dataptr += DCTSTRIDE; /* advance pointer to next row */ | 1024 dataptr += DCTSTRIDE; /* advance pointer to next row */ |
1025 } | 1025 } |
1026 | 1026 |
1027 /* Pass 2: process columns. */ | 1027 /* Pass 2: process columns. */ |
1028 /* Note that we must descale the results by a factor of 8 == 2**3, */ | 1028 /* Note that we must descale the results by a factor of 8 == 2**3, */ |
1029 /* and also undo the PASS1_BITS scaling. */ | 1029 /* and also undo the PASS1_BITS scaling. */ |
1044 d6 = dataptr[DCTSTRIDE*3]; | 1044 d6 = dataptr[DCTSTRIDE*3]; |
1045 | 1045 |
1046 /* Even part: reverse the even part of the forward DCT. */ | 1046 /* Even part: reverse the even part of the forward DCT. */ |
1047 /* The rotator is sqrt(2)*c(-6). */ | 1047 /* The rotator is sqrt(2)*c(-6). */ |
1048 if (d6) { | 1048 if (d6) { |
1049 if (d2) { | 1049 if (d2) { |
1050 /* d0 != 0, d2 != 0, d4 != 0, d6 != 0 */ | 1050 /* d0 != 0, d2 != 0, d4 != 0, d6 != 0 */ |
1051 z1 = MULTIPLY(d2 + d6, FIX_0_541196100); | 1051 z1 = MULTIPLY(d2 + d6, FIX_0_541196100); |
1052 tmp2 = z1 + MULTIPLY(-d6, FIX_1_847759065); | 1052 tmp2 = z1 + MULTIPLY(-d6, FIX_1_847759065); |
1053 tmp3 = z1 + MULTIPLY(d2, FIX_0_765366865); | 1053 tmp3 = z1 + MULTIPLY(d2, FIX_0_765366865); |
1054 | 1054 |
1055 tmp0 = (d0 + d4) << CONST_BITS; | 1055 tmp0 = (d0 + d4) << CONST_BITS; |
1056 tmp1 = (d0 - d4) << CONST_BITS; | 1056 tmp1 = (d0 - d4) << CONST_BITS; |
1057 | 1057 |
1058 tmp10 = tmp0 + tmp3; | 1058 tmp10 = tmp0 + tmp3; |
1059 tmp13 = tmp0 - tmp3; | 1059 tmp13 = tmp0 - tmp3; |
1060 tmp11 = tmp1 + tmp2; | 1060 tmp11 = tmp1 + tmp2; |
1061 tmp12 = tmp1 - tmp2; | 1061 tmp12 = tmp1 - tmp2; |
1062 } else { | 1062 } else { |
1063 /* d0 != 0, d2 == 0, d4 != 0, d6 != 0 */ | 1063 /* d0 != 0, d2 == 0, d4 != 0, d6 != 0 */ |
1064 tmp2 = MULTIPLY(-d6, FIX_1_306562965); | 1064 tmp2 = MULTIPLY(-d6, FIX_1_306562965); |
1065 tmp3 = MULTIPLY(d6, FIX_0_541196100); | 1065 tmp3 = MULTIPLY(d6, FIX_0_541196100); |
1066 | 1066 |
1067 tmp0 = (d0 + d4) << CONST_BITS; | 1067 tmp0 = (d0 + d4) << CONST_BITS; |
1068 tmp1 = (d0 - d4) << CONST_BITS; | 1068 tmp1 = (d0 - d4) << CONST_BITS; |
1069 | 1069 |
1070 tmp10 = tmp0 + tmp3; | 1070 tmp10 = tmp0 + tmp3; |
1071 tmp13 = tmp0 - tmp3; | 1071 tmp13 = tmp0 - tmp3; |
1072 tmp11 = tmp1 + tmp2; | 1072 tmp11 = tmp1 + tmp2; |
1073 tmp12 = tmp1 - tmp2; | 1073 tmp12 = tmp1 - tmp2; |
1074 } | 1074 } |
1075 } else { | 1075 } else { |
1076 if (d2) { | 1076 if (d2) { |
1077 /* d0 != 0, d2 != 0, d4 != 0, d6 == 0 */ | 1077 /* d0 != 0, d2 != 0, d4 != 0, d6 == 0 */ |
1078 tmp2 = MULTIPLY(d2, FIX_0_541196100); | 1078 tmp2 = MULTIPLY(d2, FIX_0_541196100); |
1079 tmp3 = MULTIPLY(d2, FIX_1_306562965); | 1079 tmp3 = MULTIPLY(d2, FIX_1_306562965); |
1080 | 1080 |
1081 tmp0 = (d0 + d4) << CONST_BITS; | 1081 tmp0 = (d0 + d4) << CONST_BITS; |
1082 tmp1 = (d0 - d4) << CONST_BITS; | 1082 tmp1 = (d0 - d4) << CONST_BITS; |
1083 | 1083 |
1084 tmp10 = tmp0 + tmp3; | 1084 tmp10 = tmp0 + tmp3; |
1085 tmp13 = tmp0 - tmp3; | 1085 tmp13 = tmp0 - tmp3; |
1086 tmp11 = tmp1 + tmp2; | 1086 tmp11 = tmp1 + tmp2; |
1087 tmp12 = tmp1 - tmp2; | 1087 tmp12 = tmp1 - tmp2; |
1088 } else { | 1088 } else { |
1089 /* d0 != 0, d2 == 0, d4 != 0, d6 == 0 */ | 1089 /* d0 != 0, d2 == 0, d4 != 0, d6 == 0 */ |
1090 tmp10 = tmp13 = (d0 + d4) << CONST_BITS; | 1090 tmp10 = tmp13 = (d0 + d4) << CONST_BITS; |
1091 tmp11 = tmp12 = (d0 - d4) << CONST_BITS; | 1091 tmp11 = tmp12 = (d0 - d4) << CONST_BITS; |
1092 } | 1092 } |
1093 } | 1093 } |
1094 | 1094 |
1095 /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ | 1095 /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ |
1096 | 1096 |
1097 dataptr[DCTSTRIDE*0] = tmp10 >> (CONST_BITS+PASS1_BITS+3); | 1097 dataptr[DCTSTRIDE*0] = tmp10 >> (CONST_BITS+PASS1_BITS+3); |
1098 dataptr[DCTSTRIDE*1] = tmp11 >> (CONST_BITS+PASS1_BITS+3); | 1098 dataptr[DCTSTRIDE*1] = tmp11 >> (CONST_BITS+PASS1_BITS+3); |
1099 dataptr[DCTSTRIDE*2] = tmp12 >> (CONST_BITS+PASS1_BITS+3); | 1099 dataptr[DCTSTRIDE*2] = tmp12 >> (CONST_BITS+PASS1_BITS+3); |
1100 dataptr[DCTSTRIDE*3] = tmp13 >> (CONST_BITS+PASS1_BITS+3); | 1100 dataptr[DCTSTRIDE*3] = tmp13 >> (CONST_BITS+PASS1_BITS+3); |
1101 | 1101 |
1102 dataptr++; /* advance pointer to next column */ | 1102 dataptr++; /* advance pointer to next column */ |
1103 } | 1103 } |
1104 } | 1104 } |
1105 | 1105 |
1106 void j_rev_dct2(DCTBLOCK data){ | 1106 void j_rev_dct2(DCTBLOCK data){ |
1107 int d00, d01, d10, d11; | 1107 int d00, d01, d10, d11; |