Call tokenize_pvq() inside tokenize_b()

Since tokenize_b() is called by var-tx and several other experiments
during tokenization, in order for PVQ to run with those experiemnts
at the same time, it is required to call tokenize_pvq() from tokenize_b()
instead of av1_tokenize_sb().

Change-Id: I0450aa220b696efa3294952e47739acab707d483
diff --git a/av1/encoder/tokenize.c b/av1/encoder/tokenize.c
index a295701..9df6f93 100644
--- a/av1/encoder/tokenize.c
+++ b/av1/encoder/tokenize.c
@@ -441,7 +441,6 @@
 }
 #endif  // CONFIG_PALETTE
 
-#if !CONFIG_PVQ || CONFIG_VAR_TX
 #if CONFIG_PALETTE && CONFIG_PALETTE_THROUGHPUT
 void tokenize_palette_b(int plane, int block, int blk_row, int blk_col,
                         BLOCK_SIZE plane_bsize, TX_SIZE tx_size, void *arg) {
@@ -507,8 +506,50 @@
 }
 #endif  // CONFIG_PALETTE && CONFIG_PALETTE_THROUGHPUT
 
+#if CONFIG_PVQ
+static void add_pvq_block(AV1_COMMON *const cm, MACROBLOCK *const x,
+                          PVQ_INFO *pvq) {
+  PVQ_QUEUE *q = x->pvq_q;
+  if (q->curr_pos >= q->buf_len) {
+    int new_buf_len = 2 * q->buf_len + 1;
+    PVQ_INFO *new_buf;
+    CHECK_MEM_ERROR(cm, new_buf, aom_malloc(new_buf_len * sizeof(PVQ_INFO)));
+    memcpy(new_buf, q->buf, q->buf_len * sizeof(PVQ_INFO));
+    aom_free(q->buf);
+    q->buf = new_buf;
+    q->buf_len = new_buf_len;
+  }
+  OD_COPY(q->buf + q->curr_pos, pvq, 1);
+  ++q->curr_pos;
+}
+
+// NOTE: This does not actually generate tokens, instead we store the encoding
+// decisions made for PVQ in a queue that we will read from when
+// actually writing the bitstream in write_modes_b
+static void tokenize_pvq(int plane, int block, int blk_row, int blk_col,
+                         BLOCK_SIZE plane_bsize, TX_SIZE tx_size, void *arg) {
+  struct tokenize_b_args *const args = arg;
+  const AV1_COMP *cpi = args->cpi;
+  const AV1_COMMON *const cm = &cpi->common;
+  ThreadData *const td = args->td;
+  MACROBLOCK *const x = &td->mb;
+  PVQ_INFO *pvq_info;
+
+  (void)block;
+  (void)blk_row;
+  (void)blk_col;
+  (void)plane_bsize;
+  (void)tx_size;
+
+  assert(block < MAX_PVQ_BLOCKS_IN_SB);
+  pvq_info = &x->pvq[block][plane];
+  add_pvq_block((AV1_COMMON * const)cm, x, pvq_info);
+}
+#endif  // CONFIG_PVQ
+
 static void tokenize_b(int plane, int block, int blk_row, int blk_col,
                        BLOCK_SIZE plane_bsize, TX_SIZE tx_size, void *arg) {
+#if !CONFIG_PVQ
   struct tokenize_b_args *const args = arg;
   const AV1_COMP *cpi = args->cpi;
   const AV1_COMMON *const cm = &cpi->common;
@@ -663,6 +704,9 @@
 #endif
 
   av1_set_contexts(xd, pd, plane, tx_size, c > 0, blk_col, blk_row);
+#else   // !CONFIG_PVQ
+  tokenize_pvq(plane, block, blk_row, blk_col, plane_bsize, tx_size, arg);
+#endif  // !CONFIG_PVQ
 }
 
 #if CONFIG_PALETTE && CONFIG_PALETTE_THROUGHPUT
@@ -674,7 +718,6 @@
   tokenize_b(plane, block, blk_row, blk_col, plane_bsize, tx_size, arg);
 }
 #endif  // CONFIG_PALETTE && CONFIG_PALETTE_THROUGHPUT
-#endif  //  !CONFIG_PVQ
 
 struct is_skippable_args {
   uint16_t *eobs;
@@ -701,46 +744,6 @@
   return result;
 }
 
