shithub: libvpx

Download patch

ref: 042e70e45e74ad5105d1c9f35375350000b56b39
parent: 5e97862a71b69ae9c552084386a5dd86df74e3dc
author: Yaowu Xu <yaowu@google.com>
date: Thu May 30 10:24:12 EDT 2013

Changed to use a new variant of WHT

The commit changed to use a new variant of Walsh-Hadamard Transform
by Tim Terriberry. This new variant has the best compression among a
number of variants that developed by Tim.

Change-Id: Icb3a88515463cfc644b17ca046fcd139db2557e9

--- a/vp9/common/vp9_idct.c
+++ b/vp9/common/vp9_idct.c
@@ -32,20 +32,17 @@
     c1 = ip[1] >> WHT_UPSCALE_FACTOR;
     d1 = ip[2] >> WHT_UPSCALE_FACTOR;
     b1 = ip[3] >> WHT_UPSCALE_FACTOR;
-
-    c1 = a1 - c1;
-    b1 += d1;
-    e1 = (c1 - b1) >> 1;
-    a1 -= e1;
-    d1 += e1;
-    b1 = a1 - b1;
-    c1 -= d1;
-
+    a1 += c1;
+    d1 -= b1;
+    e1 = (a1 - d1) >> 1;
+    b1 = e1 - b1;
+    c1 = e1 - c1;
+    a1 -= b1;
+    d1 += c1;
     op[0] = a1;
     op[1] = b1;
     op[2] = c1;
     op[3] = d1;
-
     ip += 4;
     op += 4;
   }
@@ -56,15 +53,13 @@
     c1 = ip[4 * 1];
     d1 = ip[4 * 2];
     b1 = ip[4 * 3];
-
-    c1 = a1 - c1;
-    b1 += d1;
-    e1 = (c1 - b1) >> 1;
-    a1 -= e1;
-    d1 += e1;
-    b1 = a1 - b1;
-    c1 -= d1;
-
+    a1 += c1;
+    d1 -= b1;
+    e1 = (a1 - d1) >> 1;
+    b1 = e1 - b1;
+    c1 = e1 - c1;
+    a1 -= b1;
+    d1 += c1;
     dest[dest_stride * 0] = clip_pixel(dest[dest_stride * 0] + a1);
     dest[dest_stride * 1] = clip_pixel(dest[dest_stride * 1] + b1);
     dest[dest_stride * 2] = clip_pixel(dest[dest_stride * 2] + c1);
@@ -84,8 +79,9 @@
 
   a1 = ip[0] >> WHT_UPSCALE_FACTOR;
   e1 = a1 >> 1;
-  op[0] = op[1] = op[2] = a1 - e1;
-  op[3] = e1;
+  a1 -= e1;
+  op[0] = a1;
+  op[1] = op[2] = op[3] = e1;
 
   ip = tmp;
   for (i = 0; i < 4; i++) {
@@ -92,8 +88,8 @@
     e1 = ip[0] >> 1;
     a1 = ip[0] - e1;
     dest[dest_stride * 0] = clip_pixel(dest[dest_stride * 0] + a1);
-    dest[dest_stride * 1] = clip_pixel(dest[dest_stride * 1] + a1);
-    dest[dest_stride * 2] = clip_pixel(dest[dest_stride * 2] + a1);
+    dest[dest_stride * 1] = clip_pixel(dest[dest_stride * 1] + e1);
+    dest[dest_stride * 2] = clip_pixel(dest[dest_stride * 2] + e1);
     dest[dest_stride * 3] = clip_pixel(dest[dest_stride * 3] + e1);
     ip++;
     dest++;
--- a/vp9/common/vp9_idct.h
+++ b/vp9/common/vp9_idct.h
@@ -17,6 +17,7 @@
 #include "vpx/vpx_integer.h"
 #include "vp9/common/vp9_common.h"
 
+
 // Constants and Macros used by all idct/dct functions
 #define DCT_CONST_BITS 14
 #define DCT_CONST_ROUNDING  (1 << (DCT_CONST_BITS - 1))
--- a/vp9/encoder/vp9_dct.c
+++ b/vp9/encoder/vp9_dct.c
@@ -606,14 +606,13 @@
     c1 = ip[2 * pitch_short];
     d1 = ip[3 * pitch_short];
 
-    b1 = a1 - b1;
-    c1 += d1;
-    e1 = (c1 - b1) >> 1;
-    a1 += e1;
-    d1 -= e1;
-    c1 = a1 - c1;
-    b1 -= d1;
-
+    a1 += b1;
+    d1 = d1 - c1;
+    e1 = (a1 - d1) >> 1;
+    b1 = e1 - b1;
+    c1 = e1 - c1;
+    a1 -= c1;
+    d1 += b1;
     op[0] = a1;
     op[4] = c1;
     op[8] = d1;
@@ -631,14 +630,13 @@
     c1 = ip[2];
     d1 = ip[3];
 
-    b1 = a1 - b1;
-    c1 += d1;
-    e1 = (c1 - b1) >> 1;
-    a1 += e1;
-    d1 -= e1;
-    c1 = a1 - c1;
-    b1 -= d1;
-
+    a1 += b1;
+    d1 -= c1;
+    e1 = (a1 - d1) >> 1;
+    b1 = e1 - b1;
+    c1 = e1 - c1;
+    a1 -= c1;
+    d1 += b1;
     op[0] = a1 << WHT_UPSCALE_FACTOR;
     op[1] = c1 << WHT_UPSCALE_FACTOR;
     op[2] = d1 << WHT_UPSCALE_FACTOR;