From 2b96ffe025673a6943476989a689df938df7523b Mon Sep 17 00:00:00 2001 From: Yaowu Xu Date: Fri, 24 May 2013 16:13:54 -0700 Subject: a few clean-ups 1. remove prediction mode conversion 2. unified bmode, same for key and non-key frame 3. set I4X4_PRED count for pdf to 0, as I4X4_PRED is no longer coded ever. It is determined by ref_frame and block partition Change-Id: If5b282957c24339b241acdb9f2afef85658fe47d --- vp9/common/vp9_blockd.h | 47 ++++--------------------------------- vp9/common/vp9_entropymode.c | 55 +++++++++++++++++--------------------------- vp9/common/vp9_entropymode.h | 15 ++++++------ vp9/common/vp9_findnearmv.h | 4 ++-- vp9/common/vp9_modecontext.c | 6 ++--- vp9/common/vp9_onyxc_int.h | 12 +++++----- vp9/common/vp9_postproc.c | 2 +- vp9/common/vp9_reconintra.h | 10 ++++---- 8 files changed, 50 insertions(+), 101 deletions(-) (limited to 'vp9/common') diff --git a/vp9/common/vp9_blockd.h b/vp9/common/vp9_blockd.h index cc8b23983..9626540c3 100644 --- a/vp9/common/vp9_blockd.h +++ b/vp9/common/vp9_blockd.h @@ -91,6 +91,7 @@ static INLINE int is_inter_mode(MB_PREDICTION_MODE mode) { return mode >= NEARESTMV && mode <= SPLITMV; } +#define INTRA_MODE_COUNT (TM_PRED + 1) // Segment level features. typedef enum { @@ -126,25 +127,7 @@ typedef enum { #define WHT_UPSCALE_FACTOR 2 -typedef enum { - B_DC_PRED, /* average of above and left pixels */ - B_V_PRED, /* vertical prediction */ - B_H_PRED, /* horizontal prediction */ - B_D45_PRED, - B_D135_PRED, - B_D117_PRED, - B_D153_PRED, - B_D27_PRED, - B_D63_PRED, - B_TM_PRED, - - B_MODE_COUNT -} B_PREDICTION_MODE; - -#define VP9_BINTRAMODES (B_MODE_COUNT) - -#define VP9_KF_BINTRAMODES (VP9_BINTRAMODES) /* 10 */ -#define VP9_NKF_BINTRAMODES (VP9_BINTRAMODES) /* 10 */ +#define VP9_BINTRAMODES INTRA_MODE_COUNT /* 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 @@ -532,25 +515,6 @@ static BLOCK_SIZE_TYPE get_subsize(BLOCK_SIZE_TYPE bsize, return subsize; } -// convert MB_PREDICTION_MODE to B_PREDICTION_MODE -static MB_PREDICTION_MODE pred_mode_conv(MB_PREDICTION_MODE mode) { - switch (mode) { - case DC_PRED: return DC_PRED; - case V_PRED: return V_PRED; - case H_PRED: return H_PRED; - case TM_PRED: return TM_PRED; - case D45_PRED: return D45_PRED; - case D135_PRED: return D135_PRED; - case D117_PRED: return D117_PRED; - case D153_PRED: return D153_PRED; - case D27_PRED: return D27_PRED; - case D63_PRED: return D63_PRED; - default: - assert(0); - return MB_MODE_COUNT; // Dummy value - } -} - // transform mapping static TX_TYPE txfm_map(MB_PREDICTION_MODE bmode) { switch (bmode) { @@ -573,7 +537,6 @@ static TX_TYPE txfm_map(MB_PREDICTION_MODE bmode) { } } - static TX_TYPE get_tx_type_4x4(const MACROBLOCKD *xd, int ib) { TX_TYPE tx_type = DCT_DCT; if (xd->lossless) @@ -582,7 +545,7 @@ static TX_TYPE get_tx_type_4x4(const MACROBLOCKD *xd, int ib) { tx_type = txfm_map( xd->mode_info_context->bmi[ib].as_mode.first); } else if (xd->mode_info_context->mbmi.mode <= TM_PRED) { - tx_type = txfm_map(pred_mode_conv(xd->mode_info_context->mbmi.mode)); + tx_type = txfm_map(xd->mode_info_context->mbmi.mode); } return tx_type; } @@ -590,7 +553,7 @@ static TX_TYPE get_tx_type_4x4(const MACROBLOCKD *xd, int ib) { static TX_TYPE get_tx_type_8x8(const MACROBLOCKD *xd, int ib) { TX_TYPE tx_type = DCT_DCT; if (xd->mode_info_context->mbmi.mode <= TM_PRED) { - tx_type = txfm_map(pred_mode_conv(xd->mode_info_context->mbmi.mode)); + tx_type = txfm_map(xd->mode_info_context->mbmi.mode); } return tx_type; } @@ -598,7 +561,7 @@ static TX_TYPE get_tx_type_8x8(const MACROBLOCKD *xd, int ib) { static TX_TYPE get_tx_type_16x16(const MACROBLOCKD *xd, int ib) { TX_TYPE tx_type = DCT_DCT; if (xd->mode_info_context->mbmi.mode <= TM_PRED) { - tx_type = txfm_map(pred_mode_conv(xd->mode_info_context->mbmi.mode)); + tx_type = txfm_map(xd->mode_info_context->mbmi.mode); } return tx_type; } diff --git a/vp9/common/vp9_entropymode.c b/vp9/common/vp9_entropymode.c index ddc7bbd33..622f1dcf4 100644 --- a/vp9/common/vp9_entropymode.c +++ b/vp9/common/vp9_entropymode.c @@ -29,7 +29,7 @@ static const unsigned int kf_y_mode_cts[8][VP9_YMODES] = { static const unsigned int y_mode_cts [VP9_YMODES] = { /* DC V H D45 135 117 153 D27 D63 TM i4X4 */ - 98, 19, 15, 14, 14, 14, 14, 12, 12, 13, 70 + 98, 19, 15, 14, 14, 14, 14, 12, 12, 13, 0 }; static const unsigned int uv_mode_cts [VP9_YMODES] [VP9_UV_MODES] = { @@ -62,7 +62,7 @@ static const unsigned int kf_uv_mode_cts [VP9_YMODES] [VP9_UV_MODES] = { { 122, 41, 35, 20, 20, 20, 20, 20, 20, 18}, /* I4X4 */ }; -static const unsigned int bmode_cts[VP9_NKF_BINTRAMODES] = { +static const unsigned int bmode_cts[VP9_BINTRAMODES] = { /* DC V H D45 D135 D117 D153 D27 D63 TM */ 43891, 10036, 3920, 3363, 2546, 5119, 2471, 1723, 3221, 17694 }; @@ -89,29 +89,16 @@ const vp9_prob vp9_partition_probs[NUM_PARTITION_CONTEXTS] }; /* Array indices are identical to previously-existing INTRAMODECONTEXTNODES. */ - -const vp9_tree_index vp9_kf_bmode_tree[VP9_KF_BINTRAMODES * 2 - 2] = { - -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, -B_D27_PRED /* 8 = D153_NODE */ -}; - -const vp9_tree_index vp9_bmode_tree[VP9_NKF_BINTRAMODES * 2 - 2] = { - -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, -B_D27_PRED /* 8 = D153_NODE */ +const vp9_tree_index vp9_bmode_tree[VP9_BINTRAMODES * 2 - 2] = { + -DC_PRED, 2, /* 0 = DC_NODE */ + -TM_PRED, 4, /* 1 = TM_NODE */ + -V_PRED, 6, /* 2 = V_NODE */ + 8, 12, /* 3 = COM_NODE */ + -H_PRED, 10, /* 4 = H_NODE */ + -D135_PRED, -D117_PRED, /* 5 = D135_NODE */ + -D45_PRED, 14, /* 6 = D45_NODE */ + -D63_PRED, 16, /* 7 = D63_NODE */ + -D153_PRED, -D27_PRED /* 8 = D153_NODE */ }; /* Again, these trees use the same probability indices as their @@ -173,8 +160,8 @@ const vp9_tree_index vp9_partition_tree[6] = { -PARTITION_VERT, -PARTITION_SPLIT }; -struct vp9_token vp9_bmode_encodings[VP9_NKF_BINTRAMODES]; -struct vp9_token vp9_kf_bmode_encodings[VP9_KF_BINTRAMODES]; +struct vp9_token vp9_bmode_encodings[VP9_BINTRAMODES]; +struct vp9_token vp9_kf_bmode_encodings[VP9_BINTRAMODES]; struct vp9_token vp9_ymode_encodings[VP9_YMODES]; struct vp9_token vp9_sb_ymode_encodings[VP9_I32X32_MODES]; struct vp9_token vp9_sb_kf_ymode_encodings[VP9_I32X32_MODES]; @@ -222,14 +209,14 @@ void vp9_init_mbmode_probs(VP9_COMMON *x) { static void intra_bmode_probs_from_distribution( - vp9_prob p[VP9_NKF_BINTRAMODES - 1], - unsigned int branch_ct[VP9_NKF_BINTRAMODES - 1][2], - const unsigned int events[VP9_NKF_BINTRAMODES]) { + vp9_prob p[VP9_BINTRAMODES - 1], + unsigned int branch_ct[VP9_BINTRAMODES - 1][2], + const unsigned int events[VP9_BINTRAMODES]) { vp9_tree_probs_from_distribution(vp9_bmode_tree, p, branch_ct, events, 0); } -void vp9_default_bmode_probs(vp9_prob p[VP9_NKF_BINTRAMODES - 1]) { - unsigned int branch_ct[VP9_NKF_BINTRAMODES - 1][2]; +void vp9_default_bmode_probs(vp9_prob p[VP9_BINTRAMODES - 1]) { + unsigned int branch_ct[VP9_BINTRAMODES - 1][2]; intra_bmode_probs_from_distribution(p, branch_ct, bmode_cts); } @@ -267,7 +254,7 @@ const int vp9_switchable_interp_map[SWITCHABLE+1] = {-1, 0, 1, -1, -1}; const int vp9_is_interpolating_filter[SWITCHABLE + 1] = {0, 1, 1, 1, -1}; void vp9_entropy_mode_init() { - vp9_tokens_from_tree(vp9_kf_bmode_encodings, vp9_kf_bmode_tree); + vp9_tokens_from_tree(vp9_kf_bmode_encodings, vp9_bmode_tree); vp9_tokens_from_tree(vp9_bmode_encodings, vp9_bmode_tree); vp9_tokens_from_tree(vp9_ymode_encodings, vp9_ymode_tree); vp9_tokens_from_tree(vp9_kf_ymode_encodings, vp9_kf_ymode_tree); @@ -410,7 +397,7 @@ void vp9_adapt_mode_probs(VP9_COMMON *cm) { fc->uv_mode_counts[i], fc->pre_uv_mode_prob[i], fc->uv_mode_prob[i], 0); - update_mode_probs(VP9_NKF_BINTRAMODES, vp9_bmode_tree, + update_mode_probs(VP9_BINTRAMODES, vp9_bmode_tree, fc->bmode_counts, fc->pre_bmode_prob, fc->bmode_prob, 0); diff --git a/vp9/common/vp9_entropymode.h b/vp9/common/vp9_entropymode.h index ec3bfeda9..8fbc6f20e 100644 --- a/vp9/common/vp9_entropymode.h +++ b/vp9/common/vp9_entropymode.h @@ -18,13 +18,12 @@ extern int vp9_mv_cont(const int_mv *l, const int_mv *a); -extern const vp9_prob vp9_kf_default_bmode_probs[VP9_KF_BINTRAMODES] - [VP9_KF_BINTRAMODES] - [VP9_KF_BINTRAMODES -1 ]; -extern const vp9_tree_index vp9_bmode_tree[]; -extern const vp9_tree_index vp9_kf_bmode_tree[]; +extern const vp9_prob vp9_kf_default_bmode_probs[VP9_BINTRAMODES] + [VP9_BINTRAMODES] + [VP9_BINTRAMODES -1 ]; +extern const vp9_tree_index vp9_bmode_tree[]; extern const vp9_tree_index vp9_ymode_tree[]; extern const vp9_tree_index vp9_kf_ymode_tree[]; extern const vp9_tree_index vp9_uv_mode_tree[]; @@ -34,8 +33,8 @@ extern const vp9_tree_index vp9_mv_ref_tree[]; extern const vp9_tree_index vp9_sb_mv_ref_tree[]; extern const vp9_tree_index vp9_sub_mv_ref_tree[]; -extern struct vp9_token vp9_bmode_encodings[VP9_NKF_BINTRAMODES]; -extern struct vp9_token vp9_kf_bmode_encodings[VP9_KF_BINTRAMODES]; +extern struct vp9_token vp9_bmode_encodings[VP9_BINTRAMODES]; +extern struct vp9_token vp9_kf_bmode_encodings[VP9_BINTRAMODES]; extern struct vp9_token vp9_ymode_encodings[VP9_YMODES]; extern struct vp9_token vp9_sb_ymode_encodings[VP9_I32X32_MODES]; extern struct vp9_token vp9_sb_kf_ymode_encodings[VP9_I32X32_MODES]; @@ -68,7 +67,7 @@ extern void vp9_accum_mv_refs(struct VP9Common *pc, MB_PREDICTION_MODE m, const int context); -void vp9_default_bmode_probs(vp9_prob dest[VP9_NKF_BINTRAMODES - 1]); +void vp9_default_bmode_probs(vp9_prob dest[VP9_BINTRAMODES - 1]); void vp9_adapt_mode_probs(struct VP9Common *); diff --git a/vp9/common/vp9_findnearmv.h b/vp9/common/vp9_findnearmv.h index 855ecab6d..bc5afb12d 100644 --- a/vp9/common/vp9_findnearmv.h +++ b/vp9/common/vp9_findnearmv.h @@ -88,7 +88,7 @@ static MB_PREDICTION_MODE left_block_mode(const MODE_INFO *cur_mb, int b) { --cur_mb; if (cur_mb->mbmi.mode <= TM_PRED) { - return pred_mode_conv(cur_mb->mbmi.mode); + return cur_mb->mbmi.mode; } else if (cur_mb->mbmi.mode == I4X4_PRED) { return ((cur_mb->bmi + 1 + b)->as_mode.first); } else { @@ -106,7 +106,7 @@ static MB_PREDICTION_MODE above_block_mode(const MODE_INFO *cur_mb, cur_mb -= mi_stride; if (cur_mb->mbmi.mode <= TM_PRED) { - return pred_mode_conv(cur_mb->mbmi.mode); + return cur_mb->mbmi.mode; } else if (cur_mb->mbmi.mode == I4X4_PRED) { return ((cur_mb->bmi + 2 + b)->as_mode.first); } else { diff --git a/vp9/common/vp9_modecontext.c b/vp9/common/vp9_modecontext.c index 697683ab1..5f084eadc 100644 --- a/vp9/common/vp9_modecontext.c +++ b/vp9/common/vp9_modecontext.c @@ -11,9 +11,9 @@ #include "vp9/common/vp9_entropymode.h" -const vp9_prob vp9_kf_default_bmode_probs[VP9_KF_BINTRAMODES] - [VP9_KF_BINTRAMODES] - [VP9_KF_BINTRAMODES-1] = { +const vp9_prob vp9_kf_default_bmode_probs[VP9_BINTRAMODES] + [VP9_BINTRAMODES] + [VP9_BINTRAMODES-1] = { { // Above 0 { 231, 9, 124, 138, 96, 200, 76, 42, 88, }, // left 0 { 152, 11, 187, 112, 170, 139, 130, 91, 113, }, // left 1 diff --git a/vp9/common/vp9_onyxc_int.h b/vp9/common/vp9_onyxc_int.h index 7140ee693..97d4ed6d1 100644 --- a/vp9/common/vp9_onyxc_int.h +++ b/vp9/common/vp9_onyxc_int.h @@ -47,7 +47,7 @@ void vp9_initialize_common(void); #define MAX_LAG_BUFFERS 25 typedef struct frame_contexts { - vp9_prob bmode_prob[VP9_NKF_BINTRAMODES - 1]; + vp9_prob bmode_prob[VP9_BINTRAMODES - 1]; vp9_prob ymode_prob[VP9_YMODES - 1]; /* interframe intra mode probs */ vp9_prob sb_ymode_prob[VP9_I32X32_MODES - 1]; vp9_prob uv_mode_prob[VP9_YMODES][VP9_UV_MODES - 1]; @@ -55,12 +55,12 @@ typedef struct frame_contexts { nmv_context nmvc; nmv_context pre_nmvc; - vp9_prob pre_bmode_prob[VP9_NKF_BINTRAMODES - 1]; + vp9_prob pre_bmode_prob[VP9_BINTRAMODES - 1]; vp9_prob pre_ymode_prob[VP9_YMODES - 1]; /* interframe intra mode probs */ vp9_prob pre_sb_ymode_prob[VP9_I32X32_MODES - 1]; vp9_prob pre_uv_mode_prob[VP9_YMODES][VP9_UV_MODES - 1]; vp9_prob pre_partition_prob[NUM_PARTITION_CONTEXTS][PARTITION_TYPES - 1]; - unsigned int bmode_counts[VP9_NKF_BINTRAMODES]; + unsigned int bmode_counts[VP9_BINTRAMODES]; unsigned int ymode_counts[VP9_YMODES]; /* interframe intra mode probs */ unsigned int sb_ymode_counts[VP9_I32X32_MODES]; unsigned int uv_mode_counts[VP9_YMODES][VP9_UV_MODES]; @@ -218,9 +218,9 @@ typedef struct VP9Common { /* keyframe block modes are predicted by their above, left neighbors */ - vp9_prob kf_bmode_prob[VP9_KF_BINTRAMODES] - [VP9_KF_BINTRAMODES] - [VP9_KF_BINTRAMODES - 1]; + vp9_prob kf_bmode_prob[VP9_BINTRAMODES] + [VP9_BINTRAMODES] + [VP9_BINTRAMODES - 1]; vp9_prob kf_ymode_prob[8][VP9_YMODES - 1]; /* keyframe "" */ vp9_prob sb_kf_ymode_prob[8][VP9_I32X32_MODES - 1]; int kf_ymode_probs_index; diff --git a/vp9/common/vp9_postproc.c b/vp9/common/vp9_postproc.c index d2c52edfd..3aae669bf 100644 --- a/vp9/common/vp9_postproc.c +++ b/vp9/common/vp9_postproc.c @@ -53,7 +53,7 @@ static const unsigned char MB_PREDICTION_MODE_colors[MB_MODE_COUNT][3] = { { RGB_TO_YUV(0xCC33FF) }, /* Magenta */ }; -static const unsigned char B_PREDICTION_MODE_colors[B_MODE_COUNT][3] = { +static const unsigned char B_PREDICTION_MODE_colors[INTRA_MODE_COUNT][3] = { { RGB_TO_YUV(0x6633ff) }, /* Purple */ { RGB_TO_YUV(0xcc33ff) }, /* Magenta */ { RGB_TO_YUV(0xff33cc) }, /* Pink */ diff --git a/vp9/common/vp9_reconintra.h b/vp9/common/vp9_reconintra.h index b88761b02..f5f5f42c4 100644 --- a/vp9/common/vp9_reconintra.h +++ b/vp9/common/vp9_reconintra.h @@ -14,12 +14,12 @@ #include "vpx/vpx_integer.h" #include "vp9/common/vp9_blockd.h" -B_PREDICTION_MODE vp9_find_dominant_direction(uint8_t *ptr, - int stride, int n, - int tx, int ty); +MB_PREDICTION_MODE vp9_find_dominant_direction(uint8_t *ptr, + int stride, int n, + int tx, int ty); -B_PREDICTION_MODE vp9_find_bpred_context(MACROBLOCKD *xd, int block, - uint8_t *ptr, int stride); +MB_PREDICTION_MODE vp9_find_bpred_context(MACROBLOCKD *xd, int block, + uint8_t *ptr, int stride); void vp9_predict_intra_block(MACROBLOCKD *xd, int block_idx, -- cgit v1.2.3