summaryrefslogtreecommitdiff
path: root/vp9/common
diff options
context:
space:
mode:
authorYaowu Xu <yaowu@google.com>2013-05-24 16:13:54 -0700
committerYaowu Xu <yaowu@google.com>2013-05-27 13:53:56 -0700
commit2b96ffe025673a6943476989a689df938df7523b (patch)
tree334209a89251e23774799881257c56ac09095cd3 /vp9/common
parent95339d68258b8f752e114e6c81e6e19f99cde5a4 (diff)
downloadlibvpx-2b96ffe025673a6943476989a689df938df7523b.tar
libvpx-2b96ffe025673a6943476989a689df938df7523b.tar.gz
libvpx-2b96ffe025673a6943476989a689df938df7523b.tar.bz2
libvpx-2b96ffe025673a6943476989a689df938df7523b.zip
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
Diffstat (limited to 'vp9/common')
-rw-r--r--vp9/common/vp9_blockd.h47
-rw-r--r--vp9/common/vp9_entropymode.c55
-rw-r--r--vp9/common/vp9_entropymode.h15
-rw-r--r--vp9/common/vp9_findnearmv.h4
-rw-r--r--vp9/common/vp9_modecontext.c6
-rw-r--r--vp9/common/vp9_onyxc_int.h12
-rw-r--r--vp9/common/vp9_postproc.c2
-rw-r--r--vp9/common/vp9_reconintra.h10
8 files changed, 50 insertions, 101 deletions
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,