Removal of CONFIG_NEW_MVREF experiment.
authorPaul Wilkins <paulwilkins@google.com>
Fri, 19 Apr 2013 10:54:02 +0000 (11:54 +0100)
committerPaul Wilkins <paulwilkins@google.com>
Fri, 19 Apr 2013 10:54:02 +0000 (11:54 +0100)
This experiment has failed to give much benefit but
does add complexity so deprecated.

Change-Id: Ic7b929ba706390b9907ef0b4f965bd401ca799a4

configure
vp9/common/vp9_blockd.h
vp9/common/vp9_entropymode.c
vp9/common/vp9_entropymv.c
vp9/common/vp9_entropymv.h
vp9/decoder/vp9_decodemv.c
vp9/decoder/vp9_decodframe.c
vp9/encoder/vp9_bitstream.c
vp9/encoder/vp9_encodeframe.c
vp9/encoder/vp9_onyx_int.h

index 0678e3e..5d2910b 100755 (executable)
--- a/configure
+++ b/configure
@@ -239,7 +239,6 @@ HAVE_LIST="
 "
 EXPERIMENT_LIST="
     csm
-    new_mvref
     implicit_segmentation
     newbintramodes
     comp_interintra_pred
index dd95761..a2a136d 100644 (file)
@@ -261,9 +261,6 @@ typedef struct {
   int_mv mv[2]; // for each reference frame used
   int_mv ref_mvs[MAX_REF_FRAMES][MAX_MV_REF_CANDIDATES];
   int_mv best_mv, best_second_mv;
-#if CONFIG_NEW_MVREF
-  int best_index, best_second_index;
-#endif
 
   int mb_mode_context[MAX_REF_FRAMES];
 
@@ -406,10 +403,6 @@ typedef struct macroblockd {
   vp9_prob mb_segment_tree_probs[MB_FEATURE_TREE_PROBS];
   vp9_prob mb_segment_mispred_tree_probs[MAX_MB_SEGMENTS];
 
-#if CONFIG_NEW_MVREF
-  vp9_prob mb_mv_ref_probs[MAX_REF_FRAMES][MAX_MV_REF_CANDIDATES-1];
-#endif
-
   // Segment features
   signed char segment_feature_data[MAX_MB_SEGMENTS][SEG_LVL_MAX];
   unsigned int segment_feature_mask[MAX_MB_SEGMENTS];
index 0db2de6..f19dc12 100644 (file)
@@ -718,11 +718,6 @@ void vp9_setup_past_independence(VP9_COMMON *cm, MACROBLOCKD *xd) {
   vp9_update_mode_info_border(cm, cm->mip);
   vp9_update_mode_info_in_image(cm, cm->mi);
 
-#if CONFIG_NEW_MVREF
-  // Defaults probabilities for encoding the MV ref id signal
-  vpx_memset(xd->mb_mv_ref_probs, VP9_DEFAULT_MV_REF_PROB,
-             sizeof(xd->mb_mv_ref_probs));
-#endif
   cm->ref_frame_sign_bias[GOLDEN_FRAME] = 0;
   cm->ref_frame_sign_bias[ALTREF_FRAME] = 0;
 
index 0a81015..320c29c 100644 (file)
 #define MV_COUNT_SAT 16
 #define MV_MAX_UPDATE_FACTOR 160
 
-#if CONFIG_NEW_MVREF
-/* Integer pel reference mv threshold for use of high-precision 1/8 mv */
-#define COMPANDED_MVREF_THRESH    1000000
-#else
 /* Integer pel reference mv threshold for use of high-precision 1/8 mv */
 #define COMPANDED_MVREF_THRESH    8
-#endif
 
 /* Smooth or bias the mv-counts before prob computation */
 /* #define SMOOTH_MV_COUNTS */
index de1bd43..118574b 100644 (file)
@@ -26,12 +26,6 @@ int vp9_use_nmv_hp(const MV *ref);
 
 #define VP9_NMV_UPDATE_PROB  255
 
-#if CONFIG_NEW_MVREF
-#define VP9_MVREF_UPDATE_PROB 252
-#define VP9_DEFAULT_MV_REF_PROB 192
-#define VP9_MV_REF_UPDATE_COST (14 << 8)
-#endif
-
 //#define MV_GROUP_UPDATE
 
 #define LOW_PRECISION_MV_UPDATE  /* Use 7 bit forward update */
index 6478a8e..9b3cc03 100644 (file)
@@ -98,22 +98,6 @@ static int read_mb_segid_except(vp9_reader *r,
              :     (pred_seg_id >= 2 ? vp9_read(r, p[1]) : (pred_seg_id == 0));
 }
 
-#if CONFIG_NEW_MVREF
-int vp9_read_mv_ref_id(vp9_reader *r, vp9_prob *ref_id_probs) {
-  int ref_index = 0;
-
-  if (vp9_read(r, ref_id_probs[0])) {
-    ref_index++;
-    if (vp9_read(r, ref_id_probs[1])) {
-      ref_index++;
-      if (vp9_read(r, ref_id_probs[2]))
-        ref_index++;
-    }
-  }
-  return ref_index;
-}
-#endif
-
 extern const int vp9_i8x8_block[4];
 static void kfread_modes(VP9D_COMP *pbi, MODE_INFO *m,
                          int mb_row, int mb_col,
@@ -829,29 +813,6 @@ static void read_mb_modes_mv(VP9D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi,
 #endif
     }
 
-#if CONFIG_NEW_MVREF
-    // if ((mbmi->mode == NEWMV) || (mbmi->mode == SPLITMV))
-    if (mbmi->mode == NEWMV) {
-      int best_index;
-      MV_REFERENCE_FRAME ref_frame = mbmi->ref_frame;
-
-      // Encode the index of the choice.
-      best_index =
-        vp9_read_mv_ref_id(r, xd->mb_mv_ref_probs[ref_frame]);
-
-      best_mv.as_int = mbmi->ref_mvs[ref_frame][best_index].as_int;
-
-      if (mbmi->second_ref_frame > 0) {
-        ref_frame = mbmi->second_ref_frame;
-
-        // Encode the index of the choice.
-        best_index =
-          vp9_read_mv_ref_id(r, xd->mb_mv_ref_probs[ref_frame]);
-        best_mv_second.as_int = mbmi->ref_mvs[ref_frame][best_index].as_int;
-      }
-    }
-#endif
-
     mbmi->uv_mode = DC_PRED;
     switch (mbmi->mode) {
       case SPLITMV: {
index 4af9218..bb612d1 100644 (file)
@@ -1639,25 +1639,6 @@ int vp9_decode_frame(VP9D_COMP *pbi, const uint8_t **p_data_end) {
   }
 #endif
 
-#if CONFIG_NEW_MVREF
-  // If Key frame reset mv ref id probabilities to defaults
-  if (pc->frame_type != KEY_FRAME) {
-    // Read any mv_ref index probability updates
-    int i, j;
-
-    for (i = 0; i < MAX_REF_FRAMES; ++i) {
-      // Skip the dummy entry for intra ref frame.
-      if (i == INTRA_FRAME)
-        continue;
-
-      // Read any updates to probabilities
-      for (j = 0; j < MAX_MV_REF_CANDIDATES - 1; ++j)
-        if (vp9_read(&header_bc, VP9_MVREF_UPDATE_PROB))
-          xd->mb_mv_ref_probs[i][j] = vp9_read_prob(&header_bc);
-    }
-  }
-#endif
-
   if (0) {
     FILE *z = fopen("decodestats.stt", "a");
     fprintf(z, "%6d F:%d,R:%d,Q:%d\n",
index bcfbd60..c1c35c4 100644 (file)
@@ -277,55 +277,6 @@ static void update_inter_mode_probs(VP9_COMMON *cm,
   }
 }
 
-#if CONFIG_NEW_MVREF
-static void update_mv_ref_probs(VP9_COMP *cpi,
-                                int mvref_probs[MAX_REF_FRAMES]
-                                               [MAX_MV_REF_CANDIDATES-1]) {
-  MACROBLOCKD *xd = &cpi->mb.e_mbd;
-  int rf;     // Reference frame
-  int ref_c;  // Motion reference candidate
-  int node;   // Probability node index
-
-  for (rf = 0; rf < MAX_REF_FRAMES; ++rf) {
-    int count = 0;
-
-    // Skip the dummy entry for intra ref frame.
-    if (rf == INTRA_FRAME) {
-      continue;
-    }
-
-    // Sum the counts for all candidates
-    for (ref_c = 0; ref_c < MAX_MV_REF_CANDIDATES; ++ref_c) {
-      count += cpi->mb_mv_ref_count[rf][ref_c];
-    }
-
-    // Calculate the tree node probabilities
-    for (node = 0; node < MAX_MV_REF_CANDIDATES-1; ++node) {
-      int new_prob, old_cost, new_cost;
-      unsigned int branch_cnts[2];
-
-      // How many hits on each branch at this node
-      branch_cnts[0] = cpi->mb_mv_ref_count[rf][node];
-      branch_cnts[1] = count - cpi->mb_mv_ref_count[rf][node];
-
-      // Work out cost of coding branches with the old and optimal probability
-      old_cost = cost_branch256(branch_cnts, xd->mb_mv_ref_probs[rf][node]);
-      new_prob = get_prob(branch_cnts[0], count);
-      new_cost = cost_branch256(branch_cnts, new_prob);
-
-      // Take current 0 branch cases out of residual count
-      count -= cpi->mb_mv_ref_count[rf][node];
-
-      if ((new_cost + VP9_MV_REF_UPDATE_COST) <= old_cost) {
-        mvref_probs[rf][node] = new_prob;
-      } else {
-        mvref_probs[rf][node] = xd->mb_mv_ref_probs[rf][node];
-      }
-    }
-  }
-}
-#endif
-
 static void write_ymode(vp9_writer *bc, int m, const vp9_prob *p) {
   write_token(bc, vp9_ymode_tree, p, vp9_ymode_encodings + m);
 }
@@ -562,38 +513,6 @@ static void write_nmv(VP9_COMP *cpi, vp9_writer *bc,
   vp9_encode_nmv_fp(bc, &e, &ref->as_mv, nmvc, usehp);
 }
 
-#if CONFIG_NEW_MVREF
-static void vp9_write_mv_ref_id(vp9_writer *w,
-                                vp9_prob * ref_id_probs,
-                                int mv_ref_id) {
-  // Encode the index for the MV reference.
-  switch (mv_ref_id) {
-    case 0:
-      vp9_write(w, 0, ref_id_probs[0]);
-      break;
-    case 1:
-      vp9_write(w, 1, ref_id_probs[0]);
-      vp9_write(w, 0, ref_id_probs[1]);
-      break;
-    case 2:
-      vp9_write(w, 1, ref_id_probs[0]);
-      vp9_write(w, 1, ref_id_probs[1]);
-      vp9_write(w, 0, ref_id_probs[2]);
-      break;
-    case 3:
-      vp9_write(w, 1, ref_id_probs[0]);
-      vp9_write(w, 1, ref_id_probs[1]);
-      vp9_write(w, 1, ref_id_probs[2]);
-      break;
-
-      // TRAP.. This should not happen
-    default:
-      assert(0);
-      break;
-  }
-}
-#endif
-
 // This function writes the current macro block's segnment id to the bitstream
 // It should only be called if a segment map update is indicated.
 static void write_mb_segid(vp9_writer *bc,
@@ -901,22 +820,6 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, MODE_INFO *m,
     }
 #endif
 
-#if CONFIG_NEW_MVREF
-    // if ((mode == NEWMV) || (mode == SPLITMV)) {
-    if (mode == NEWMV) {
-      // Encode the index of the choice.
-      vp9_write_mv_ref_id(bc,
-                          xd->mb_mv_ref_probs[rf], mi->best_index);
-
-      if (mi->second_ref_frame > 0) {
-        // Encode the index of the choice.
-        vp9_write_mv_ref_id(
-                            bc, xd->mb_mv_ref_probs[mi->second_ref_frame],
-                            mi->best_second_index);
-      }
-    }
-#endif
-
     switch (mode) { /* new, split require MVs */
       case NEWMV:
 #ifdef ENTROPY_STATS
@@ -2757,37 +2660,6 @@ void vp9_pack_bitstream(VP9_COMP *cpi, unsigned char *dest,
     }
   }
 
-#if CONFIG_NEW_MVREF
-  if ((pc->frame_type != KEY_FRAME)) {
-    int new_mvref_probs[MAX_REF_FRAMES][MAX_MV_REF_CANDIDATES-1];
-    int i, j;
-
-    update_mv_ref_probs(cpi, new_mvref_probs);
-
-    for (i = 0; i < MAX_REF_FRAMES; ++i) {
-      // Skip the dummy entry for intra ref frame.
-      if (i == INTRA_FRAME) {
-        continue;
-      }
-
-      // Encode any mandated updates to probabilities
-      for (j = 0; j < MAX_MV_REF_CANDIDATES - 1; ++j) {
-        if (new_mvref_probs[i][j] != xd->mb_mv_ref_probs[i][j]) {
-          vp9_write(&header_bc, 1, VP9_MVREF_UPDATE_PROB);
-          vp9_write_prob(&header_bc, new_mvref_probs[i][j]);
-
-          // Only update the persistent copy if this is the "real pack"
-          if (!cpi->dummy_packing) {
-            xd->mb_mv_ref_probs[i][j] = new_mvref_probs[i][j];
-          }
-        } else {
-          vp9_write(&header_bc, 0, VP9_MVREF_UPDATE_PROB);
-        }
-      }
-    }
-  }
-#endif
-
   vp9_clear_system_state();  // __asm emms;
 
   vp9_copy(cpi->common.fc.pre_coef_probs_4x4,
index 8d342a6..32dba9d 100644 (file)
@@ -345,87 +345,6 @@ void vp9_activity_masking(VP9_COMP *cpi, MACROBLOCK *x) {
   adjust_act_zbin(cpi, x);
 }
 
-#if CONFIG_NEW_MVREF
-static int vp9_cost_mv_ref_id(vp9_prob * ref_id_probs, int mv_ref_id) {
-  int cost;
-
-  // Encode the index for the MV reference.
-  switch (mv_ref_id) {
-    case 0:
-      cost = vp9_cost_zero(ref_id_probs[0]);
-      break;
-    case 1:
-      cost = vp9_cost_one(ref_id_probs[0]);
-      cost += vp9_cost_zero(ref_id_probs[1]);
-      break;
-    case 2:
-      cost = vp9_cost_one(ref_id_probs[0]);
-      cost += vp9_cost_one(ref_id_probs[1]);
-      cost += vp9_cost_zero(ref_id_probs[2]);
-      break;
-    case 3:
-      cost = vp9_cost_one(ref_id_probs[0]);
-      cost += vp9_cost_one(ref_id_probs[1]);
-      cost += vp9_cost_one(ref_id_probs[2]);
-      break;
-
-      // TRAP.. This should not happen
-    default:
-      assert(0);
-      break;
-  }
-  return cost;
-}
-
-// Estimate the cost of each coding the vector using each reference candidate
-static unsigned int pick_best_mv_ref(MACROBLOCK *x,
-                                     MV_REFERENCE_FRAME ref_frame,
-                                     int_mv target_mv,
-                                     int_mv * mv_ref_list,
-                                     int_mv * best_ref) {
-  int i;
-  int best_index = 0;
-  int cost, cost2;
-  int zero_seen = (mv_ref_list[0].as_int) ? 0 : 1;
-  MACROBLOCKD *xd = &x->e_mbd;
-  int max_mv = MV_MAX;
-
-  cost = vp9_cost_mv_ref_id(xd->mb_mv_ref_probs[ref_frame], 0) +
-         vp9_mv_bit_cost(&target_mv, &mv_ref_list[0], x->nmvjointcost,
-                         x->mvcost, 96, xd->allow_high_precision_mv);
-
-  for (i = 1; i < MAX_MV_REF_CANDIDATES; ++i) {
-    // If we see a 0,0 reference vector for a second time we have reached
-    // the end of the list of valid candidate vectors.
-    if (!mv_ref_list[i].as_int) {
-      if (zero_seen)
-        break;
-      else
-        zero_seen = 1;
-    }
-
-    // Check for cases where the reference choice would give rise to an
-    // uncodable/out of range residual for row or col.
-    if ((abs(target_mv.as_mv.row - mv_ref_list[i].as_mv.row) > max_mv) ||
-        (abs(target_mv.as_mv.col - mv_ref_list[i].as_mv.col) > max_mv)) {
-      continue;
-    }
-
-    cost2 = vp9_cost_mv_ref_id(xd->mb_mv_ref_probs[ref_frame], i) +
-            vp9_mv_bit_cost(&target_mv, &mv_ref_list[i], x->nmvjointcost,
-                            x->mvcost, 96, xd->allow_high_precision_mv);
-
-    if (cost2 < cost) {
-      cost = cost2;
-      best_index = i;
-    }
-  }
-  best_ref->as_int = mv_ref_list[best_index].as_int;
-
-  return best_index;
-}
-#endif
-
 static void update_state(VP9_COMP *cpi,
                          PICK_MODE_CONTEXT *ctx,
                          BLOCK_SIZE_TYPE bsize,
@@ -561,31 +480,11 @@ static void update_state(VP9_COMP *cpi,
     if (mbmi->mode == SPLITMV || mbmi->mode == NEWMV) {
       int_mv best_mv, best_second_mv;
       MV_REFERENCE_FRAME rf = mbmi->ref_frame;
-#if CONFIG_NEW_MVREF
-      unsigned int best_index;
-      MV_REFERENCE_FRAME sec_ref_frame = mbmi->second_ref_frame;
-#endif
       best_mv.as_int = ctx->best_ref_mv.as_int;
       best_second_mv.as_int = ctx->second_best_ref_mv.as_int;
       if (mbmi->mode == NEWMV) {
         best_mv.as_int = mbmi->ref_mvs[rf][0].as_int;
         best_second_mv.as_int = mbmi->ref_mvs[mbmi->second_ref_frame][0].as_int;
-#if CONFIG_NEW_MVREF
-        best_index = pick_best_mv_ref(x, rf, mbmi->mv[0],
-                                      mbmi->ref_mvs[rf], &best_mv);
-        mbmi->best_index = best_index;
-        ++cpi->mb_mv_ref_count[rf][best_index];
-
-        if (mbmi->second_ref_frame > 0) {
-          unsigned int best_index;
-          best_index =
-              pick_best_mv_ref(x, sec_ref_frame, mbmi->mv[1],
-                               mbmi->ref_mvs[sec_ref_frame],
-                               &best_second_mv);
-          mbmi->best_second_index = best_index;
-          ++cpi->mb_mv_ref_count[sec_ref_frame][best_index];
-        }
-#endif
       }
       mbmi->best_mv.as_int = best_mv.as_int;
       mbmi->best_second_mv.as_int = best_second_mv.as_int;
@@ -1451,9 +1350,6 @@ static void encode_frame_internal(VP9_COMP *cpi) {
   vp9_zero(cm->fc.nzc_counts_32x32);
   vp9_zero(cm->fc.nzc_pcat_counts);
 #endif
-#if CONFIG_NEW_MVREF
-  vp9_zero(cpi->mb_mv_ref_count);
-#endif
 
   cpi->mb.e_mbd.lossless = (cm->base_qindex == 0 &&
                             cm->y_dc_delta_q == 0 &&
index 197ede2..ba7505e 100644 (file)
@@ -682,10 +682,6 @@ typedef struct VP9_COMP {
                                       [VP9_SWITCHABLE_FILTERS];
   unsigned int best_switchable_interp_count[VP9_SWITCHABLE_FILTERS];
 
-#if CONFIG_NEW_MVREF
-  unsigned int mb_mv_ref_count[MAX_REF_FRAMES][MAX_MV_REF_CANDIDATES];
-#endif
-
   int initial_width;
   int initial_height;