[NORMATIVE] Let tx64 scan match tx32 scan

Change-Id: Icf0d95b4a71a0dfedcbe5466c7b3769de64b1deb
diff --git a/av1/common/scan.c b/av1/common/scan.c
index c480e5c..98f019f 100644
--- a/av1/common/scan.c
+++ b/av1/common/scan.c
@@ -3214,18 +3214,14 @@
   978,  979,  995,  996,  1008, 1009, 1017, 1018, 1022, 1023
 };
 
-#define av1_default_iscan_32x64 av1_default_iscan_32x32
-#define av1_default_iscan_64x32 av1_default_iscan_32x32
-#define av1_default_iscan_64x64 av1_default_iscan_32x32
-#define av1_default_iscan_16x64 av1_default_iscan_16x32
-#define av1_default_iscan_64x16 av1_default_iscan_32x16
-
 const SCAN_ORDER av1_default_scan_orders[TX_SIZES] = {
   { default_scan_4x4, av1_default_iscan_4x4, default_scan_4x4_neighbors },
   { default_scan_8x8, av1_default_iscan_8x8, default_scan_8x8_neighbors },
   { default_scan_16x16, av1_default_iscan_16x16, default_scan_16x16_neighbors },
   { default_scan_32x32, av1_default_iscan_32x32, default_scan_32x32_neighbors },
-  { default_scan_64x64, av1_default_iscan_64x64, default_scan_64x64_neighbors },
+  // Half of the coefficients of tx64 at higher frequencies are set to
+  // zeros. So tx32's scan order is used.
+  { default_scan_32x32, av1_default_iscan_32x32, default_scan_32x32_neighbors },
 };
 
 const SCAN_ORDER av1_scan_orders[TX_SIZES_ALL][TX_TYPES] = {
@@ -3327,38 +3323,34 @@
   },
   {
       // TX_64X64
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
-      { default_scan_64x64, av1_default_iscan_64x64,
-        default_scan_64x64_neighbors },
+      // Half of the coefficients of tx64 at higher frequencies are set to
+      // zeros. So tx32's scan order is used.
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors },
+      { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors },
+      { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors },
+      { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors },
+      { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors },
+      { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors },
   },
   {
       // TX_4X8
@@ -3516,73 +3508,65 @@
   },
   {
       // TX_32X64
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
-      { default_scan_32x64, av1_default_iscan_32x64,
-        default_scan_32x64_neighbors },
+      // Half of the coefficients of tx64 at higher frequencies are set to
+      // zeros. So tx32's scan order is used.
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors },
+      { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors },
+      { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors },
+      { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors },
+      { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors },
+      { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors },
   },
   {
       // TX_64X32
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
-      { default_scan_64x32, av1_default_iscan_64x32,
-        default_scan_64x32_neighbors },
+      // Half of the coefficients of tx64 at higher frequencies are set to
+      // zeros. So tx32's scan order is used.
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { default_scan_32x32, av1_default_iscan_32x32,
+        default_scan_32x32_neighbors },
+      { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors },
+      { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors },
+      { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors },
+      { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors },
+      { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors },
+      { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors },
   },
   {
       // TX_4X16
@@ -3702,72 +3686,64 @@
   },
   {
       // TX_16X64
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
-      { default_scan_16x64, av1_default_iscan_16x64,
-        default_scan_16x64_neighbors },
+      // Half of the coefficients of tx64 at higher frequencies are set to
+      // zeros. So tx32's scan order is used.
+      { default_scan_16x32, av1_default_iscan_16x32,
+        default_scan_16x32_neighbors },
+      { default_scan_16x32, av1_default_iscan_16x32,
+        default_scan_16x32_neighbors },
+      { default_scan_16x32, av1_default_iscan_16x32,
+        default_scan_16x32_neighbors },
+      { default_scan_16x32, av1_default_iscan_16x32,
+        default_scan_16x32_neighbors },
+      { default_scan_16x32, av1_default_iscan_16x32,
+        default_scan_16x32_neighbors },
+      { default_scan_16x32, av1_default_iscan_16x32,
+        default_scan_16x32_neighbors },
+      { default_scan_16x32, av1_default_iscan_16x32,
+        default_scan_16x32_neighbors },
+      { default_scan_16x32, av1_default_iscan_16x32,
+        default_scan_16x32_neighbors },
+      { default_scan_16x32, av1_default_iscan_16x32,
+        default_scan_16x32_neighbors },
+      { default_scan_16x32, av1_default_iscan_16x32,
+        default_scan_16x32_neighbors },
+      { mrow_scan_16x32, av1_mrow_iscan_16x32, mrow_scan_16x32_neighbors },
+      { mcol_scan_16x32, av1_mcol_iscan_16x32, mcol_scan_16x32_neighbors },
+      { mrow_scan_16x32, av1_mrow_iscan_16x32, mrow_scan_16x32_neighbors },
+      { mcol_scan_16x32, av1_mcol_iscan_16x32, mcol_scan_16x32_neighbors },
+      { mrow_scan_16x32, av1_mrow_iscan_16x32, mrow_scan_16x32_neighbors },
+      { mcol_scan_16x32, av1_mcol_iscan_16x32, mcol_scan_16x32_neighbors },
   },
   {
       // TX_64X16
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
-      { default_scan_64x16, av1_default_iscan_64x16,
-        default_scan_64x16_neighbors },
+      // Half of the coefficients of tx64 at higher frequencies are set to
+      // zeros. So tx32's scan order is used.
+      { default_scan_32x16, av1_default_iscan_32x16,
+        default_scan_32x16_neighbors },
+      { default_scan_32x16, av1_default_iscan_32x16,
+        default_scan_32x16_neighbors },
+      { default_scan_32x16, av1_default_iscan_32x16,
+        default_scan_32x16_neighbors },
+      { default_scan_32x16, av1_default_iscan_32x16,
+        default_scan_32x16_neighbors },
+      { default_scan_32x16, av1_default_iscan_32x16,
+        default_scan_32x16_neighbors },
+      { default_scan_32x16, av1_default_iscan_32x16,
+        default_scan_32x16_neighbors },
+      { default_scan_32x16, av1_default_iscan_32x16,
+        default_scan_32x16_neighbors },
+      { default_scan_32x16, av1_default_iscan_32x16,
+        default_scan_32x16_neighbors },
+      { default_scan_32x16, av1_default_iscan_32x16,
+        default_scan_32x16_neighbors },
+      { default_scan_32x16, av1_default_iscan_32x16,
+        default_scan_32x16_neighbors },
+      { mrow_scan_32x16, av1_mrow_iscan_32x16, mrow_scan_32x16_neighbors },
+      { mcol_scan_32x16, av1_mcol_iscan_32x16, mcol_scan_32x16_neighbors },
+      { mrow_scan_32x16, av1_mrow_iscan_32x16, mrow_scan_32x16_neighbors },
+      { mcol_scan_32x16, av1_mcol_iscan_32x16, mcol_scan_32x16_neighbors },
+      { mrow_scan_32x16, av1_mrow_iscan_32x16, mrow_scan_32x16_neighbors },
+      { mcol_scan_32x16, av1_mcol_iscan_32x16, mcol_scan_32x16_neighbors },
   },
 };
diff --git a/test/scan_test.cc b/test/scan_test.cc
index 4f312f8..872651a 100644
--- a/test/scan_test.cc
+++ b/test/scan_test.cc
@@ -107,7 +107,7 @@
       }
       SCAN_MODE scan_mode;
       TX_CLASS tx_class = tx_type_to_class[(TX_TYPE)tx_type];
-      if ((tx_class == TX_CLASS_2D) || org_rows == 64 || org_cols == 64) {
+      if (tx_class == TX_CLASS_2D) {
         if (rows == cols) {
           scan_mode = SCAN_MODE_ZIG_ZAG;
         } else if (rows > cols) {