| Index: source/libvpx/vp9/encoder/vp9_pickmode.c
|
| ===================================================================
|
| --- source/libvpx/vp9/encoder/vp9_pickmode.c (revision 290053)
|
| +++ source/libvpx/vp9/encoder/vp9_pickmode.c (working copy)
|
| @@ -212,11 +212,11 @@
|
| *sse_y = sse;
|
|
|
| if (sse < dc_quant * dc_quant >> 6)
|
| - x->skip_txfm = 1;
|
| + x->skip_txfm[0] = 1;
|
| else if (var < ac_quant * ac_quant >> 6)
|
| - x->skip_txfm = 2;
|
| + x->skip_txfm[0] = 2;
|
| else
|
| - x->skip_txfm = 0;
|
| + x->skip_txfm[0] = 0;
|
|
|
| if (cpi->common.tx_mode == TX_MODE_SELECT) {
|
| if (sse > (var << 2))
|
| @@ -394,7 +394,8 @@
|
| INTERP_FILTER filter_ref = cm->interp_filter;
|
| int bsl = mi_width_log2(bsize);
|
| const int pred_filter_search = cm->interp_filter == SWITCHABLE ?
|
| - (((mi_row + mi_col) >> bsl) + get_chessboard_index(cm)) % 2 : 0;
|
| + (((mi_row + mi_col) >> bsl) +
|
| + get_chessboard_index(cm->current_video_frame)) & 0x1 : 0;
|
| int const_motion[MAX_REF_FRAMES] = { 0 };
|
| int bh = num_4x4_blocks_high_lookup[bsize] << 2;
|
| int bw = num_4x4_blocks_wide_lookup[bsize] << 2;
|
| @@ -409,6 +410,10 @@
|
| PRED_BUFFER *this_mode_pred = NULL;
|
| int i;
|
|
|
| + // CTX is used by the temporal denoiser which is currently being developed.
|
| + // TODO(jbb): when temporal denoiser is finished and in the default build
|
| + // remove the following line;
|
| + (void) ctx;
|
| if (cpi->sf.reuse_inter_pred_sby) {
|
| for (i = 0; i < 3; i++) {
|
| tmp[i].data = &pred_buf[pixels_in_block * i];
|
| @@ -453,7 +458,7 @@
|
| vp9_setup_pred_block(xd, yv12_mb[ref_frame], yv12, mi_row, mi_col,
|
| sf, sf);
|
|
|
| - if (cm->coding_use_prev_mi)
|
| + if (!cm->error_resilient_mode)
|
| vp9_find_mv_refs(cm, xd, tile, xd->mi[0], ref_frame,
|
| candidates, mi_row, mi_col);
|
| else
|
| @@ -553,7 +558,7 @@
|
| if (cost < best_cost) {
|
| best_filter = filter;
|
| best_cost = cost;
|
| - skip_txfm = x->skip_txfm;
|
| + skip_txfm = x->skip_txfm[0];
|
|
|
| if (cpi->sf.reuse_inter_pred_sby) {
|
| if (this_mode_pred != current_pred) {
|
| @@ -579,7 +584,7 @@
|
| dist = pf_dist[mbmi->interp_filter];
|
| var_y = pf_var[mbmi->interp_filter];
|
| sse_y = pf_sse[mbmi->interp_filter];
|
| - x->skip_txfm = skip_txfm;
|
| + x->skip_txfm[0] = skip_txfm;
|
| } else {
|
| mbmi->interp_filter = (filter_ref == SWITCHABLE) ? EIGHTTAP: filter_ref;
|
| vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize);
|
| @@ -602,7 +607,7 @@
|
| }
|
| }
|
|
|
| -#if CONFIG_DENOISING
|
| +#if CONFIG_VP9_TEMPORAL_DENOISING
|
| if (cpi->oxcf.noise_sensitivity > 0) {
|
| vp9_denoiser_update_frame_stats(&cpi->denoiser, mbmi, sse_y,
|
| this_mode, ctx);
|
| @@ -617,7 +622,7 @@
|
| best_pred_filter = mbmi->interp_filter;
|
| best_tx_size = mbmi->tx_size;
|
| best_ref_frame = ref_frame;
|
| - skip_txfm = x->skip_txfm;
|
| + skip_txfm = x->skip_txfm[0];
|
|
|
| if (cpi->sf.reuse_inter_pred_sby) {
|
| if (best_pred != NULL)
|
| @@ -659,7 +664,7 @@
|
| mbmi->ref_frame[0] = best_ref_frame;
|
| mbmi->mv[0].as_int = frame_mv[best_mode][best_ref_frame].as_int;
|
| xd->mi[0]->bmi[0].as_mv[0].as_int = mbmi->mv[0].as_int;
|
| - x->skip_txfm = skip_txfm;
|
| + x->skip_txfm[0] = skip_txfm;
|
|
|
| // Perform intra prediction search, if the best SAD is above a certain
|
| // threshold.
|
| @@ -668,7 +673,6 @@
|
| int i, j;
|
| const int width = num_4x4_blocks_wide_lookup[bsize];
|
| const int height = num_4x4_blocks_high_lookup[bsize];
|
| - const BLOCK_SIZE bsize_tx = txsize_to_bsize[mbmi->tx_size];
|
|
|
| int rate2 = 0;
|
| int64_t dist2 = 0;
|
| @@ -678,28 +682,36 @@
|
|
|
| TX_SIZE tmp_tx_size = MIN(max_txsize_lookup[bsize],
|
| tx_mode_to_biggest_tx_size[cpi->common.tx_mode]);
|
| + const BLOCK_SIZE bsize_tx = txsize_to_bsize[tmp_tx_size];
|
| const int step = 1 << tmp_tx_size;
|
|
|
| + if (cpi->sf.reuse_inter_pred_sby) {
|
| + pd->dst.buf = tmp[0].data;
|
| + pd->dst.stride = bw;
|
| + }
|
| +
|
| for (this_mode = DC_PRED; this_mode <= DC_PRED; ++this_mode) {
|
| - if (cpi->sf.reuse_inter_pred_sby) {
|
| - pd->dst.buf = tmp[0].data;
|
| - pd->dst.stride = bw;
|
| - }
|
| -
|
| + uint8_t *const src_buf_base = p->src.buf;
|
| + uint8_t *const dst_buf_base = pd->dst.buf;
|
| for (j = 0; j < height; j += step) {
|
| for (i = 0; i < width; i += step) {
|
| + p->src.buf = &src_buf_base[4 * (j * src_stride + i)];
|
| + pd->dst.buf = &dst_buf_base[4 * (j * dst_stride + i)];
|
| + // Use source buffer as an approximation for the fully reconstructed
|
| + // buffer
|
| vp9_predict_intra_block(xd, block_idx, b_width_log2(bsize),
|
| tmp_tx_size, this_mode,
|
| - &p->src.buf[4 * (j * dst_stride + i)],
|
| - src_stride,
|
| - &pd->dst.buf[4 * (j * dst_stride + i)],
|
| - dst_stride, i, j, 0);
|
| + p->src.buf, src_stride,
|
| + pd->dst.buf, dst_stride,
|
| + i, j, 0);
|
| model_rd_for_sb_y(cpi, bsize_tx, x, xd, &rate, &dist, &var_y, &sse_y);
|
| rate2 += rate;
|
| dist2 += dist;
|
| ++block_idx;
|
| }
|
| }
|
| + p->src.buf = src_buf_base;
|
| + pd->dst.buf = dst_buf_base;
|
|
|
| rate = rate2;
|
| dist = dist2;
|
| @@ -721,7 +733,7 @@
|
| mbmi->uv_mode = this_mode;
|
| mbmi->mv[0].as_int = INVALID_MV;
|
| } else {
|
| - x->skip_txfm = skip_txfm;
|
| + x->skip_txfm[0] = skip_txfm;
|
| }
|
| }
|
| }
|
|
|