Bitmask: assign 32x32 and 64x64 mask to 16x16

In AV1, max filter length is 16. So we union masks of tx size larger
than 16x16.

Change-Id: Ia9ce222d9b4baab4db879cb40f6d2c62f30bc2cc
diff --git a/av1/common/av1_loopfilter.c b/av1/common/av1_loopfilter.c
index 8716f4d..1735ca6 100644
--- a/av1/common/av1_loopfilter.c
+++ b/av1/common/av1_loopfilter.c
@@ -1059,12 +1059,37 @@
   setup_block_mask(cm, mi_row, mi_col, cm->seq_params.sb_size, plane,
                    subsampling_x, subsampling_y, lfm);
 
-  {
-    // place hoder: for potential special case handling.
-  }
-
   // check if the mask is valid
   check_loop_filter_masks(lfm);
+
+  {
+    // place hoder: for potential special case handling.
+
+    // Let 16x16 hold 32x32 (Y/U/V) and 64x64(Y only).
+    // Even tx size is greater, we only apply max length filter, which is 16.
+    for (int i = 0; i < LOOP_FILTER_MASK_NUM; ++i) {
+      if (plane == 0) {
+        for (int j = 0; j < 4; ++j) {
+          lfm->lfm_info[i].left_y[TX_16X16].bits[j] |=
+              lfm->lfm_info[i].left_y[TX_32X32].bits[j];
+          lfm->lfm_info[i].left_y[TX_16X16].bits[j] |=
+              lfm->lfm_info[i].left_y[TX_64X64].bits[j];
+          lfm->lfm_info[i].above_y[TX_16X16].bits[j] |=
+              lfm->lfm_info[i].above_y[TX_32X32].bits[j];
+          lfm->lfm_info[i].above_y[TX_16X16].bits[j] |=
+              lfm->lfm_info[i].above_y[TX_64X64].bits[j];
+        }
+      } else if (plane == 1) {
+        lfm->lfm_info[i].left_u[TX_16X16] |= lfm->lfm_info[i].left_u[TX_32X32];
+        lfm->lfm_info[i].above_u[TX_16X16] |=
+            lfm->lfm_info[i].above_u[TX_32X32];
+      } else {
+        lfm->lfm_info[i].left_v[TX_16X16] |= lfm->lfm_info[i].left_v[TX_32X32];
+        lfm->lfm_info[i].above_v[TX_16X16] |=
+            lfm->lfm_info[i].above_v[TX_32X32];
+      }
+    }
+  }
 }
 #endif  // LOOP_FILTER_BITMASK