Skip non-reference position chroma uv intra mode coding

Skip coding the intra mode for chroma component for sub8x8 blocks
that are not in the reference position.

Change-Id: Ic3daab2668ab41c3b743664faf195e34124ead33
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 7830ba9..0779c7a 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -1362,6 +1362,7 @@
 }
 
 static void pack_inter_mode_mvs(AV1_COMP *cpi, const MODE_INFO *mi,
+                                const int mi_row, const int mi_col,
 #if CONFIG_SUPERTX
                                 int supertx_enabled,
 #endif
@@ -1421,8 +1422,6 @@
 #endif  // CONFIG_SUPERTX
 #if CONFIG_DELTA_Q
   if (cm->delta_q_present_flag) {
-    int mi_row = (-xd->mb_to_top_edge) >> (MI_SIZE_LOG2 + 3);
-    int mi_col = (-xd->mb_to_left_edge) >> (MI_SIZE_LOG2 + 3);
     int super_block_upper_left =
         ((mi_row & MAX_MIB_MASK) == 0) && ((mi_col & MAX_MIB_MASK) == 0);
     if ((bsize != BLOCK_64X64 || skip == 0) && super_block_upper_left) {
@@ -1506,7 +1505,12 @@
     aom_write_symbol(w, av1_intra_mode_ind[mbmi->uv_mode],
                      ec_ctx->uv_mode_cdf[mode], INTRA_MODES);
 #else
+#if CONFIG_CB4X4
+    if (bsize >= BLOCK_8X8 || is_chroma_reference(mi_row, mi_col))
+      write_intra_mode(w, mbmi->uv_mode, cm->fc->uv_mode_prob[mode]);
+#else
     write_intra_mode(w, mbmi->uv_mode, cm->fc->uv_mode_prob[mode]);
+#endif  // CONFIG_CB4X4
 #endif
 #if CONFIG_EXT_INTRA
     write_intra_angle_info(cm, xd, w);
@@ -1766,11 +1770,13 @@
 }
 
 #if CONFIG_DELTA_Q
-static void write_mb_modes_kf(AV1_COMMON *cm, MACROBLOCKD *xd,
-                              MODE_INFO **mi_8x8, aom_writer *w) {
+static void write_mb_modes_kf(AV1_COMMON *cm, MACROBLOCKD *xd, const int mi_row,
+                              const int mi_col, MODE_INFO **mi_8x8,
+                              aom_writer *w) {
   int skip;
 #else
 static void write_mb_modes_kf(AV1_COMMON *cm, const MACROBLOCKD *xd,
+                              const int mi_row, const int mi_col,
                               MODE_INFO **mi_8x8, aom_writer *w) {
 #endif
   const struct segmentation *const seg = &cm->seg;
@@ -1797,8 +1803,6 @@
 #if CONFIG_DELTA_Q
   skip = write_skip(cm, xd, mbmi->segment_id, mi, w);
   if (cm->delta_q_present_flag) {
-    int mi_row = (-xd->mb_to_top_edge) >> 6;
-    int mi_col = (-xd->mb_to_left_edge) >> 6;
     int super_block_upper_left = ((mi_row & 7) == 0) && ((mi_col & 7) == 0);
     if ((bsize != BLOCK_64X64 || skip == 0) && super_block_upper_left) {
       int reduced_delta_qindex =
@@ -1856,7 +1860,12 @@
   aom_write_symbol(w, av1_intra_mode_ind[mbmi->uv_mode],
                    ec_ctx->uv_mode_cdf[mbmi->mode], INTRA_MODES);
 #else
+#if CONFIG_CB4X4
+  if (bsize >= BLOCK_8X8 || is_chroma_reference(mi_row, mi_col))
+    write_intra_mode(w, mbmi->uv_mode, cm->fc->uv_mode_prob[mbmi->mode]);
+#else
   write_intra_mode(w, mbmi->uv_mode, cm->fc->uv_mode_prob[mbmi->mode]);
+#endif  // CONFIG_CB4X4
 #endif
 #if CONFIG_EXT_INTRA
   write_intra_angle_info(cm, xd, w);
@@ -1972,7 +1981,7 @@
 #endif
 
   if (frame_is_intra_only(cm)) {
-    write_mb_modes_kf(cm, xd, xd->mi, w);
+    write_mb_modes_kf(cm, xd, mi_row, mi_col, xd->mi, w);
   } else {
 #if CONFIG_VAR_TX
     xd->above_txfm_context = cm->above_txfm_context + mi_col;
@@ -2009,7 +2018,7 @@
              m->mbmi.ref_frame[0], m->mbmi.ref_frame[1]);
     }
 #endif  // 0
-    pack_inter_mode_mvs(cpi, m,
+    pack_inter_mode_mvs(cpi, m, mi_row, mi_col,
 #if CONFIG_SUPERTX
                         supertx_enabled,
 #endif