From 8c1b516d10ca38d74a7d6ab6a8afba8d664055ee Mon Sep 17 00:00:00 2001 From: Paul Wilkins Date: Tue, 7 May 2013 13:58:36 +0100 Subject: [PATCH] Deprecate the newbintramode experiment. Clean out code relating to newbintramode. Change-Id: Ie91f4f156cdf60ce0da8ca407c1c9cb00c7d0705 --- configure | 1 - vp9/common/vp9_blockd.h | 23 --- vp9/common/vp9_entropymode.c | 40 ---- vp9/common/vp9_reconintra.c | 2 - vp9/common/vp9_reconintra4x4.c | 454 ----------------------------------------- vp9/decoder/vp9_decodemv.c | 8 - vp9/decoder/vp9_decodframe.c | 15 +- vp9/decoder/vp9_detokenize.c | 48 ----- vp9/decoder/vp9_detokenize.h | 8 - vp9/encoder/vp9_bitstream.c | 4 - vp9/encoder/vp9_encodeframe.c | 3 - vp9/encoder/vp9_encodeintra.c | 5 - vp9/encoder/vp9_rdopt.c | 42 +--- vp9/vp9_common.mk | 1 - 14 files changed, 3 insertions(+), 651 deletions(-) delete mode 100644 vp9/common/vp9_reconintra4x4.c diff --git a/configure b/configure index 9ebe3d7..1d8d895 100755 --- a/configure +++ b/configure @@ -240,7 +240,6 @@ HAVE_LIST=" EXPERIMENT_LIST=" csm implicit_segmentation - newbintramodes comp_interintra_pred enable_6tap modelcoefprob diff --git a/vp9/common/vp9_blockd.h b/vp9/common/vp9_blockd.h index 3bd2221..b18a4aa 100644 --- a/vp9/common/vp9_blockd.h +++ b/vp9/common/vp9_blockd.h @@ -142,9 +142,6 @@ typedef enum { B_D27_PRED, B_D63_PRED, B_TM_PRED, -#if CONFIG_NEWBINTRAMODES - B_CONTEXT_PRED, -#endif LEFT4X4, ABOVE4X4, @@ -157,15 +154,8 @@ typedef enum { #define VP9_BINTRAMODES (LEFT4X4) #define VP9_SUBMVREFS (1 + NEW4X4 - LEFT4X4) -#if CONFIG_NEWBINTRAMODES -/* The number of I4X4_PRED intra modes that are replaced by B_CONTEXT_PRED */ -#define CONTEXT_PRED_REPLACEMENTS 0 -#define VP9_KF_BINTRAMODES (VP9_BINTRAMODES - 1) -#define VP9_NKF_BINTRAMODES (VP9_BINTRAMODES - CONTEXT_PRED_REPLACEMENTS) -#else #define VP9_KF_BINTRAMODES (VP9_BINTRAMODES) /* 10 */ #define VP9_NKF_BINTRAMODES (VP9_BINTRAMODES) /* 10 */ -#endif /* For keyframes, intra block modes are predicted by the (already decoded) modes for the Y blocks to the left and above us; for interframes, there @@ -174,9 +164,6 @@ typedef enum { union b_mode_info { struct { B_PREDICTION_MODE first; -#if CONFIG_NEWBINTRAMODES - B_PREDICTION_MODE context; -#endif } as_mode; int_mv as_mv[2]; // first, second inter predictor motion vectors }; @@ -580,12 +567,6 @@ static TX_TYPE txfm_map(B_PREDICTION_MODE bmode) { case B_D27_PRED : return DCT_ADST; -#if CONFIG_NEWBINTRAMODES - case B_CONTEXT_PRED: - assert(0); - break; -#endif - default: return DCT_DCT; } @@ -615,10 +596,6 @@ static TX_TYPE get_tx_type_4x4(const MACROBLOCKD *xd, int ib) { if (xd->mode_info_context->mbmi.mode == I4X4_PRED && xd->q_index < ACTIVE_HT) { tx_type = txfm_map( -#if CONFIG_NEWBINTRAMODES - xd->mode_info_context->bmi[ib].as_mode.first == B_CONTEXT_PRED ? - xd->mode_info_context->bmi[ib].as_mode.context : -#endif xd->mode_info_context->bmi[ib].as_mode.first); } else if (xd->mode_info_context->mbmi.mode <= TM_PRED && xd->q_index < ACTIVE_HT) { diff --git a/vp9/common/vp9_entropymode.c b/vp9/common/vp9_entropymode.c index 31c1a52..f3fead6 100644 --- a/vp9/common/vp9_entropymode.c +++ b/vp9/common/vp9_entropymode.c @@ -63,21 +63,8 @@ static const unsigned int kf_uv_mode_cts [VP9_YMODES] [VP9_UV_MODES] = { }; static const unsigned int bmode_cts[VP9_NKF_BINTRAMODES] = { -#if CONFIG_NEWBINTRAMODES -#if CONTEXT_PRED_REPLACEMENTS == 6 - /* DC TM V H CONTEXT */ - 43891, 17694, 10036, 3920, 20000 -#elif CONTEXT_PRED_REPLACEMENTS == 4 - /* DC TM V H D45 D135 CONTEXT */ - 43891, 17694, 10036, 3920, 3363, 2546, 14000 -#elif CONTEXT_PRED_REPLACEMENTS == 0 - /* DC V H D45 D135 D117 D153 D27 D63 TM CONTEXT */ - 43891, 10036, 3920, 3363, 2546, 5119, 2471, 1723, 3221, 17694, 50000 -#endif -#else /* DC V H D45 D135 D117 D153 D27 D63 TM */ 43891, 10036, 3920, 3363, 2546, 5119, 2471, 1723, 3221, 17694 -#endif }; typedef enum { @@ -148,32 +135,6 @@ const vp9_tree_index vp9_kf_bmode_tree[VP9_KF_BINTRAMODES * 2 - 2] = { }; const vp9_tree_index vp9_bmode_tree[VP9_NKF_BINTRAMODES * 2 - 2] = { -#if CONFIG_NEWBINTRAMODES -#if CONTEXT_PRED_REPLACEMENTS == 6 - -B_DC_PRED, 2, - -B_TM_PRED, 4, - 6, -(B_CONTEXT_PRED - CONTEXT_PRED_REPLACEMENTS), - -B_V_PRED, -B_H_PRED -#elif CONTEXT_PRED_REPLACEMENTS == 4 - -B_DC_PRED, 2, - -B_TM_PRED, 4, - 6, 8, - -B_V_PRED, -B_H_PRED, - 10, -(B_CONTEXT_PRED - CONTEXT_PRED_REPLACEMENTS), - -B_D135_PRED, -B_D45_PRED, -#elif CONTEXT_PRED_REPLACEMENTS == 0 - -B_DC_PRED, 2, /* 0 = DC_NODE */ - -B_TM_PRED, 4, /* 1 = TM_NODE */ - -B_V_PRED, 6, /* 2 = V_NODE */ - 8, 12, /* 3 = COM_NODE */ - -B_H_PRED, 10, /* 4 = H_NODE */ - -B_D135_PRED, -B_D117_PRED, /* 5 = D135_NODE */ - -B_D45_PRED, 14, /* 6 = D45_NODE */ - -B_D63_PRED, 16, /* 7 = D63_NODE */ - -B_D153_PRED, 18, /* 8 = D153_NODE */ - -B_D27_PRED, -B_CONTEXT_PRED /* 9 = D27_NODE */ -#endif -#else -B_DC_PRED, 2, /* 0 = DC_NODE */ -B_TM_PRED, 4, /* 1 = TM_NODE */ -B_V_PRED, 6, /* 2 = V_NODE */ @@ -183,7 +144,6 @@ const vp9_tree_index vp9_bmode_tree[VP9_NKF_BINTRAMODES * 2 - 2] = { -B_D45_PRED, 14, /* 6 = D45_NODE */ -B_D63_PRED, 16, /* 7 = D63_NODE */ -B_D153_PRED, -B_D27_PRED /* 8 = D153_NODE */ -#endif }; /* Again, these trees use the same probability indices as their diff --git a/vp9/common/vp9_reconintra.c b/vp9/common/vp9_reconintra.c index d01cfa4..dad5be7 100644 --- a/vp9/common/vp9_reconintra.c +++ b/vp9/common/vp9_reconintra.c @@ -573,7 +573,6 @@ void vp9_build_intra_predictors_sbuv_s(MACROBLOCKD *xd, xd->left_available, 0 /*xd->right_available*/); } -#if !CONFIG_NEWBINTRAMODES void vp9_intra4x4_predict(MACROBLOCKD *xd, int block_idx, BLOCK_SIZE_TYPE bsize, @@ -592,4 +591,3 @@ void vp9_intra4x4_predict(MACROBLOCKD *xd, mode, 4, 4, have_top, have_left, have_right); } -#endif diff --git a/vp9/common/vp9_reconintra4x4.c b/vp9/common/vp9_reconintra4x4.c deleted file mode 100644 index ce33aa5..0000000 --- a/vp9/common/vp9_reconintra4x4.c +++ /dev/null @@ -1,454 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - - -#include "./vpx_config.h" -#include "vpx_mem/vpx_mem.h" -#include "vp9/common/vp9_reconintra.h" -#include "vp9_rtcd.h" - -#if CONFIG_NEWBINTRAMODES -static int find_grad_measure(uint8_t *x, int stride, int n, int tx, int ty, - int dx, int dy) { - int i, j; - int count = 0, gsum = 0, gdiv; - /* TODO: Make this code more efficient by breaking up into two loops */ - for (i = -ty; i < n; ++i) - for (j = -tx; j < n; ++j) { - int g; - if (i >= 0 && j >= 0) continue; - if (i + dy >= 0 && j + dx >= 0) continue; - if (i + dy < -ty || i + dy >= n || j + dx < -tx || j + dx >= n) continue; - g = abs(x[(i + dy) * stride + j + dx] - x[i * stride + j]); - gsum += g * g; - count++; - } - gdiv = (dx * dx + dy * dy) * count; - return ((gsum << 8) + (gdiv >> 1)) / gdiv; -} - -#if CONTEXT_PRED_REPLACEMENTS == 6 -B_PREDICTION_MODE vp9_find_dominant_direction(uint8_t *ptr, - int stride, int n, - int tx, int ty) { - int g[8], i, imin, imax; - g[1] = find_grad_measure(ptr, stride, n, tx, ty, 2, 1); - g[2] = find_grad_measure(ptr, stride, n, tx, ty, 1, 1); - g[3] = find_grad_measure(ptr, stride, n, tx, ty, 1, 2); - g[5] = find_grad_measure(ptr, stride, n, tx, ty, -1, 2); - g[6] = find_grad_measure(ptr, stride, n, tx, ty, -1, 1); - g[7] = find_grad_measure(ptr, stride, n, tx, ty, -2, 1); - imin = 1; - for (i = 2; i < 8; i += 1 + (i == 3)) - imin = (g[i] < g[imin] ? i : imin); - imax = 1; - for (i = 2; i < 8; i += 1 + (i == 3)) - imax = (g[i] > g[imax] ? i : imax); - /* - printf("%d %d %d %d %d %d = %d %d\n", - g[1], g[2], g[3], g[5], g[6], g[7], imin, imax); - */ - switch (imin) { - case 1: - return B_D153_PRED; - case 2: - return B_D135_PRED; - case 3: - return B_D117_PRED; - case 5: - return B_D63_PRED; - case 6: - return B_D45_PRED; - case 7: - return B_D27_PRED; - default: - assert(0); - } -} -#elif CONTEXT_PRED_REPLACEMENTS == 4 -B_PREDICTION_MODE vp9_find_dominant_direction(uint8_t *ptr, - int stride, int n, - int tx, int ty) { - int g[8], i, imin, imax; - g[1] = find_grad_measure(ptr, stride, n, tx, ty, 2, 1); - g[3] = find_grad_measure(ptr, stride, n, tx, ty, 1, 2); - g[5] = find_grad_measure(ptr, stride, n, tx, ty, -1, 2); - g[7] = find_grad_measure(ptr, stride, n, tx, ty, -2, 1); - imin = 1; - for (i = 3; i < 8; i+=2) - imin = (g[i] < g[imin] ? i : imin); - imax = 1; - for (i = 3; i < 8; i+=2) - imax = (g[i] > g[imax] ? i : imax); - /* - printf("%d %d %d %d = %d %d\n", - g[1], g[3], g[5], g[7], imin, imax); - */ - switch (imin) { - case 1: - return B_D153_PRED; - case 3: - return B_D117_PRED; - case 5: - return B_D63_PRED; - case 7: - return B_D27_PRED; - default: - assert(0); - } -} -#elif CONTEXT_PRED_REPLACEMENTS == 0 -B_PREDICTION_MODE vp9_find_dominant_direction(uint8_t *ptr, - int stride, int n, - int tx, int ty) { - int g[8], i, imin, imax; - g[0] = find_grad_measure(ptr, stride, n, tx, ty, 1, 0); - g[1] = find_grad_measure(ptr, stride, n, tx, ty, 2, 1); - g[2] = find_grad_measure(ptr, stride, n, tx, ty, 1, 1); - g[3] = find_grad_measure(ptr, stride, n, tx, ty, 1, 2); - g[4] = find_grad_measure(ptr, stride, n, tx, ty, 0, 1); - g[5] = find_grad_measure(ptr, stride, n, tx, ty, -1, 2); - g[6] = find_grad_measure(ptr, stride, n, tx, ty, -1, 1); - g[7] = find_grad_measure(ptr, stride, n, tx, ty, -2, 1); - imax = 0; - for (i = 1; i < 8; i++) - imax = (g[i] > g[imax] ? i : imax); - imin = 0; - for (i = 1; i < 8; i++) - imin = (g[i] < g[imin] ? i : imin); - - switch (imin) { - case 0: - return B_H_PRED; - case 1: - return B_D153_PRED; - case 2: - return B_D135_PRED; - case 3: - return B_D117_PRED; - case 4: - return B_V_PRED; - case 5: - return B_D63_PRED; - case 6: - return B_D45_PRED; - case 7: - return B_D27_PRED; - default: - assert(0); - } -} -#endif - -B_PREDICTION_MODE vp9_find_bpred_context(MACROBLOCKD *xd, int block_idx, - uint8_t *ptr, int stride) { - const int have_top = (block_idx >> 2) || xd->up_available; - const int have_left = (block_idx & 3) || xd->left_available; - int tx = have_left ? 4 : 0; - int ty = have_top ? 4 : 0; - if (!have_left && !have_top) - return B_DC_PRED; - return vp9_find_dominant_direction(ptr, stride, 4, tx, ty); -} - -void vp9_intra4x4_predict(MACROBLOCKD *xd, - int block_idx, - BLOCK_SIZE_TYPE bsize, - int b_mode, - uint8_t *predictor, - int ps) { - const int bwl = b_width_log2(bsize); - const int wmask = (1 << bwl) - 1; - int i, r, c; - const int have_top = (block_idx >> bwl) || xd->up_available; - const int have_left = (block_idx & wmask) || xd->left_available; - const int have_right = (block_idx & wmask) != wmask || xd->right_available; - uint8_t left[4], above[8], top_left; - /* - * 127 127 127 .. 127 127 127 127 127 127 - * 129 A B .. Y Z - * 129 C D .. W X - * 129 E F .. U V - * 129 G H .. S T T T T T - * .. - */ - - if (have_left) { - uint8_t *left_ptr = predictor - 1; - const int stride = ps; - - left[0] = left_ptr[0 * stride]; - left[1] = left_ptr[1 * stride]; - left[2] = left_ptr[2 * stride]; - left[3] = left_ptr[3 * stride]; - } else { - left[0] = left[1] = left[2] = left[3] = 129; - } - - if (have_top) { - uint8_t *above_ptr = predictor - ps; - top_left = have_left ? above_ptr[-1] : 127; - - above[0] = above_ptr[0]; - above[1] = above_ptr[1]; - above[2] = above_ptr[2]; - above[3] = above_ptr[3]; - if (((block_idx & wmask) != wmask) || - (have_right && block_idx == wmask && - ((xd->mb_index != 3 && xd->sb_index != 3) || - ((xd->mb_index & 1) == 0 && xd->sb_index == 3)))) { - above[4] = above_ptr[4]; - above[5] = above_ptr[5]; - above[6] = above_ptr[6]; - above[7] = above_ptr[7]; - } else if (have_right) { - uint8_t *above_right = above_ptr + 4; - - if (xd->sb_index == 3 && (xd->mb_index & 1)) - above_right -= 32 * ps; - if (xd->mb_index == 3) - above_right -= 16 * ps; - above_right -= 4 * (block_idx >> bwl) * ps; - - /* use a more distant above-right (from closest available top-right - * corner), but with a "localized DC" (similar'ish to TM-pred): - * - * A B C D E F G H - * I J K L - * M N O P - * Q R S T - * U V W X x1 x2 x3 x4 - * - * Where: - * x1 = clip_pixel(E + X - D) - * x2 = clip_pixel(F + X - D) - * x3 = clip_pixel(G + X - D) - * x4 = clip_pixel(H + X - D) - * - * This is applied anytime when we use a "distant" above-right edge - * that is not immediately top-right to the block that we're going - * to do intra prediction for. - */ - above[4] = clip_pixel(above_right[0] + above_ptr[3] - above_right[-1]); - above[5] = clip_pixel(above_right[1] + above_ptr[3] - above_right[-1]); - above[6] = clip_pixel(above_right[2] + above_ptr[3] - above_right[-1]); - above[7] = clip_pixel(above_right[3] + above_ptr[3] - above_right[-1]); - } else { - // extend edge - above[4] = above[5] = above[6] = above[7] = above[3]; - } - } else { - above[0] = above[1] = above[2] = above[3] = 127; - above[4] = above[5] = above[6] = above[7] = 127; - top_left = 127; - } - -#if CONFIG_NEWBINTRAMODES - if (b_mode == B_CONTEXT_PRED) - b_mode = xd->mode_info_context->bmi[block_idx].as_mode.context; -#endif - - switch (b_mode) { - case B_DC_PRED: { - int expected_dc = 128; - if (have_top || have_left) { - int average = 0; - int count = 0; - if (have_top) { - for (i = 0; i < 4; i++) - average += above[i]; - count += 4; - } - if (have_left) { - for (i = 0; i < 4; i++) - average += left[i]; - count += 4; - } - expected_dc = (average + (count >> 1)) / count; - } - for (r = 0; r < 4; r++) { - for (c = 0; c < 4; c++) - predictor[c] = expected_dc; - predictor += ps; - } - } - break; - case B_TM_PRED: { - /* prediction similar to true_motion prediction */ - for (r = 0; r < 4; r++) { - for (c = 0; c < 4; c++) - predictor[c] = clip_pixel(above[c] - top_left + left[r]); - predictor += ps; - } - } - break; - case B_V_PRED: - for (r = 0; r < 4; r++) { - for (c = 0; c < 4; c++) - predictor[c] = above[c]; - predictor += ps; - } - break; - case B_H_PRED: - for (r = 0; r < 4; r++) { - for (c = 0; c < 4; c++) - predictor[c] = left[r]; - predictor += ps; - } - break; - case B_D45_PRED: { - uint8_t *p = above; - - predictor[0 * ps + 0] = ROUND_POWER_OF_TWO(p[0] + p[1] * 2 + p[2], 2); - predictor[0 * ps + 1] = - predictor[1 * ps + 0] = ROUND_POWER_OF_TWO(p[1] + p[2] * 2 + p[3], 2); - predictor[0 * ps + 2] = - predictor[1 * ps + 1] = - predictor[2 * ps + 0] = ROUND_POWER_OF_TWO(p[2] + p[3] * 2 + p[4], 2); - predictor[0 * ps + 3] = - predictor[1 * ps + 2] = - predictor[2 * ps + 1] = - predictor[3 * ps + 0] = - ROUND_POWER_OF_TWO(p[3] + p[4] * 2 + p[5], 2); - predictor[1 * ps + 3] = - predictor[2 * ps + 2] = - predictor[3 * ps + 1] = ROUND_POWER_OF_TWO(p[4] + p[5] * 2 + p[6], 2); - predictor[2 * ps + 3] = - predictor[3 * ps + 2] = ROUND_POWER_OF_TWO(p[5] + p[6] * 2 + p[7], 2); - predictor[3 * ps + 3] = ROUND_POWER_OF_TWO(p[6] + p[7] * 2 + p[7], 2); - - } - break; - case B_D135_PRED: { - uint8_t p[9] = { left[3], left[2], left[1], left[0], - top_left, - above[0], above[1], above[2], above[3] }; - - predictor[3 * ps + 0] = ROUND_POWER_OF_TWO(p[0] + p[1] * 2 + p[2], 2); - predictor[3 * ps + 1] = - predictor[2 * ps + 0] = ROUND_POWER_OF_TWO(p[1] + p[2] * 2 + p[3], 2); - predictor[3 * ps + 2] = - predictor[2 * ps + 1] = - predictor[1 * ps + 0] = ROUND_POWER_OF_TWO(p[2] + p[3] * 2 + p[4], 2); - predictor[3 * ps + 3] = - predictor[2 * ps + 2] = - predictor[1 * ps + 1] = - predictor[0 * ps + 0] = - ROUND_POWER_OF_TWO(p[3] + p[4] * 2 + p[5], 2); - predictor[2 * ps + 3] = - predictor[1 * ps + 2] = - predictor[0 * ps + 1] = ROUND_POWER_OF_TWO(p[4] + p[5] * 2 + p[6], 2); - predictor[1 * ps + 3] = - predictor[0 * ps + 2] = ROUND_POWER_OF_TWO(p[5] + p[6] * 2 + p[7], 2); - predictor[0 * ps + 3] = ROUND_POWER_OF_TWO(p[6] + p[7] * 2 + p[8], 2); - - } - break; - case B_D117_PRED: { - uint8_t p[9] = { left[3], left[2], left[1], left[0], - top_left, - above[0], above[1], above[2], above[3] }; - - predictor[3 * ps + 0] = ROUND_POWER_OF_TWO(p[1] + p[2] * 2 + p[3], 2); - predictor[2 * ps + 0] = ROUND_POWER_OF_TWO(p[2] + p[3] * 2 + p[4], 2); - predictor[3 * ps + 1] = - predictor[1 * ps + 0] = ROUND_POWER_OF_TWO(p[3] + p[4] * 2 + p[5], 2); - predictor[2 * ps + 1] = - predictor[0 * ps + 0] = ROUND_POWER_OF_TWO(p[4] + p[5], 1); - predictor[3 * ps + 2] = - predictor[1 * ps + 1] = ROUND_POWER_OF_TWO(p[4] + p[5] * 2 + p[6], 2); - predictor[2 * ps + 2] = - predictor[0 * ps + 1] = ROUND_POWER_OF_TWO(p[5] + p[6], 1); - predictor[3 * ps + 3] = - predictor[1 * ps + 2] = ROUND_POWER_OF_TWO(p[5] + p[6] * 2 + p[7], 2); - predictor[2 * ps + 3] = - predictor[0 * ps + 2] = ROUND_POWER_OF_TWO(p[6] + p[7], 1); - predictor[1 * ps + 3] = ROUND_POWER_OF_TWO(p[6] + p[7] * 2 + p[8], 2); - predictor[0 * ps + 3] = ROUND_POWER_OF_TWO(p[7] + p[8], 1); - - } - break; - case B_D63_PRED: { - uint8_t *p = above; - - predictor[0 * ps + 0] = ROUND_POWER_OF_TWO(p[0] + p[1], 1); - predictor[1 * ps + 0] = ROUND_POWER_OF_TWO(p[0] + p[1] * 2 + p[2], 2); - predictor[2 * ps + 0] = - predictor[0 * ps + 1] = ROUND_POWER_OF_TWO(p[1] + p[2], 1); - predictor[1 * ps + 1] = - predictor[3 * ps + 0] = ROUND_POWER_OF_TWO(p[1] + p[2] * 2 + p[3], 2); - predictor[2 * ps + 1] = - predictor[0 * ps + 2] = ROUND_POWER_OF_TWO(p[2] + p[3], 1); - predictor[3 * ps + 1] = - predictor[1 * ps + 2] = ROUND_POWER_OF_TWO(p[2] + p[3] * 2 + p[4], 2); - predictor[0 * ps + 3] = - predictor[2 * ps + 2] = ROUND_POWER_OF_TWO(p[3] + p[4], 1); - predictor[1 * ps + 3] = - predictor[3 * ps + 2] = ROUND_POWER_OF_TWO(p[3] + p[4] * 2 + p[5], 2); - predictor[2 * ps + 3] = ROUND_POWER_OF_TWO(p[4] + p[5] * 2 + p[6], 2); - predictor[3 * ps + 3] = ROUND_POWER_OF_TWO(p[5] + p[6] * 2 + p[7], 2); - } - break; - case B_D153_PRED: { - uint8_t p[9] = { left[3], left[2], left[1], left[0], - top_left, - above[0], above[1], above[2], above[3] }; - - predictor[3 * ps + 0] = ROUND_POWER_OF_TWO(p[0] + p[1], 1); - predictor[3 * ps + 1] = ROUND_POWER_OF_TWO(p[0] + p[1] * 2 + p[2], 2); - predictor[2 * ps + 0] = - predictor[3 * ps + 2] = ROUND_POWER_OF_TWO(p[1] + p[2], 1); - predictor[2 * ps + 1] = - predictor[3 * ps + 3] = ROUND_POWER_OF_TWO(p[1] + p[2] * 2 + p[3], 2); - predictor[2 * ps + 2] = - predictor[1 * ps + 0] = ROUND_POWER_OF_TWO(p[2] + p[3], 1); - predictor[2 * ps + 3] = - predictor[1 * ps + 1] = ROUND_POWER_OF_TWO(p[2] + p[3] * 2 + p[4], 2); - predictor[1 * ps + 2] = - predictor[0 * ps + 0] = ROUND_POWER_OF_TWO(p[3] + p[4], 1); - predictor[1 * ps + 3] = - predictor[0 * ps + 1] = ROUND_POWER_OF_TWO(p[3] + p[4] * 2 + p[5], 2); - predictor[0 * ps + 2] = ROUND_POWER_OF_TWO(p[4] + p[5] * 2 + p[6], 2); - predictor[0 * ps + 3] = ROUND_POWER_OF_TWO(p[5] + p[6] * 2 + p[7], 2); - } - break; - case B_D27_PRED: { - uint8_t *p = left; - predictor[0 * ps + 0] = ROUND_POWER_OF_TWO(p[0] + p[1], 1); - predictor[0 * ps + 1] = ROUND_POWER_OF_TWO(p[0] + p[1] * 2 + p[2], 2); - predictor[0 * ps + 2] = - predictor[1 * ps + 0] = ROUND_POWER_OF_TWO(p[1] + p[2], 1); - predictor[0 * ps + 3] = - predictor[1 * ps + 1] = ROUND_POWER_OF_TWO(p[1] + p[2] * 2 + p[3], 2); - predictor[1 * ps + 2] = - predictor[2 * ps + 0] = ROUND_POWER_OF_TWO(p[2] + p[3], 1); - predictor[1 * ps + 3] = - predictor[2 * ps + 1] = ROUND_POWER_OF_TWO(p[2] + p[3] * 2 + p[3], 2); - predictor[2 * ps + 2] = - predictor[2 * ps + 3] = - predictor[3 * ps + 0] = - predictor[3 * ps + 1] = - predictor[3 * ps + 2] = - predictor[3 * ps + 3] = p[3]; - } - break; - -#if CONFIG_NEWBINTRAMODES - case B_CONTEXT_PRED: - break; - /* - case B_CORNER_PRED: - corner_predictor(predictor, 16, 4, above, left); - break; - */ -#endif - } -} -#endif diff --git a/vp9/decoder/vp9_decodemv.c b/vp9/decoder/vp9_decodemv.c index 6eaa4d5..2c7483d 100644 --- a/vp9/decoder/vp9_decodemv.c +++ b/vp9/decoder/vp9_decodemv.c @@ -37,11 +37,6 @@ extern int dec_debug; static B_PREDICTION_MODE read_bmode(vp9_reader *r, const vp9_prob *p) { B_PREDICTION_MODE m = treed_read(r, vp9_bmode_tree, p); -#if CONFIG_NEWBINTRAMODES - if (m == B_CONTEXT_PRED - CONTEXT_PRED_REPLACEMENTS) - m = B_CONTEXT_PRED; - assert(m < B_CONTEXT_PRED - CONTEXT_PRED_REPLACEMENTS || m == B_CONTEXT_PRED); -#endif return m; } @@ -879,9 +874,6 @@ static void read_mb_modes_mv(VP9D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi, do { int m = read_bmode(r, cm->fc.bmode_prob); mi->bmi[j].as_mode.first = m; -#if CONFIG_NEWBINTRAMODES - if (m == B_CONTEXT_PRED) m -= CONTEXT_PRED_REPLACEMENTS; -#endif cm->fc.bmode_counts[m]++; } while (++j < 4); } diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c index 15ff16c..dc1db51 100644 --- a/vp9/decoder/vp9_decodframe.c +++ b/vp9/decoder/vp9_decodframe.c @@ -254,21 +254,13 @@ static void decode_atom_intra(VP9D_COMP *pbi, MACROBLOCKD *xd, dst = raster_block_offset_uint8(xd, bsize, 0, i, xd->plane[0].dst.buf, xd->plane[0].dst.stride); -#if CONFIG_NEWBINTRAMODES - xd->mode_info_context->bmi[i].as_mode.context = - vp9_find_bpred_context(xd, i, dst, xd->plane[0].dst.stride); - if (!xd->mode_info_context->mbmi.mb_skip_coeff) - vp9_decode_coefs_4x4(pbi, xd, r, PLANE_TYPE_Y_WITH_DC, i); -#endif + vp9_intra4x4_predict(xd, i, bsize, b_mode, dst, xd->plane[0].dst.stride); // TODO(jingning): refactor to use foreach_transformed_block_in_plane_ tx_type = get_tx_type_4x4(xd, i); dequant_add_y(xd, tx_type, i, bsize); } -#if CONFIG_NEWBINTRAMODES - if (!xd->mode_info_context->mbmi.mb_skip_coeff) - vp9_decode_mb_tokens_4x4_uv(pbi, xd, r); -#endif + foreach_transformed_block_uv(xd, bsize, decode_block, xd); } @@ -294,9 +286,6 @@ static void decode_atom(VP9D_COMP *pbi, MACROBLOCKD *xd, mb_init_dequantizer(&pbi->common, xd); if (!vp9_reader_has_error(r)) { -#if CONFIG_NEWBINTRAMODES - if (mbmi->mode != I4X4_PRED) -#endif vp9_decode_tokens(pbi, xd, r, bsize); } } diff --git a/vp9/decoder/vp9_detokenize.c b/vp9/decoder/vp9_detokenize.c index 0ef25ba..e698441 100644 --- a/vp9/decoder/vp9_detokenize.c +++ b/vp9/decoder/vp9_detokenize.c @@ -388,51 +388,3 @@ int vp9_decode_tokens(VP9D_COMP* const pbi, foreach_transformed_block(xd, bsize, decode_block, &args); return eobtotal; } - -#if CONFIG_NEWBINTRAMODES -static int decode_coefs_4x4(VP9D_COMP *dx, MACROBLOCKD *xd, - vp9_reader *r, - PLANE_TYPE type, int i, int seg_eob) { - const struct plane_block_idx pb_idx = plane_block_idx(16, i); - const int mod = 2 - xd->plane[pb_idx.plane].subsampling_x; - const int aoff = pb_idx.block & ((1 << mod) - 1); - const int loff = pb_idx.block >> mod; - ENTROPY_CONTEXT *A = xd->plane[pb_idx.plane].above_context; - ENTROPY_CONTEXT *L = xd->plane[pb_idx.plane].left_context; - const int c = decode_coefs(dx, xd, r, i, type, seg_eob, - BLOCK_OFFSET(xd->plane[pb_idx.plane].qcoeff, pb_idx.block, 16), TX_4X4, - xd->plane[pb_idx.plane].dequant, A + aoff, L + loff); - xd->plane[pb_idx.plane].eobs[pb_idx.block] = c; - return c; -} - -static int decode_mb_tokens_4x4_uv(VP9D_COMP* const dx, - MACROBLOCKD* const xd, - vp9_reader *r, - int seg_eob) { - int i, eobtotal = 0; - - // chroma blocks - for (i = 16; i < 24; i++) - eobtotal += decode_coefs_4x4(dx, xd, r, PLANE_TYPE_UV, i, seg_eob); - - return eobtotal; -} - -int vp9_decode_mb_tokens_4x4_uv(VP9D_COMP* const dx, - MACROBLOCKD* const xd, - vp9_reader *r) { - const int segment_id = xd->mode_info_context->mbmi.segment_id; - const int seg_eob = get_eob(xd, segment_id, 16); - - return decode_mb_tokens_4x4_uv(dx, xd, r, seg_eob); -} - -int vp9_decode_coefs_4x4(VP9D_COMP *dx, MACROBLOCKD *xd, - vp9_reader *r, - PLANE_TYPE type, int i) { - const int segment_id = xd->mode_info_context->mbmi.segment_id; - const int seg_eob = get_eob(xd, segment_id, 16); - return decode_coefs_4x4(dx, xd, r, type, i, seg_eob); -} -#endif diff --git a/vp9/decoder/vp9_detokenize.h b/vp9/decoder/vp9_detokenize.h index 0e53c0e..13235bd 100644 --- a/vp9/decoder/vp9_detokenize.h +++ b/vp9/decoder/vp9_detokenize.h @@ -19,12 +19,4 @@ int vp9_decode_tokens(VP9D_COMP* const pbi, vp9_reader *r, BLOCK_SIZE_TYPE bsize); -#if CONFIG_NEWBINTRAMODES -int vp9_decode_mb_tokens_4x4_uv(VP9D_COMP* const dx, MACROBLOCKD* const xd, - vp9_reader *r); -int vp9_decode_coefs_4x4(VP9D_COMP *dx, MACROBLOCKD *xd, - vp9_reader *r, - PLANE_TYPE type, int i); -#endif - #endif // VP9_DECODER_VP9_DETOKENIZE_H_ diff --git a/vp9/encoder/vp9_bitstream.c b/vp9/encoder/vp9_bitstream.c index 6624f07..4967ccf 100644 --- a/vp9/encoder/vp9_bitstream.c +++ b/vp9/encoder/vp9_bitstream.c @@ -287,10 +287,6 @@ static void write_uv_mode(vp9_writer *bc, int m, const vp9_prob *p) { static void write_bmode(vp9_writer *bc, int m, const vp9_prob *p) { -#if CONFIG_NEWBINTRAMODES - assert(m < B_CONTEXT_PRED - CONTEXT_PRED_REPLACEMENTS || m == B_CONTEXT_PRED); - if (m == B_CONTEXT_PRED) m -= CONTEXT_PRED_REPLACEMENTS; -#endif write_token(bc, vp9_bmode_tree, p, vp9_bmode_encodings + m); } diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index 6366d38..aa9f33a 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@ -1924,9 +1924,6 @@ static void sum_intra_stats(VP9_COMP *cpi, MACROBLOCK *x) { int b = 0; do { int m = xd->mode_info_context->bmi[b].as_mode.first; -#if CONFIG_NEWBINTRAMODES - if (m == B_CONTEXT_PRED) m -= CONTEXT_PRED_REPLACEMENTS; -#endif ++cpi->bmode_count[m]; } while (++b < 4); } diff --git a/vp9/encoder/vp9_encodeintra.c b/vp9/encoder/vp9_encodeintra.c index 72a6603..fe5bdb3 100644 --- a/vp9/encoder/vp9_encodeintra.c +++ b/vp9/encoder/vp9_encodeintra.c @@ -61,11 +61,6 @@ static void encode_intra4x4block(MACROBLOCK *x, int ib, assert(ib < (1 << (bwl + bhl))); -#if CONFIG_NEWBINTRAMODES - xd->mode_info_context->bmi[ib].as_mode.context = - vp9_find_bpred_context(&x->e_mbd, ib, dst, xd->plane[0].dst.stride); -#endif - vp9_intra4x4_predict(&x->e_mbd, ib, bsize, xd->mode_info_context->bmi[ib].as_mode.first, dst, xd->plane[0].dst.stride); diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c index e0d4bc8..9e1ea2f 100644 --- a/vp9/encoder/vp9_rdopt.c +++ b/vp9/encoder/vp9_rdopt.c @@ -749,32 +749,14 @@ static int64_t rd_pick_intra4x4block(VP9_COMP *cpi, MACROBLOCK *x, int ib, DECLARE_ALIGNED_ARRAY(16, int16_t, best_dqcoeff, 16); assert(ib < 4); -#if CONFIG_NEWBINTRAMODES - xd->mode_info_context->bmi[ib].as_mode.context = - vp9_find_bpred_context(xd, ib, dst, xd->plane[0].dst.stride); -#endif + xd->mode_info_context->mbmi.txfm_size = TX_4X4; for (mode = B_DC_PRED; mode < LEFT4X4; mode++) { int64_t this_rd; int ratey; -#if CONFIG_NEWBINTRAMODES - if (xd->frame_type == KEY_FRAME) { - if (mode == B_CONTEXT_PRED) continue; - } else { - if (mode >= B_CONTEXT_PRED - CONTEXT_PRED_REPLACEMENTS && - mode < B_CONTEXT_PRED) - continue; - } -#endif - xd->mode_info_context->bmi[ib].as_mode.first = mode; -#if CONFIG_NEWBINTRAMODES - rate = bmode_costs[ - mode == B_CONTEXT_PRED ? mode - CONTEXT_PRED_REPLACEMENTS : mode]; -#else rate = bmode_costs[mode]; -#endif vp9_intra4x4_predict(xd, ib, BLOCK_SIZE_SB8X8, @@ -860,14 +842,6 @@ static int64_t rd_pick_intra4x4mby_modes(VP9_COMP *cpi, MACROBLOCK *mb, const int mis = xd->mode_info_stride; B_PREDICTION_MODE UNINITIALIZED_IS_SAFE(best_mode); int UNINITIALIZED_IS_SAFE(r), UNINITIALIZED_IS_SAFE(ry), UNINITIALIZED_IS_SAFE(d); -#if CONFIG_NEWBINTRAMODES - uint8_t* const dst = - raster_block_offset_uint8(xd, - BLOCK_SIZE_SB8X8, - 0, i, - xd->plane[0].dst.buf, - xd->plane[0].dst.stride); -#endif if (xd->frame_type == KEY_FRAME) { const B_PREDICTION_MODE A = above_block_mode(mic, i, mis); @@ -875,10 +849,6 @@ static int64_t rd_pick_intra4x4mby_modes(VP9_COMP *cpi, MACROBLOCK *mb, bmode_costs = mb->bmode_costs[A][L]; } -#if CONFIG_NEWBINTRAMODES - mic->bmi[i].as_mode.context = vp9_find_bpred_context(xd, i, dst, - xd->plane[0].dst.stride); -#endif total_rd += rd_pick_intra4x4block(cpi, mb, i, &best_mode, bmode_costs, t_above + x_idx, t_left + y_idx, @@ -890,10 +860,6 @@ static int64_t rd_pick_intra4x4mby_modes(VP9_COMP *cpi, MACROBLOCK *mb, mic->bmi[i].as_mode.first = best_mode; -#if 0 // CONFIG_NEWBINTRAMODES - printf("%d %d\n", mic->bmi[i].as_mode.first, mic->bmi[i].as_mode.context); -#endif - if (total_rd >= best_rd) break; } @@ -1140,13 +1106,7 @@ static int labels2mode(MACROBLOCK *x, left_second_mv.as_int == this_second_mv->as_int)) m = LEFT4X4; } - -#if CONFIG_NEWBINTRAMODES - cost = x->inter_bmode_costs[m == B_CONTEXT_PRED ? - m - CONTEXT_PRED_REPLACEMENTS : m]; -#else cost = x->inter_bmode_costs[m]; -#endif } mic->bmi[i].as_mv[0].as_int = this_mv->as_int; diff --git a/vp9/vp9_common.mk b/vp9/vp9_common.mk index 9e3ec15..a5b33ba 100644 --- a/vp9/vp9_common.mk +++ b/vp9/vp9_common.mk @@ -74,7 +74,6 @@ VP9_COMMON_SRCS-yes += common/vp9_quant_common.c VP9_COMMON_SRCS-yes += common/vp9_recon.c VP9_COMMON_SRCS-yes += common/vp9_reconinter.c VP9_COMMON_SRCS-yes += common/vp9_reconintra.c -VP9_COMMON_SRCS-yes += common/vp9_reconintra4x4.c VP9_COMMON_SRCS-yes += common/vp9_swapyv12buffer.c VP9_COMMON_SRCS-$(CONFIG_POSTPROC_VISUALIZER) += common/vp9_textblit.c VP9_COMMON_SRCS-yes += common/vp9_treecoder.c -- 2.7.4