shithub: libvpx

Download patch

ref: bbf4c91f79132a050f104566f91620049af7fbf2
parent: 9fdeeaf41106894ea1a3564cb081207c3a9a5938
author: Linfeng Zhang <linfengz@google.com>
date: Wed Aug 3 07:02:15 EDT 2016

Update Loop8Test{6,9}Param to test filter8() in mb_lpf_vertical_edge_w()

One branch of filter8() in mb_lpf_vertical_edge_w() was not tested.

Change-Id: I194202d771d9acd6b4e5e600ee2bae89986b49f3

--- a/test/lpf_8_test.cc
+++ b/test/lpf_8_test.cc
@@ -95,7 +95,7 @@
   ACMRandom rnd(ACMRandom::DeterministicSeed());
   const int count_test_block = number_of_iterations;
 #if CONFIG_VP9_HIGHBITDEPTH
-  int32_t bd = bit_depth_;
+  const int32_t bd = bit_depth_;
   DECLARE_ALIGNED(16, uint16_t, s[kNumCoeffs]);
   DECLARE_ALIGNED(16, uint16_t, ref_s[kNumCoeffs]);
 #else
@@ -119,7 +119,6 @@
                     thresh[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,
                                     tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp };
     int32_t p = kNumCoeffs / 32;
-
     uint16_t tmp_s[kNumCoeffs];
     int j = 0;
     while (j < kNumCoeffs) {
@@ -127,18 +126,33 @@
       if (val & 0x80) {  // 50% chance to choose a new value.
         tmp_s[j] = rnd.Rand16();
         j++;
-      } else {  // 50% chance to repeat previous value in row X times
+      } else if (val & 0x40) {
+        // 25% chance to repeat previous value in row X times.
         int k = 0;
         while (k++ < ((val & 0x1f) + 1) && j < kNumCoeffs) {
           if (j < 1) {
             tmp_s[j] = rnd.Rand16();
-          } else if (val & 0x20) {  // Increment by an value within the limit
-            tmp_s[j] = (tmp_s[j - 1] + (*limit - 1));
-          } else {  // Decrement by an value within the limit
-            tmp_s[j] = (tmp_s[j - 1] - (*limit - 1));
+          } else if (val & 0x20) {  // Increment by a value within the limit.
+            tmp_s[j] = tmp_s[j - 1] + (*limit - 1);
+          } else {  // Decrement by a value within the limit.
+            tmp_s[j] = tmp_s[j - 1] - (*limit - 1);
           }
           j++;
         }
+      } else {  // 25% chance to repeat previous value in column X times.
+        int k = 0;
+        while (k++ < ((val & 0x1f) + 1) && j < kNumCoeffs) {
+          if (j < 1) {
+            tmp_s[j] = rnd.Rand16();
+          } else if (val & 0x20) {  // Increment by a value within the limit.
+            tmp_s[(j % 32) * 32 + j / 32] =
+                tmp_s[((j - 1) % 32) * 32 + (j - 1) / 32] + (*limit - 1);
+          } else {  // Decrement by a value within the limit.
+            tmp_s[(j % 32) * 32 + j / 32] =
+                tmp_s[((j - 1) % 32) * 32 + (j - 1) / 32] - (*limit - 1);
+          }
+          j++;
+        }
       }
     }
     for (j = 0; j < kNumCoeffs; j++) {
@@ -227,6 +241,7 @@
     ASM_REGISTER_STATE_CHECK(
         loopfilter_op_(s + 8 + p * 8, p, blimit, limit, thresh));
 #endif  // CONFIG_VP9_HIGHBITDEPTH
+
     for (int j = 0; j < kNumCoeffs; ++j) {
       err_count += ref_s[j] != s[j];
     }
@@ -289,15 +304,30 @@
       if (val & 0x80) {  // 50% chance to choose a new value.
         tmp_s[j] = rnd.Rand16();
         j++;
-      } else {  // 50% chance to repeat previous value in row X times.
+      } else if (val & 0x40) {
+        // 25% chance to repeat previous value in row X times.
         int k = 0;
         while (k++ < ((val & 0x1f) + 1) && j < kNumCoeffs) {
           if (j < 1) {
             tmp_s[j] = rnd.Rand16();
           } else if (val & 0x20) {  // Increment by a value within the limit.
-            tmp_s[j] = (tmp_s[j - 1] + (limit - 1));
-          } else {  // Decrement by an value within the limit.
-            tmp_s[j] = (tmp_s[j - 1] - (limit - 1));
+            tmp_s[j] = tmp_s[j - 1] + (limit - 1);
+          } else {  // Decrement by a value within the limit.
+            tmp_s[j] = tmp_s[j - 1] - (limit - 1);
+          }
+          j++;
+        }
+      } else {  // 25% chance to repeat previous value in column X times.
+        int k = 0;
+        while (k++ < ((val & 0x1f) + 1) && j < kNumCoeffs) {
+          if (j < 1) {
+            tmp_s[j] = rnd.Rand16();
+          } else if (val & 0x20) {  // Increment by a value within the limit.
+            tmp_s[(j % 32) * 32 + j / 32] =
+                tmp_s[((j - 1) % 32) * 32 + (j - 1) / 32] + (limit - 1);
+          } else {  // Decrement by a value within the limit.
+            tmp_s[(j % 32) * 32 + j / 32] =
+                tmp_s[((j - 1) % 32) * 32 + (j - 1) / 32] - (limit - 1);
           }
           j++;
         }