-#if CONFIG_PVQ
-void add_pvq_block(AV1_COMMON *const cm, MACROBLOCK *const x, PVQ_INFO *pvq) {
-  PVQ_QUEUE *q = x->pvq_q;
-  if (q->curr_pos >= q->buf_len) {
-    int new_buf_len = 2 * q->buf_len + 1;
-    PVQ_INFO *new_buf;
-    CHECK_MEM_ERROR(cm, new_buf, aom_malloc(new_buf_len * sizeof(PVQ_INFO)));
-    memcpy(new_buf, q->buf, q->buf_len * sizeof(PVQ_INFO));
-    aom_free(q->buf);
-    q->buf = new_buf;
-    q->buf_len = new_buf_len;
-  }
-  // memcpy(q->buf + q->curr_pos, pvq, sizeof(PVQ_INFO));
-  OD_COPY(q->buf + q->curr_pos, pvq, 1);
-  ++q->curr_pos;
-}
-
-// NOTE: This does not actually generate tokens, instead we store the encoding
-// decisions made for PVQ in a queue that we will read from when
-// actually writing the bitstream in write_modes_b
-static void tokenize_pvq(int plane, int block, int blk_row, int blk_col,
-                         BLOCK_SIZE plane_bsize, TX_SIZE tx_size, void *arg) {
-  struct tokenize_b_args *const args = arg;
-  const AV1_COMP *cpi = args->cpi;
-  const AV1_COMMON *const cm = &cpi->common;
-  ThreadData *const td = args->td;
-  MACROBLOCK *const x = &td->mb;
-  PVQ_INFO *pvq_info;
-
-  (void)block;
-  (void)blk_row;
-  (void)blk_col;
-  (void)plane_bsize;
-  (void)tx_size;
-
-  assert(block < MAX_PVQ_BLOCKS_IN_SB);
-  pvq_info = &x->pvq[block][plane];
-  add_pvq_block((AV1_COMMON * const)cm, x, pvq_info);
-}
-#endif  // CONFIG_PVQ
 #if CONFIG_VAR_TX
 void tokenize_vartx(ThreadData *td, TOKENEXTRA **t, RUN_TYPE dry_run,
                     TX_SIZE tx_size, BLOCK_SIZE plane_bsize, int blk_row,
@@ -876,7 +879,6 @@
     return;
   }
 
-#if !CONFIG_PVQ
   if (!dry_run) {
 #if CONFIG_COEF_INTERLEAVE
     td->counts->skip[ctx][0] += skip_inc;
@@ -893,8 +895,10 @@
     for (plane = 0; plane < MAX_MB_PLANE; ++plane) {
 #if CONFIG_CB4X4
       if (bsize < BLOCK_8X8 && plane && !is_chroma_reference(mi_row, mi_col)) {
+#if !CONFIG_PVQ
         (*t)->token = EOSB_TOKEN;
         (*t)++;
+#endif
         continue;
       }
 #else
@@ -908,11 +912,15 @@
       av1_foreach_transformed_block_in_plane(xd, bsize, plane, tokenize_b,
                                              &arg);
 #endif  // CONFIG_PALETTE && CONFIG_PALETTE_THROUGHPUT
+#if !CONFIG_PVQ
       (*t)->token = EOSB_TOKEN;
       (*t)++;
+#endif  // !CONFIG_PVQ
     }
 #endif
-  } else if (dry_run == DRY_RUN_NORMAL) {
+  }
+#if !CONFIG_PVQ
+  else if (dry_run == DRY_RUN_NORMAL) {
     int plane;
     for (plane = 0; plane < MAX_MB_PLANE; ++plane) {
 #if CONFIG_CB4X4
@@ -939,25 +947,8 @@
                                              &arg);
     }
   }
-#else
-  if (!dry_run) {
-    int plane;
+#endif  // !CONFIG_PVQ
 
-    td->counts->skip[ctx][0] += skip_inc;
-
-    for (plane = 0; plane < MAX_MB_PLANE; ++plane) {
-#if CONFIG_CB4X4
-      if (bsize < BLOCK_8X8 && plane && !is_chroma_reference(mi_row, mi_col))
-        continue;
-#else
-      (void)mi_row;
-      (void)mi_col;
-#endif
-      av1_foreach_transformed_block_in_plane(xd, bsize, plane, tokenize_pvq,
-                                             &arg);
-    }
-  }
-#endif
   if (rate) *rate += arg.this_rate;
 }