shithub: libvpx

Download patch

ref: be9cf215a3960ce46b10c1be4e467367f0b18a9a
parent: 70d12c3a75bbd5d25ad70e9d1872fc9d4f6cc1c5
parent: f66cc1644e49d506b6a6ad4aa47e14369ae7f9ac
author: Dmitry Kovalev <dkovalev@google.com>
date: Tue Apr 30 07:07:05 EDT 2013

Merge "General cleanup inside vp9_bitstream.c." into experimental

--- a/vp9/encoder/vp9_bitstream.c
+++ b/vp9/encoder/vp9_bitstream.c
@@ -160,18 +160,15 @@
                                       vp9_writer* const bc) {
   VP9_COMMON *const cm = &cpi->common;
 
-  {
-    vp9_prob Pnew   [VP9_YMODES - 1];
-    unsigned int bct [VP9_YMODES - 1] [2];
+  vp9_prob pnew[VP9_YMODES - 1];
+  unsigned int bct[VP9_YMODES - 1][2];
 
-    update_mode(
-      bc, VP9_YMODES, vp9_ymode_encodings, vp9_ymode_tree,
-      Pnew, cm->fc.ymode_prob, bct, (unsigned int *)cpi->ymode_count
-    );
-    update_mode(bc, VP9_I32X32_MODES, vp9_sb_ymode_encodings,
-                vp9_sb_ymode_tree, Pnew, cm->fc.sb_ymode_prob, bct,
-                (unsigned int *)cpi->sb_ymode_count);
-  }
+  update_mode(bc, VP9_YMODES, vp9_ymode_encodings, vp9_ymode_tree, pnew,
+              cm->fc.ymode_prob, bct, (unsigned int *)cpi->ymode_count);
+
+  update_mode(bc, VP9_I32X32_MODES, vp9_sb_ymode_encodings,
+              vp9_sb_ymode_tree, pnew, cm->fc.sb_ymode_prob, bct,
+              (unsigned int *)cpi->sb_ymode_count);
 }
 
 void vp9_update_skip_probs(VP9_COMP *cpi) {
@@ -178,10 +175,9 @@
   VP9_COMMON *const pc = &cpi->common;
   int k;
 
-  for (k = 0; k < MBSKIP_CONTEXTS; ++k) {
+  for (k = 0; k < MBSKIP_CONTEXTS; ++k)
     pc->mbskip_pred_probs[k] = get_binary_prob(cpi->skip_false_count[k],
                                                cpi->skip_true_count[k]);
-  }
 }
 
 static void update_switchable_interp_probs(VP9_COMP *cpi,
@@ -213,18 +209,18 @@
   if (cm->frame_type != KEY_FRAME) {
     // From the prediction counts set the probabilities for each context
     for (i = 0; i < PREDICTION_PROBS; i++) {
-      new_pred_probs[i] = get_binary_prob(cpi->ref_pred_count[i][0],
-                                          cpi->ref_pred_count[i][1]);
+      const int c0 = cpi->ref_pred_count[i][0];
+      const int c1 = cpi->ref_pred_count[i][1];
 
+      new_pred_probs[i] = get_binary_prob(c0, c1);
+
       // Decide whether or not to update the reference frame probs.
       // Returned costs are in 1/256 bit units.
-      old_cost =
-        (cpi->ref_pred_count[i][0] * vp9_cost_zero(cm->ref_pred_probs[i])) +
-        (cpi->ref_pred_count[i][1] * vp9_cost_one(cm->ref_pred_probs[i]));
+      old_cost = c0 * vp9_cost_zero(cm->ref_pred_probs[i]) +
+                 c1 * vp9_cost_one(cm->ref_pred_probs[i]);
 
-      new_cost =
-        (cpi->ref_pred_count[i][0] * vp9_cost_zero(new_pred_probs[i])) +
-        (cpi->ref_pred_count[i][1] * vp9_cost_one(new_pred_probs[i]));
+      new_cost = c0 * vp9_cost_zero(new_pred_probs[i]) +
+                 c1 * vp9_cost_one(new_pred_probs[i]);
 
       // Cost saving must be >= 8 bits (2048 in these units)
       if ((old_cost - new_cost) >= 2048) {
@@ -245,13 +241,11 @@
 static void update_inter_mode_probs(VP9_COMMON *cm,
                                     int mode_context[INTER_MODE_CONTEXTS][4]) {
   int i, j;
-  unsigned int (*mv_ref_ct)[4][2];
+  unsigned int (*mv_ref_ct)[4][2] = cm->fc.mv_ref_ct;
 
   vpx_memcpy(mode_context, cm->fc.vp9_mode_contexts,
              sizeof(cm->fc.vp9_mode_contexts));
 
-  mv_ref_ct = cm->fc.mv_ref_ct;
-
   for (i = 0; i < INTER_MODE_CONTEXTS; i++) {
     for (j = 0; j < 4; j++) {
       int new_prob, old_cost, new_cost;
@@ -309,8 +303,7 @@
 }
 
 static void write_split(vp9_writer *bc, int x, const vp9_prob *p) {
-  write_token(
-    bc, vp9_mbsplit_tree, p, vp9_mbsplit_encodings + x);
+  write_token(bc, vp9_mbsplit_tree, p, vp9_mbsplit_encodings + x);
 }
 
 static int prob_update_savings(const unsigned int *ct,
@@ -319,19 +312,9 @@
   const int old_b = cost_branch256(ct, oldp);
   const int new_b = cost_branch256(ct, newp);
   const int update_b = 2048 + vp9_cost_upd256;
-  return (old_b - new_b - update_b);
+  return old_b - new_b - update_b;
 }
 
-static int prob_diff_update_savings(const unsigned int *ct,
-                                    const vp9_prob oldp, const vp9_prob newp,
-                                    const vp9_prob upd) {
-  const int old_b = cost_branch256(ct, oldp);
-  const int new_b = cost_branch256(ct, newp);
-  const int update_b = (newp == oldp ? 0 :
-                        prob_diff_update_cost(newp, oldp) + vp9_cost_upd256);
-  return (old_b - new_b - update_b);
-}
-
 static int prob_diff_update_savings_search(const unsigned int *ct,
                                            const vp9_prob oldp, vp9_prob *bestp,
                                            const vp9_prob upd) {
@@ -483,10 +466,8 @@
   *tp = p;
 }
 
-static void write_mv_ref
-(
-  vp9_writer *bc, MB_PREDICTION_MODE m, const vp9_prob *p
-) {
+static void write_mv_ref(vp9_writer *bc, MB_PREDICTION_MODE m,
+                         const vp9_prob *p) {
 #if CONFIG_DEBUG
   assert(NEARESTMV <= m  &&  m <= SPLITMV);
 #endif
@@ -503,10 +484,8 @@
               vp9_sb_mv_ref_encoding_array - NEARESTMV + m);
 }
 
-static void write_sub_mv_ref
-(
-  vp9_writer *bc, B_PREDICTION_MODE m, const vp9_prob *p
-) {
+static void write_sub_mv_ref(vp9_writer *bc, B_PREDICTION_MODE m,
+                             const vp9_prob *p) {
 #if CONFIG_DEBUG
   assert(LEFT4X4 <= m  &&  m <= NEW4X4);
 #endif
@@ -923,31 +902,26 @@
   const int segment_id = m->mbmi.segment_id;
   int skip_coeff;
 
-  if (xd->update_mb_segmentation_map) {
+  if (xd->update_mb_segmentation_map)
     write_mb_segid(bc, &m->mbmi, xd);
-  }
 
   if (vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP)) {
     skip_coeff = 1;
   } else {
     skip_coeff = m->mbmi.mb_skip_coeff;
-    vp9_write(bc, skip_coeff,
-              vp9_get_pred_prob(c, xd, PRED_MBSKIP));
+    vp9_write(bc, skip_coeff, vp9_get_pred_prob(c, xd, PRED_MBSKIP));
   }
 
-  if (m->mbmi.sb_type > BLOCK_SIZE_MB16X16) {
-    sb_kfwrite_ymode(bc, ym,
-                     c->sb_kf_ymode_prob[c->kf_ymode_probs_index]);
-  } else {
-    kfwrite_ymode(bc, ym,
-                  c->kf_ymode_prob[c->kf_ymode_probs_index]);
-  }
+  if (m->mbmi.sb_type > BLOCK_SIZE_MB16X16)
+    sb_kfwrite_ymode(bc, ym, c->sb_kf_ymode_prob[c->kf_ymode_probs_index]);
+  else
+    kfwrite_ymode(bc, ym, c->kf_ymode_prob[c->kf_ymode_probs_index]);
 
   if (ym == I4X4_PRED) {
     int i = 0;
     do {
-      const B_PREDICTION_MODE A = above_block_mode(m, i, mis);
-      const B_PREDICTION_MODE L = (xd->left_available || (i & 3)) ?
+      const B_PREDICTION_MODE a = above_block_mode(m, i, mis);
+      const B_PREDICTION_MODE l = (xd->left_available || (i & 3)) ?
                                   left_block_mode(m, i) : B_DC_PRED;
       const int bm = m->bmi[i].as_mode.first;
 
@@ -955,21 +929,17 @@
       ++intra_mode_stats [A] [L] [bm];
 #endif
 
-      write_kf_bmode(bc, bm, c->kf_bmode_prob[A][L]);
+      write_kf_bmode(bc, bm, c->kf_bmode_prob[a][l]);
     } while (++i < 16);
   }
   if (ym == I8X8_PRED) {
-    write_i8x8_mode(bc, m->bmi[0].as_mode.first,
-                    c->fc.i8x8_mode_prob);
+    write_i8x8_mode(bc, m->bmi[0].as_mode.first, c->fc.i8x8_mode_prob);
     // printf("    mode: %d\n", m->bmi[0].as_mode.first); fflush(stdout);
-    write_i8x8_mode(bc, m->bmi[2].as_mode.first,
-                    c->fc.i8x8_mode_prob);
+    write_i8x8_mode(bc, m->bmi[2].as_mode.first, c->fc.i8x8_mode_prob);
     // printf("    mode: %d\n", m->bmi[2].as_mode.first); fflush(stdout);
-    write_i8x8_mode(bc, m->bmi[8].as_mode.first,
-                    c->fc.i8x8_mode_prob);
+    write_i8x8_mode(bc, m->bmi[8].as_mode.first, c->fc.i8x8_mode_prob);
     // printf("    mode: %d\n", m->bmi[8].as_mode.first); fflush(stdout);
-    write_i8x8_mode(bc, m->bmi[10].as_mode.first,
-                    c->fc.i8x8_mode_prob);
+    write_i8x8_mode(bc, m->bmi[10].as_mode.first, c->fc.i8x8_mode_prob);
     // printf("    mode: %d\n", m->bmi[10].as_mode.first); fflush(stdout);
   } else
     write_uv_mode(bc, m->mbmi.uv_mode, c->kf_uv_mode_prob[ym]);
@@ -987,6 +957,7 @@
   }
 }
 
+
 #if CONFIG_CODE_ZEROGROUP
 #ifdef ZPC_STATS
 void init_zpcstats() {
@@ -1704,22 +1675,23 @@
 
 static void decide_kf_ymode_entropy(VP9_COMP *cpi) {
   int mode_cost[MB_MODE_COUNT];
-  int cost;
   int bestcost = INT_MAX;
   int bestindex = 0;
   int i, j;
 
   for (i = 0; i < 8; i++) {
+    int cost = 0;
+
     vp9_cost_tokens(mode_cost, cpi->common.kf_ymode_prob[i], vp9_kf_ymode_tree);
-    cost = 0;
-    for (j = 0; j < VP9_YMODES; j++) {
+
+    for (j = 0; j < VP9_YMODES; j++)
       cost += mode_cost[j] * cpi->ymode_count[j];
-    }
+
     vp9_cost_tokens(mode_cost, cpi->common.sb_kf_ymode_prob[i],
                     vp9_sb_ymode_tree);
-    for (j = 0; j < VP9_I32X32_MODES; j++) {
+    for (j = 0; j < VP9_I32X32_MODES; j++)
       cost += mode_cost[j] * cpi->sb_ymode_count[j];
-    }
+
     if (cost < bestcost) {
       bestindex = i;
       bestcost = cost;
@@ -1944,9 +1916,8 @@
       int i, j, c = 0;
       for (i = 0; i < VP9_SWITCHABLE_FILTERS; ++i) {
         count[i] = 0;
-        for (j = 0; j <= VP9_SWITCHABLE_FILTERS; ++j) {
+        for (j = 0; j <= VP9_SWITCHABLE_FILTERS; ++j)
           count[i] += cpi->switchable_interp_count[j][i];
-        }
         c += (count[i] > 0);
       }
       if (c == 1) {