| Index: source/libvpx/vp9/encoder/vp9_encodemb.c
 | 
| ===================================================================
 | 
| --- source/libvpx/vp9/encoder/vp9_encodemb.c	(revision 263011)
 | 
| +++ source/libvpx/vp9/encoder/vp9_encodemb.c	(working copy)
 | 
| @@ -107,11 +107,11 @@
 | 
|  
 | 
|  static void optimize_b(int plane, int block, BLOCK_SIZE plane_bsize,
 | 
|                         TX_SIZE tx_size, MACROBLOCK *mb,
 | 
| -                       struct optimize_ctx *ctx) {
 | 
| +                       ENTROPY_CONTEXT *a, ENTROPY_CONTEXT *l) {
 | 
|    MACROBLOCKD *const xd = &mb->e_mbd;
 | 
|    struct macroblock_plane *p = &mb->plane[plane];
 | 
|    struct macroblockd_plane *pd = &xd->plane[plane];
 | 
| -  const int ref = is_inter_block(&xd->mi_8x8[0]->mbmi);
 | 
| +  const int ref = is_inter_block(&xd->mi[0]->mbmi);
 | 
|    vp9_token_state tokens[1025][2];
 | 
|    unsigned best_index[1025][2];
 | 
|    const int16_t *coeff = BLOCK_OFFSET(mb->plane[plane].coeff, block);
 | 
| @@ -133,18 +133,13 @@
 | 
|    const scan_order *so = get_scan(xd, tx_size, type, block);
 | 
|    const int16_t *scan = so->scan;
 | 
|    const int16_t *nb = so->neighbors;
 | 
| -  ENTROPY_CONTEXT *a, *l;
 | 
| -  int tx_x, tx_y;
 | 
| -  txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &tx_x, &tx_y);
 | 
| -  a = &ctx->ta[plane][tx_x];
 | 
| -  l = &ctx->tl[plane][tx_y];
 | 
|  
 | 
|    assert((!type && !plane) || (type && plane));
 | 
|    assert(eob <= default_eob);
 | 
|  
 | 
|    /* Now set up a Viterbi trellis to evaluate alternative roundings. */
 | 
|    rdmult = mb->rdmult * err_mult;
 | 
| -  if (!is_inter_block(&mb->e_mbd.mi_8x8[0]->mbmi))
 | 
| +  if (!is_inter_block(&mb->e_mbd.mi[0]->mbmi))
 | 
|      rdmult = (rdmult * 9) >> 4;
 | 
|    rddiv = mb->rddiv;
 | 
|    /* Initialize the sentinel node of the trellis. */
 | 
| @@ -380,15 +375,17 @@
 | 
|    int16_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block);
 | 
|    int i, j;
 | 
|    uint8_t *dst;
 | 
| +  ENTROPY_CONTEXT *a, *l;
 | 
|    txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &i, &j);
 | 
|    dst = &pd->dst.buf[4 * j * pd->dst.stride + 4 * i];
 | 
| +  a = &ctx->ta[plane][i];
 | 
| +  l = &ctx->tl[plane][j];
 | 
|  
 | 
|    // TODO(jingning): per transformed block zero forcing only enabled for
 | 
|    // luma component. will integrate chroma components as well.
 | 
|    if (x->zcoeff_blk[tx_size][block] && plane == 0) {
 | 
|      p->eobs[block] = 0;
 | 
| -    ctx->ta[plane][i] = 0;
 | 
| -    ctx->tl[plane][j] = 0;
 | 
| +    *a = *l = 0;
 | 
|      return;
 | 
|    }
 | 
|  
 | 
| @@ -396,10 +393,9 @@
 | 
|      vp9_xform_quant(x, plane, block, plane_bsize, tx_size);
 | 
|  
 | 
|    if (x->optimize && (!x->skip_recode || !x->skip_optimize)) {
 | 
| -    optimize_b(plane, block, plane_bsize, tx_size, x, ctx);
 | 
| +    optimize_b(plane, block, plane_bsize, tx_size, x, a, l);
 | 
|    } else {
 | 
| -    ctx->ta[plane][i] = p->eobs[block] > 0;
 | 
| -    ctx->tl[plane][j] = p->eobs[block] > 0;
 | 
| +    *a = *l = p->eobs[block] > 0;
 | 
|    }
 | 
|  
 | 
|    if (p->eobs[block])
 | 
| @@ -428,6 +424,7 @@
 | 
|        assert(0 && "Invalid transform size");
 | 
|    }
 | 
|  }
 | 
| +
 | 
