shithub: libvpx

Download patch

ref: 687891238c30fe14b1ddb68d61bf63288ccbf035
parent: a2f7619860660c3245c3b725e41c4f41f7a99d79
parent: 2f1a0a0e2c43485dd508130a6b5ecb4e7f016117
author: Dmitry Kovalev <[email protected]>
date: Wed Aug 21 10:10:05 EDT 2013

Merge "Removing PLANE_TYPE argument from cost_coeffs function."

--- a/vp9/encoder/vp9_rdopt.c
+++ b/vp9/encoder/vp9_rdopt.c
@@ -485,42 +485,39 @@
 };
 
 static INLINE int cost_coeffs(MACROBLOCK *mb,
-                              int plane, int block, PLANE_TYPE type,
+                              int plane, int block,
                               ENTROPY_CONTEXT *A, ENTROPY_CONTEXT *L,
                               TX_SIZE tx_size,
                               const int16_t *scan, const int16_t *nb) {
   MACROBLOCKD *const xd = &mb->e_mbd;
   MB_MODE_INFO *mbmi = &xd->mode_info_context->mbmi;
-  int pt, c, cost;
+  struct macroblockd_plane *pd = &xd->plane[plane];
+  const PLANE_TYPE type = pd->plane_type;
   const int16_t *band_count = &band_counts[tx_size][1];
-  const int eob = xd->plane[plane].eobs[block];
-  const int16_t *qcoeff_ptr = BLOCK_OFFSET(xd->plane[plane].qcoeff, block);
+  const int eob = pd->eobs[block];
+  const int16_t *const qcoeff_ptr = BLOCK_OFFSET(pd->qcoeff, block);
   const int ref = mbmi->ref_frame[0] != INTRA_FRAME;
-  unsigned int (*token_costs)[2][PREV_COEF_CONTEXTS]
-                    [MAX_ENTROPY_TOKENS] = mb->token_costs[tx_size][type][ref];
-  ENTROPY_CONTEXT above_ec = !!*A, left_ec = !!*L;
+  unsigned int (*token_costs)[2][PREV_COEF_CONTEXTS][MAX_ENTROPY_TOKENS] =
+                   mb->token_costs[tx_size][type][ref];
+  const ENTROPY_CONTEXT above_ec = !!*A, left_ec = !!*L;
   uint8_t token_cache[1024];
+  int pt = combine_entropy_contexts(above_ec, left_ec);
+  int c, cost;
 
   // Check for consistency of tx_size with mode info
-  assert((!type && !plane) || (type && plane));
-  if (type == PLANE_TYPE_Y_WITH_DC) {
-    assert(xd->mode_info_context->mbmi.txfm_size == tx_size);
-  } else {
-    assert(tx_size == get_uv_tx_size(mbmi));
-  }
+  assert(type == PLANE_TYPE_Y_WITH_DC ? mbmi->txfm_size == tx_size
+                                      : get_uv_tx_size(mbmi) == tx_size);
 
-  pt = combine_entropy_contexts(above_ec, left_ec);
-
   if (eob == 0) {
     // single eob token
     cost = token_costs[0][0][pt][DCT_EOB_TOKEN];
     c = 0;
   } else {
-    int v, prev_t, band_left = *band_count++;
+    int band_left = *band_count++;
 
     // dc token
-    v = qcoeff_ptr[0];
-    prev_t = vp9_dct_value_tokens_ptr[v].token;
+    int v = qcoeff_ptr[0];
+    int prev_t = vp9_dct_value_tokens_ptr[v].token;
     cost = (*token_costs)[0][pt][prev_t] + vp9_dct_value_cost_ptr[v];
     token_cache[0] = vp9_pt_energy_class[prev_t];
     ++token_costs;
@@ -550,7 +547,7 @@
   }
 
   // is eob first coefficient;
-  *A = *L = c > 0;
+  *A = *L = (c > 0);
 
   return cost;
 }
@@ -598,14 +595,12 @@
 static void rate_block(int plane, int block, BLOCK_SIZE_TYPE plane_bsize,
                        TX_SIZE tx_size, void *arg) {
   struct rdcost_block_args* args = arg;
-  MACROBLOCKD *const xd = &args->x->e_mbd;
-  struct macroblockd_plane *const pd = &xd->plane[plane];
 
   int x_idx, y_idx;
   txfrm_block_to_raster_xy(plane_bsize, args->tx_size, block, &x_idx, &y_idx);
 
   args->rate += cost_coeffs(args->x, plane, block,
-                            pd->plane_type, args->t_above + x_idx,
+                            args->t_above + x_idx,
                             args->t_left + y_idx, args->tx_size,
                             args->scan, args->nb);
 }
@@ -1091,7 +1086,7 @@
         }
 
         scan = get_scan_4x4(get_tx_type_4x4(PLANE_TYPE_Y_WITH_DC, xd, block));
-        ratey += cost_coeffs(x, 0, block, PLANE_TYPE_Y_WITH_DC,
+        ratey += cost_coeffs(x, 0, block,
                              tempa + idx, templ + idy, TX_4X4, scan,
                              vp9_get_coef_neighbors_handle(scan));
         distortion += vp9_block_error(coeff, BLOCK_OFFSET(pd->dqcoeff, block),
@@ -1563,7 +1558,7 @@
       thisdistortion += vp9_block_error(coeff, BLOCK_OFFSET(pd->dqcoeff, k),
                                         16, &ssz);
       thissse += ssz;
-      thisrate += cost_coeffs(x, 0, k, PLANE_TYPE_Y_WITH_DC,
+      thisrate += cost_coeffs(x, 0, k,
                               ta + (k & 1),
                               tl + (k >> 1), TX_4X4,
                               vp9_default_scan_4x4,