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;