|  static void encode_block_pass1(int plane, int block, BLOCK_SIZE plane_bsize,
 | 
|                                 TX_SIZE tx_size, void *arg) {
 | 
|    MACROBLOCK *const x = (MACROBLOCK *)arg;
 | 
| @@ -455,7 +452,7 @@
 | 
|  void vp9_encode_sb(MACROBLOCK *x, BLOCK_SIZE bsize) {
 | 
|    MACROBLOCKD *const xd = &x->e_mbd;
 | 
|    struct optimize_ctx ctx;
 | 
| -  MB_MODE_INFO *mbmi = &xd->mi_8x8[0]->mbmi;
 | 
| +  MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi;
 | 
|    struct encode_b_args arg = {x, &ctx, &mbmi->skip};
 | 
|    int plane;
 | 
|  
 | 
| @@ -480,7 +477,7 @@
 | 
|    struct encode_b_args* const args = arg;
 | 
|    MACROBLOCK *const x = args->x;
 | 
|    MACROBLOCKD *const xd = &x->e_mbd;
 | 
| -  MB_MODE_INFO *mbmi = &xd->mi_8x8[0]->mbmi;
 | 
| +  MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi;
 | 
|    struct macroblock_plane *const p = &x->plane[plane];
 | 
|    struct macroblockd_plane *const pd = &xd->plane[plane];
 | 
|    int16_t *coeff = BLOCK_OFFSET(p->coeff, block);
 | 
| @@ -502,9 +499,6 @@
 | 
|    src = &p->src.buf[4 * (j * src_stride + i)];
 | 
|    src_diff = &p->src_diff[4 * (j * diff_stride + i)];
 | 
|  
 | 
| -  // if (x->optimize)
 | 
| -  //   optimize_b(plane, block, plane_bsize, tx_size, x, args->ctx);
 | 
| -
 | 
|    switch (tx_size) {
 | 
|      case TX_32X32:
 | 
|        scan_order = &vp9_default_scan_orders[TX_32X32];
 | 
| @@ -526,7 +520,7 @@
 | 
|          vp9_idct32x32_add(dqcoeff, dst, dst_stride, *eob);
 | 
|        break;
 | 
|      case TX_16X16:
 | 
| -      tx_type = get_tx_type_16x16(pd->plane_type, xd);
 | 
| +      tx_type = get_tx_type(pd->plane_type, xd);
 | 
|        scan_order = &vp9_scan_orders[TX_16X16][tx_type];
 | 
|        mode = plane == 0 ? mbmi->mode : mbmi->uv_mode;
 | 
|        vp9_predict_intra_block(xd, block >> 4, bwl, TX_16X16, mode,
 | 
| @@ -546,7 +540,7 @@
 | 
|          vp9_iht16x16_add(tx_type, dqcoeff, dst, dst_stride, *eob);
 | 
|        break;
 | 
|      case TX_8X8:
 | 
| -      tx_type = get_tx_type_8x8(pd->plane_type, xd);
 | 
| +      tx_type = get_tx_type(pd->plane_type, xd);
 | 
|        scan_order = &vp9_scan_orders[TX_8X8][tx_type];
 | 
|        mode = plane == 0 ? mbmi->mode : mbmi->uv_mode;
 | 
|        vp9_predict_intra_block(xd, block >> 2, bwl, TX_8X8, mode,
 | 
| @@ -568,7 +562,7 @@
 | 
|      case TX_4X4:
 | 
|        tx_type = get_tx_type_4x4(pd->plane_type, xd, block);
 | 
|        scan_order = &vp9_scan_orders[TX_4X4][tx_type];
 | 
| -      mode = plane == 0 ? get_y_mode(xd->mi_8x8[0], block) : mbmi->uv_mode;
 | 
| +      mode = plane == 0 ? get_y_mode(xd->mi[0], block) : mbmi->uv_mode;
 | 
|        vp9_predict_intra_block(xd, block, bwl, TX_4X4, mode,
 | 
|                                x->skip_encode ? src : dst,
 | 
|                                x->skip_encode ? src_stride : dst_stride,
 | 
| @@ -614,14 +608,14 @@
 | 
|  
 | 
|  void vp9_encode_intra_block_plane(MACROBLOCK *x, BLOCK_SIZE bsize, int plane) {
 | 
|    const MACROBLOCKD *const xd = &x->e_mbd;
 | 
| -  struct encode_b_args arg = {x, NULL, &xd->mi_8x8[0]->mbmi.skip};
 | 
| +  struct encode_b_args arg = {x, NULL, &xd->mi[0]->mbmi.skip};
 | 
|  
 | 
|    vp9_foreach_transformed_block_in_plane(xd, bsize, plane, encode_block_intra,
 | 
|                                           &arg);
 | 
|  }
 | 
|  
 | 
|  int vp9_encode_intra(MACROBLOCK *x, int use_16x16_pred) {
 | 
| -  MB_MODE_INFO * mbmi = &x->e_mbd.mi_8x8[0]->mbmi;
 | 
| +  MB_MODE_INFO * mbmi = &x->e_mbd.mi[0]->mbmi;
 | 
|    x->skip_encode = 0;
 | 
|    mbmi->mode = DC_PRED;
 | 
|    mbmi->ref_frame[0] = INTRA_FRAME;
 | 
| 
 |