shithub: libvpx

Download patch

ref: 45db71d0acd4705d554cec5828ceec3515791382
parent: 6201a256f48c7fccbe2c1f7778ad75b0693ac6d9
author: Angie Chiang <angiebird@google.com>
date: Wed Aug 26 13:40:52 EDT 2015

Expand the idct4_c() function in idct8_c()

Change-Id: I5afa3c351ba7c5e7deb3889f7471619ac60af255

--- a/vpx_dsp/inv_txfm.c
+++ b/vpx_dsp/inv_txfm.c
@@ -170,16 +170,25 @@
   step1[5] = WRAPLOW(dct_const_round_shift(temp1), 8);
   step1[6] = WRAPLOW(dct_const_round_shift(temp2), 8);
 
-  // stage 2 & stage 3 - even half
-  idct4_c(step1, step1);
-
-  // stage 2 - odd half
+  // stage 2
+  temp1 = (step1[0] + step1[2]) * cospi_16_64;
+  temp2 = (step1[0] - step1[2]) * cospi_16_64;
+  step2[0] = WRAPLOW(dct_const_round_shift(temp1), 8);
+  step2[1] = WRAPLOW(dct_const_round_shift(temp2), 8);
+  temp1 = step1[1] * cospi_24_64 - step1[3] * cospi_8_64;
+  temp2 = step1[1] * cospi_8_64 + step1[3] * cospi_24_64;
+  step2[2] = WRAPLOW(dct_const_round_shift(temp1), 8);
+  step2[3] = WRAPLOW(dct_const_round_shift(temp2), 8);
   step2[4] = WRAPLOW(step1[4] + step1[5], 8);
   step2[5] = WRAPLOW(step1[4] - step1[5], 8);
   step2[6] = WRAPLOW(-step1[6] + step1[7], 8);
   step2[7] = WRAPLOW(step1[6] + step1[7], 8);
 
-  // stage 3 -odd half
+  // stage 3
+  step1[0] = WRAPLOW(step2[0] + step2[3], 8);
+  step1[1] = WRAPLOW(step2[1] + step2[2], 8);
+  step1[2] = WRAPLOW(step2[1] - step2[2], 8);
+  step1[3] = WRAPLOW(step2[0] - step2[3], 8);
   step1[4] = step2[4];
   temp1 = (step2[6] - step2[5]) * cospi_16_64;
   temp2 = (step2[5] + step2[6]) * cospi_16_64;