intrabc: Remove NEWDV from the intra mode tree.

Change-Id: I4e13da4bf70386f6f70ea733fb9adeb41682c735
This commit is contained in:
Alex Converse 2015-05-06 14:01:10 -07:00
parent f35fb46c48
commit 1f537e3818
8 changed files with 97 additions and 232 deletions

View File

@ -145,11 +145,9 @@ static INLINE int have_newmv_in_inter_mode(PREDICTION_MODE mode) {
static INLINE int is_intrabc_mode(PREDICTION_MODE mode) {
return mode == NEWDV;
}
#define INTRA_MODES (NEWDV + 1) // XXX
#else
#define INTRA_MODES (TM_PRED + 1) // XXX
#endif // CONFIG_INTRABC
#define INTRA_MODES (TM_PRED + 1)
#if CONFIG_NEW_INTER
#define INTER_MODES (1 + NEW2MV - NEARESTMV)
#else
@ -468,12 +466,17 @@ static INLINE TX_TYPE get_tx_type(PLANE_TYPE plane_type,
if (plane_type != PLANE_TYPE_Y || xd->lossless || is_inter_block(mbmi))
return DCT_DCT;
#endif
#if CONFIG_INTRABC
if (is_intrabc_mode(mbmi->mode))
return DCT_DCT;
#endif // CONFIG_INTRABC
return intra_mode_to_tx_type_lookup[mbmi->mode];
}
static INLINE TX_TYPE get_tx_type_4x4(PLANE_TYPE plane_type,
const MACROBLOCKD *xd, int ib) {
const MODE_INFO *const mi = xd->mi[0].src_mi;
PREDICTION_MODE mode;
#if CONFIG_EXT_TX
if (plane_type != PLANE_TYPE_Y || xd->lossless)
@ -487,7 +490,13 @@ static INLINE TX_TYPE get_tx_type_4x4(PLANE_TYPE plane_type,
return DCT_DCT;
#endif
return intra_mode_to_tx_type_lookup[get_y_mode(mi, ib)];
mode = get_y_mode(mi, ib);
#if CONFIG_INTRABC
if (is_intrabc_mode(mode))
return DCT_DCT;
#endif // CONFIG_INTRABC
return intra_mode_to_tx_type_lookup[mode];
}
void vp9_setup_block_planes(MACROBLOCKD *xd, int ss_x, int ss_y);

View File

@ -273,7 +273,11 @@ static INLINE const scan_order *get_scan(const MACROBLOCKD *xd, TX_SIZE tx_size,
return &vp9_default_scan_orders_pxd[tx_size];
#endif // CONFIG_TX_SKIP
if (is_inter_block(&mi->mbmi) || type != PLANE_TYPE_Y || xd->lossless) {
if (is_inter_block(&mi->mbmi) || type != PLANE_TYPE_Y || xd->lossless
#if CONFIG_INTRABC
|| is_intrabc_mode(mi->mbmi.mode)
#endif
) {
return &vp9_default_scan_orders[tx_size];
} else {
const PREDICTION_MODE mode = get_y_mode(mi, block_idx);

View File

@ -36,141 +36,6 @@ static const vp9_prob default_uv_tx_skip_prob[2] = {250, 160};
#endif // CONFIG_TX_SKIP
const vp9_prob vp9_kf_y_mode_prob[INTRA_MODES][INTRA_MODES][INTRA_MODES - 1] = {
#if CONFIG_INTRABC
{ // above = dc
{ 137, 30, 42, 148, 151, 207, 70, 52, 91, 128 }, // left = dc
{ 92, 45, 102, 136, 116, 180, 74, 90, 100, 128 }, // left = v
{ 73, 32, 19, 187, 222, 215, 46, 34, 100, 128 }, // left = h
{ 91, 30, 32, 116, 121, 186, 93, 86, 94, 128 }, // left = d45
{ 72, 35, 36, 149, 68, 206, 68, 63, 105, 128 }, // left = d135
{ 73, 31, 28, 138, 57, 124, 55, 122, 151, 128 }, // left = d117
{ 67, 23, 21, 140, 126, 197, 40, 37, 171, 128 }, // left = d153
{ 86, 27, 28, 128, 154, 212, 45, 43, 53, 128 }, // left = d207
{ 74, 32, 27, 107, 86, 160, 63, 134, 102, 128 }, // left = d63
{ 59, 67, 44, 140, 161, 202, 78, 67, 119, 128 }, // left = tm
{ 137, 30, 42, 148, 151, 207, 70, 52, 91, 128 } // left = bc
}, { // above = v
{ 63, 36, 126, 146, 123, 158, 60, 90, 96, 128 }, // left = dc
{ 43, 46, 168, 134, 107, 128, 69, 142, 92, 128 }, // left = v
{ 44, 29, 68, 159, 201, 177, 50, 57, 77, 128 }, // left = h
{ 58, 38, 76, 114, 97, 172, 78, 133, 92, 128 }, // left = d45
{ 46, 41, 76, 140, 63, 184, 69, 112, 57, 128 }, // left = d135
{ 38, 32, 85, 140, 46, 112, 54, 151, 133, 128 }, // left = d117
{ 39, 27, 61, 131, 110, 175, 44, 75, 136, 128 }, // left = d153
{ 52, 30, 74, 113, 130, 175, 51, 64, 58, 128 }, // left = d207
{ 47, 35, 80, 100, 74, 143, 64, 163, 74, 128 }, // left = d63
{ 36, 61, 116, 114, 128, 162, 80, 125, 82, 128 }, // left = tm
{ 63, 36, 126, 146, 123, 158, 60, 90, 96, 128 } // left = bc
}, { // above = h
{ 82, 26, 26, 171, 208, 204, 44, 32, 105, 128 }, // left = dc
{ 55, 44, 68, 166, 179, 192, 57, 57, 108, 128 }, // left = v
{ 42, 26, 11, 199, 241, 228, 23, 15, 85, 128 }, // left = h
{ 68, 42, 19, 131, 160, 199, 55, 52, 83, 128 }, // left = d45
{ 58, 50, 25, 139, 115, 232, 39, 52, 118, 128 }, // left = d135
{ 50, 35, 33, 153, 104, 162, 64, 59, 131, 128 }, // left = d117
{ 44, 24, 16, 150, 177, 202, 33, 19, 156, 128 }, // left = d153
{ 55, 27, 12, 153, 203, 218, 26, 27, 49, 128 }, // left = d207
{ 53, 49, 21, 110, 116, 168, 59, 80, 76, 128 }, // left = d63
{ 38, 72, 19, 168, 203, 212, 50, 50, 107, 128 }, // left = tm
{ 82, 26, 26, 171, 208, 204, 44, 32, 105, 128 } // left = bc
}, { // above = d45
{ 103, 26, 36, 129, 132, 201, 83, 80, 93, 128 }, // left = dc
{ 59, 38, 83, 112, 103, 162, 98, 136, 90, 128 }, // left = v
{ 62, 30, 23, 158, 200, 207, 59, 57, 50, 128 }, // left = h
{ 67, 30, 29, 84, 86, 191, 102, 91, 59, 128 }, // left = d45
{ 60, 32, 33, 112, 71, 220, 64, 89, 104, 128 }, // left = d135
{ 53, 26, 34, 130, 56, 149, 84, 120, 103, 128 }, // left = d117
{ 53, 21, 23, 133, 109, 210, 56, 77, 172, 128 }, // left = d153
{ 77, 19, 29, 112, 142, 228, 55, 66, 36, 128 }, // left = d207
{ 61, 29, 29, 93, 97, 165, 83, 175, 162, 128 }, // left = d63
{ 47, 47, 43, 114, 137, 181, 100, 99, 95, 128 }, // left = tm
{ 103, 26, 36, 129, 132, 201, 83, 80, 93, 128 } // left = bc
}, { // above = d135
{ 69, 23, 29, 128, 83, 199, 46, 44, 101, 128 }, // left = dc
{ 53, 40, 55, 139, 69, 183, 61, 80, 110, 128 }, // left = v
{ 40, 29, 19, 161, 180, 207, 43, 24, 91, 128 }, // left = h
{ 60, 34, 19, 105, 61, 198, 53, 64, 89, 128 }, // left = d45
{ 52, 31, 22, 158, 40, 209, 58, 62, 89, 128 }, // left = d135
{ 44, 31, 29, 147, 46, 158, 56, 102, 198, 128 }, // left = d117
{ 35, 19, 12, 135, 87, 209, 41, 45, 167, 128 }, // left = d153
{ 55, 25, 21, 118, 95, 215, 38, 39, 66, 128 }, // left = d207
{ 51, 38, 25, 113, 58, 164, 70, 93, 97, 128 }, // left = d63
{ 47, 54, 34, 146, 108, 203, 72, 103, 151, 128 }, // left = tm
{ 69, 23, 29, 128, 83, 199, 46, 44, 101, 128 } // left = bc
}, { // above = d117
{ 64, 19, 37, 156, 66, 138, 49, 95, 133, 128 }, // left = dc
{ 46, 27, 80, 150, 55, 124, 55, 121, 135, 128 }, // left = v
{ 36, 23, 27, 165, 149, 166, 54, 64, 118, 128 }, // left = h
{ 53, 21, 36, 131, 63, 163, 60, 109, 81, 128 }, // left = d45
{ 40, 26, 35, 154, 40, 185, 51, 97, 123, 128 }, // left = d135
{ 35, 19, 34, 179, 19, 97, 48, 129, 124, 128 }, // left = d117
{ 36, 20, 26, 136, 62, 164, 33, 77, 154, 128 }, // left = d153
{ 45, 18, 32, 130, 90, 157, 40, 79, 91, 128 }, // left = d207
{ 45, 26, 28, 129, 45, 129, 49, 147, 123, 128 }, // left = d63
{ 38, 44, 51, 136, 74, 162, 57, 97, 121, 128 }, // left = tm
{ 64, 19, 37, 156, 66, 138, 49, 95, 133, 128 } // left = bc
}, { // above = d153
{ 75, 17, 22, 136, 138, 185, 32, 34, 166, 128 }, // left = dc
{ 56, 39, 58, 133, 117, 173, 48, 53, 187, 128 }, // left = v
{ 35, 21, 12, 161, 212, 207, 20, 23, 145, 128 }, // left = h
{ 56, 29, 19, 117, 109, 181, 55, 68, 112, 128 }, // left = d45
{ 47, 29, 17, 153, 64, 220, 59, 51, 114, 128 }, // left = d135
{ 46, 16, 24, 136, 76, 147, 41, 64, 172, 128 }, // left = d117
{ 34, 17, 11, 108, 152, 187, 13, 15, 209, 128 }, // left = d153
{ 51, 24, 14, 115, 133, 209, 32, 26, 104, 128 }, // left = d207
{ 55, 30, 18, 122, 79, 179, 44, 88, 116, 128 }, // left = d63
{ 37, 49, 25, 129, 168, 164, 41, 54, 148, 128 }, // left = tm
{ 75, 17, 22, 136, 138, 185, 32, 34, 166, 128 } // left = bc
}, { // above = d207
{ 82, 22, 32, 127, 143, 213, 39, 41, 70, 128 }, // left = dc
{ 62, 44, 61, 123, 105, 189, 48, 57, 64, 128 }, // left = v
{ 47, 25, 17, 175, 222, 220, 24, 30, 86, 128 }, // left = h
{ 68, 36, 17, 106, 102, 206, 59, 74, 74, 128 }, // left = d45
{ 57, 39, 23, 151, 68, 216, 55, 63, 58, 128 }, // left = d135
{ 49, 30, 35, 141, 70, 168, 82, 40, 115, 128 }, // left = d117
{ 51, 25, 15, 136, 129, 202, 38, 35, 139, 128 }, // left = d153
{ 68, 26, 16, 111, 141, 215, 29, 28, 28, 128 }, // left = d207
{ 59, 39, 19, 114, 75, 180, 77, 104, 42, 128 }, // left = d63
{ 40, 61, 26, 126, 152, 206, 61, 59, 93, 128 }, // left = tm
{ 82, 22, 32, 127, 143, 213, 39, 41, 70, 128 } // left = bc
}, { // above = d63
{ 78, 23, 39, 111, 117, 170, 74, 124, 94, 128 }, // left = dc
{ 48, 34, 86, 101, 92, 146, 78, 179, 134, 128 }, // left = v
{ 47, 22, 24, 138, 187, 178, 68, 69, 59, 128 }, // left = h
{ 56, 25, 33, 105, 112, 187, 95, 177, 129, 128 }, // left = d45
{ 48, 31, 27, 114, 63, 183, 82, 116, 56, 128 }, // left = d135
{ 43, 28, 37, 121, 63, 123, 61, 192, 169, 128 }, // left = d117
{ 42, 17, 24, 109, 97, 177, 56, 76, 122, 128 }, // left = d153
{ 58, 18, 28, 105, 139, 182, 70, 92, 63, 128 }, // left = d207
{ 46, 23, 32, 74, 86, 150, 67, 183, 88, 128 }, // left = d63
{ 36, 38, 48, 92, 122, 165, 88, 137, 91, 128 }, // left = tm
{ 78, 23, 39, 111, 117, 170, 74, 124, 94, 128 } // left = bc
}, { // above = tm
{ 65, 70, 60, 155, 159, 199, 61, 60, 81, 128 }, // left = dc
{ 44, 78, 115, 132, 119, 173, 71, 112, 93, 128 }, // left = v
{ 39, 38, 21, 184, 227, 206, 42, 32, 64, 128 }, // left = h
{ 58, 47, 36, 124, 137, 193, 80, 82, 78, 128 }, // left = d45
{ 49, 50, 35, 144, 95, 205, 63, 78, 59, 128 }, // left = d135
{ 41, 53, 52, 148, 71, 142, 65, 128, 51, 128 }, // left = d117
{ 40, 36, 28, 143, 143, 202, 40, 55, 137, 128 }, // left = d153
{ 52, 34, 29, 129, 183, 227, 42, 35, 43, 128 }, // left = d207
{ 42, 44, 44, 104, 105, 164, 64, 130, 80, 128 }, // left = d63
{ 43, 81, 53, 140, 169, 204, 68, 84, 72, 128 }, // left = tm
{ 65, 70, 60, 155, 159, 199, 61, 60, 81, 128 } // left = bc
}, { // above = bc
{ 137, 30, 42, 148, 151, 207, 70, 52, 91, 128 }, // left = dc
{ 92, 45, 102, 136, 116, 180, 74, 90, 100, 128 }, // left = v
{ 73, 32, 19, 187, 222, 215, 46, 34, 100, 128 }, // left = h
{ 91, 30, 32, 116, 121, 186, 93, 86, 94, 128 }, // left = d45
{ 72, 35, 36, 149, 68, 206, 68, 63, 105, 128 }, // left = d135
{ 73, 31, 28, 138, 57, 124, 55, 122, 151, 128 }, // left = d117
{ 67, 23, 21, 140, 126, 197, 40, 37, 171, 128 }, // left = d153
{ 86, 27, 28, 128, 154, 212, 45, 43, 53, 128 }, // left = d207
{ 74, 32, 27, 107, 86, 160, 63, 134, 102, 128 }, // left = d63
{ 59, 67, 44, 140, 161, 202, 78, 67, 119, 128 }, // left = tm
{ 137, 30, 42, 148, 151, 207, 70, 52, 91, 128 } // left = bc
}
#else
{ // above = dc
{ 137, 30, 42, 148, 151, 207, 70, 52, 91 }, // left = dc
{ 92, 45, 102, 136, 116, 180, 74, 90, 100 }, // left = v
@ -282,24 +147,9 @@ const vp9_prob vp9_kf_y_mode_prob[INTRA_MODES][INTRA_MODES][INTRA_MODES - 1] = {
{ 42, 44, 44, 104, 105, 164, 64, 130, 80 }, // left = d63
{ 43, 81, 53, 140, 169, 204, 68, 84, 72 } // left = tm
}
#endif // CONFIG_INTRABC
};
// FIXME(aconverse): INTRABC UV is always the same as INTRABC Y
const vp9_prob vp9_kf_uv_mode_prob[INTRA_MODES][INTRA_MODES - 1] = {
#if CONFIG_INTRABC
{ 144, 11, 54, 157, 195, 130, 46, 58, 108, 255 }, // y = dc
{ 118, 15, 123, 148, 131, 101, 44, 93, 131, 255 }, // y = v
{ 113, 12, 23, 188, 226, 142, 26, 32, 125, 255 }, // y = h
{ 120, 11, 50, 123, 163, 135, 64, 77, 103, 255 }, // y = d45
{ 113, 9, 36, 155, 111, 157, 32, 44, 161, 255 }, // y = d135
{ 116, 9, 55, 176, 76, 96, 37, 61, 149, 255 }, // y = d117
{ 115, 9, 28, 141, 161, 167, 21, 25, 193, 255 }, // y = d153
{ 120, 12, 32, 145, 195, 142, 32, 38, 86, 255 }, // y = d207
{ 116, 12, 64, 120, 140, 125, 49, 115, 121, 255 }, // y = d63
{ 102, 19, 66, 162, 182, 122, 35, 59, 128, 255 }, // y = tm
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // y = bc
#else
{ 144, 11, 54, 157, 195, 130, 46, 58, 108 }, // y = dc
{ 118, 15, 123, 148, 131, 101, 44, 93, 131 }, // y = v
{ 113, 12, 23, 188, 226, 142, 26, 32, 125 }, // y = h
@ -310,37 +160,16 @@ const vp9_prob vp9_kf_uv_mode_prob[INTRA_MODES][INTRA_MODES - 1] = {
{ 120, 12, 32, 145, 195, 142, 32, 38, 86 }, // y = d207
{ 116, 12, 64, 120, 140, 125, 49, 115, 121 }, // y = d63
{ 102, 19, 66, 162, 182, 122, 35, 59, 128 } // y = tm
#endif // CONFIG_INTRABC
};
static const vp9_prob default_if_y_probs[BLOCK_SIZE_GROUPS][INTRA_MODES - 1] = {
#if CONFIG_INTRABC
{ 65, 32, 18, 144, 162, 194, 41, 51, 98, 255 }, // block_size < 8x8
{ 132, 68, 18, 165, 217, 196, 45, 40, 78, 255 }, // block_size < 16x16
{ 173, 80, 19, 176, 240, 193, 64, 35, 46, 255 }, // block_size < 32x32
{ 221, 135, 38, 194, 248, 121, 96, 85, 29, 255 } // block_size >= 32x32
#else
{ 65, 32, 18, 144, 162, 194, 41, 51, 98 }, // block_size < 8x8
{ 132, 68, 18, 165, 217, 196, 45, 40, 78 }, // block_size < 16x16
{ 173, 80, 19, 176, 240, 193, 64, 35, 46 }, // block_size < 32x32
{ 221, 135, 38, 194, 248, 121, 96, 85, 29 } // block_size >= 32x32
#endif // CONFIG_INTRABC
};
static const vp9_prob default_if_uv_probs[INTRA_MODES][INTRA_MODES - 1] = {
#if CONFIG_INTRABC
{ 120, 7, 76, 176, 208, 126, 28, 54, 103, 255 }, // y = dc
{ 48, 12, 154, 155, 139, 90, 34, 117, 119, 255 }, // y = v
{ 67, 6, 25, 204, 243, 158, 13, 21, 96, 255 }, // y = h
{ 97, 5, 44, 131, 176, 139, 48, 68, 97, 255 }, // y = d45
{ 83, 5, 42, 156, 111, 152, 26, 49, 152, 255 }, // y = d135
{ 80, 5, 58, 178, 74, 83, 33, 62, 145, 255 }, // y = d117
{ 86, 5, 32, 154, 192, 168, 14, 22, 163, 255 }, // y = d153
{ 85, 5, 32, 156, 216, 148, 19, 29, 73, 255 }, // y = d207
{ 77, 7, 64, 116, 132, 122, 37, 126, 120, 255 }, // y = d63
{ 101, 21, 107, 181, 192, 103, 19, 67, 125, 255 }, // y = tm
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // y = bc
#else
{ 120, 7, 76, 176, 208, 126, 28, 54, 103 }, // y = dc
{ 48, 12, 154, 155, 139, 90, 34, 117, 119 }, // y = v
{ 67, 6, 25, 204, 243, 158, 13, 21, 96 }, // y = h
@ -351,7 +180,6 @@ static const vp9_prob default_if_uv_probs[INTRA_MODES][INTRA_MODES - 1] = {
{ 85, 5, 32, 156, 216, 148, 19, 29, 73 }, // y = d207
{ 77, 7, 64, 116, 132, 122, 37, 126, 120 }, // y = d63
{ 101, 21, 107, 181, 192, 103, 19, 67, 125 } // y = tm
#endif // CONFIG_INTRABC
};
#if CONFIG_FILTERINTRA
@ -457,12 +285,7 @@ const vp9_tree_index vp9_intra_mode_tree[TREE_SIZE(INTRA_MODES)] = {
-D135_PRED, -D117_PRED, /* 5 = D135_NODE */
-D45_PRED, 14, /* 6 = D45_NODE */
-D63_PRED, 16, /* 7 = D63_NODE */
#if CONFIG_INTRABC
-D153_PRED, 18, /* 8 = D153_NODE */
-D207_PRED, -NEWDV /* 9 = D207_NODE */
#else
-D153_PRED, -D207_PRED /* 8 = D153_NODE */
#endif // CONFIG_INTRABC
};
const vp9_tree_index vp9_inter_mode_tree[TREE_SIZE(INTER_MODES)] = {

View File

@ -19,6 +19,10 @@
extern "C" {
#endif
#if CONFIG_INTRABC
#define INTRABC_PROB 128
#endif // CONFIG_INTRABC
#define TX_SIZE_CONTEXTS 2
struct VP9Common;
@ -218,8 +222,12 @@ static INLINE const vp9_prob *get_y_mode_probs(const MODE_INFO *mi,
const MODE_INFO *above_mi,
const MODE_INFO *left_mi,
int block) {
const PREDICTION_MODE above = vp9_above_block_mode(mi, above_mi, block);
const PREDICTION_MODE left = vp9_left_block_mode(mi, left_mi, block);
PREDICTION_MODE above = vp9_above_block_mode(mi, above_mi, block);
PREDICTION_MODE left = vp9_left_block_mode(mi, left_mi, block);
#if CONFIG_INTRABC
if (is_intrabc_mode(above)) above = DC_PRED;
if (is_intrabc_mode(left)) left = DC_PRED;
#endif
return vp9_kf_y_mode_prob[above][left];
}

View File

@ -27,9 +27,6 @@ const TX_TYPE intra_mode_to_tx_type_lookup[INTRA_MODES] = {
DCT_ADST, // D207
ADST_DCT, // D63
ADST_ADST, // TM
#if CONFIG_INTRABC
DCT_DCT, // BC
#endif // CONFIG_INTRABC
};
// This serves as a wrapper function, so that all the prediction functions

View File

@ -263,8 +263,8 @@ static void read_intra_frame_mode_info(VP9_COMMON *const cm,
const BLOCK_SIZE bsize = mbmi->sb_type;
int i;
#if CONFIG_INTRABC
int use_intrabc;
int_mv dv_ref;
vp9_find_ref_dv(&dv_ref, mi_row, mi_col);
#endif // CONFIG_INTRABC
mbmi->segment_id = read_intra_segment_id(cm, xd, mi_row, mi_col, r);
@ -273,8 +273,25 @@ static void read_intra_frame_mode_info(VP9_COMMON *const cm,
#else
mbmi->skip = read_skip(cm, xd, mbmi->segment_id, r);
#endif
#if CONFIG_INTRABC
vp9_find_ref_dv(&dv_ref, mi_row, mi_col);
if (bsize >= BLOCK_8X8 /* && cm->allow_intrabc*/) {
use_intrabc = vp9_read(r, INTRABC_PROB);
if (use_intrabc) {
mbmi->mode = mbmi->uv_mode = NEWDV;
mbmi->interp_filter = BILINEAR;
}
} else {
use_intrabc = 0;
}
#endif // CONFIG_INTRABC
#if CONFIG_PALETTE
if (bsize >= BLOCK_8X8 && cm->allow_palette_mode) {
if (bsize >= BLOCK_8X8 && cm->allow_palette_mode
#if CONFIG_INTRABC
&& !use_intrabc
#endif // CONFIG_INTRABC
) {
int palette_ctx = 0;
if (above_mi)
palette_ctx += (above_mi->mbmi.palette_enabled[0] == 1);
@ -453,6 +470,11 @@ static void read_intra_frame_mode_info(VP9_COMMON *const cm,
}
#endif
#if CONFIG_INTRABC
if (use_intrabc) {
xd->corrupted |= !assign_dv(cm, mbmi->mode, &mbmi->mv[0], &dv_ref, r);
} else
#endif // CONFIG_INTRABC
switch (bsize) {
case BLOCK_4X4:
#if CONFIG_FILTERINTRA
@ -471,9 +493,6 @@ static void read_intra_frame_mode_info(VP9_COMMON *const cm,
}
mbmi->filterbit = mi->b_filter_info[3];
#endif
#if CONFIG_INTRABC
xd->corrupted |= !assign_dv(cm, mbmi->mode, &mbmi->mv[0], &dv_ref, r);
#endif // CONFIG_INTRABC
mbmi->mode = mi->bmi[3].as_mode;
break;
case BLOCK_4X8:
@ -486,9 +505,6 @@ static void read_intra_frame_mode_info(VP9_COMMON *const cm,
else
mi->b_filter_info[0] = mi->b_filter_info[2] = 0;
#endif
#if CONFIG_INTRABC
xd->corrupted |= !assign_dv(cm, mbmi->mode, &mbmi->mv[0], &dv_ref, r);
#endif // CONFIG_INTRABC
mi->bmi[1].as_mode = mi->bmi[3].as_mode = mbmi->mode =
read_intra_mode(r, get_y_mode_probs(mi, above_mi, left_mi, 1));
#if CONFIG_FILTERINTRA
@ -498,9 +514,6 @@ static void read_intra_frame_mode_info(VP9_COMMON *const cm,
else
mi->b_filter_info[1] = mi->b_filter_info[3] = mbmi->filterbit = 0;
#endif
#if CONFIG_INTRABC
xd->corrupted |= !assign_dv(cm, mbmi->mode, &mbmi->mv[0], &dv_ref, r);
#endif // CONFIG_INTRABC
break;
case BLOCK_8X4:
mi->bmi[0].as_mode = mi->bmi[1].as_mode =
@ -512,9 +525,6 @@ static void read_intra_frame_mode_info(VP9_COMMON *const cm,
else
mi->b_filter_info[0] = mi->b_filter_info[1] = 0;
#endif
#if CONFIG_INTRABC
xd->corrupted |= !assign_dv(cm, mbmi->mode, &mbmi->mv[0], &dv_ref, r);
#endif // CONFIG_INTRABC
mi->bmi[2].as_mode = mi->bmi[3].as_mode = mbmi->mode =
read_intra_mode(r, get_y_mode_probs(mi, above_mi, left_mi, 2));
#if CONFIG_FILTERINTRA
@ -524,9 +534,6 @@ static void read_intra_frame_mode_info(VP9_COMMON *const cm,
else
mi->b_filter_info[2] = mi->b_filter_info[3] = mbmi->filterbit = 0;
#endif
#if CONFIG_INTRABC
xd->corrupted |= !assign_dv(cm, mbmi->mode, &mbmi->mv[0], &dv_ref, r);
#endif // CONFIG_INTRABC
break;
default:
#if CONFIG_PALETTE
@ -548,16 +555,10 @@ static void read_intra_frame_mode_info(VP9_COMMON *const cm,
else
mbmi->filterbit = 0;
#endif // CONFIG_FILTERINTRA
#if CONFIG_INTRABC
xd->corrupted |= !assign_dv(cm, mbmi->mode, &mbmi->mv[0], &dv_ref, r);
#endif // CONFIG_INTRABC
}
#if CONFIG_INTRABC
if (is_intrabc_mode(mbmi->mode)) {
mbmi->uv_mode = mbmi->mode;
mbmi->interp_filter = BILINEAR;
} else
if (!use_intrabc)
#endif // CONFIG_INTRABC
#if CONFIG_PALETTE
if (!mbmi->palette_enabled[1])

View File

@ -99,6 +99,9 @@ void vp9_entropy_mode_init() {
static void write_intra_mode(vp9_writer *w, PREDICTION_MODE mode,
const vp9_prob *probs) {
#if CONFIG_INTRABC
assert(!is_intrabc_mode(mode));
#endif // CONFIG_INTRABC
vp9_write_token(w, vp9_intra_mode_tree, probs, &intra_mode_encodings[mode]);
}
@ -685,9 +688,6 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, const MODE_INFO *mi,
#if CONFIG_PALETTE
if (!mbmi->palette_enabled[1])
#endif // CONFIG_PALETTE
#if CONFIG_INTRABC
if (!is_intrabc_mode(mode))
#endif // CONFIG_INTRABC
write_intra_mode(w, mbmi->uv_mode, cm->fc.uv_mode_prob[mode]);
#if CONFIG_FILTERINTRA
if (is_filter_allowed(mbmi->uv_mode) &&
@ -880,8 +880,18 @@ static void write_mb_modes_kf(const VP9_COMMON *cm,
#if !CONFIG_MISC_ENTROPY
write_skip(cm, xd, mbmi->segment_id, mi, w);
#endif
#if CONFIG_INTRABC
if (bsize >= BLOCK_8X8 /*&& cm->allow_palette_mode*/) {
vp9_write(w, is_intrabc_mode(mbmi->mode), INTRABC_PROB);
}
#endif // CONFIG_INTRABC
#if CONFIG_PALETTE
if (bsize >= BLOCK_8X8 && cm->allow_palette_mode) {
if (bsize >= BLOCK_8X8 && cm->allow_palette_mode
#if CONFIG_INTRABC
&& !is_intrabc_mode(mbmi->mode)
#endif // CONFIG_INTRABC
) {
int n, m1, m2, i, j, k, rows, cols, palette_ctx, color_ctx;
int color_new_idx = -1, color_order[PALETTE_MAX_SIZE];
uint8_t buffer[4096];
@ -1019,11 +1029,11 @@ static void write_mb_modes_kf(const VP9_COMMON *cm,
if (bsize >= BLOCK_8X8) {
#if CONFIG_PALETTE
if (!mbmi->palette_enabled[0])
write_intra_mode(w, mbmi->mode,
get_y_mode_probs(mi, above_mi, left_mi, 0));
#else
write_intra_mode(w, mbmi->mode, get_y_mode_probs(mi, above_mi, left_mi, 0));
#endif // CONFIG_PALETTE
#if CONFIG_INTRABC
if (!is_intrabc_mode(mbmi->mode))
#endif // CONFIG_INTRABC
write_intra_mode(w, mbmi->mode, get_y_mode_probs(mi, above_mi, left_mi, 0));
#if CONFIG_FILTERINTRA
if (is_filter_allowed(mbmi->mode) && is_filter_enabled(mbmi->tx_size)
#if CONFIG_PALETTE

View File

@ -1394,9 +1394,12 @@ static int64_t rd_pick_intra_sub_8x8_y_mode(VP9_COMP *cpi, MACROBLOCK *mb,
int64_t d = INT64_MAX, this_rd = INT64_MAX;
i = idy * 2 + idx;
if (cpi->common.frame_type == KEY_FRAME) {
const PREDICTION_MODE A = vp9_above_block_mode(mic, above_mi, i);
const PREDICTION_MODE L = vp9_left_block_mode(mic, left_mi, i);
PREDICTION_MODE A = vp9_above_block_mode(mic, above_mi, i);
PREDICTION_MODE L = vp9_left_block_mode(mic, left_mi, i);
#if CONFIG_INTRABC
if (is_intrabc_mode(A)) A = DC_PRED;
if (is_intrabc_mode(L)) L = DC_PRED;
#endif // CONFIG_INTRABC
bmode_costs = cpi->y_mode_costs[A][L];
}
@ -1575,7 +1578,6 @@ static int64_t handle_intrabc_mode(VP9_COMP *cpi, MACROBLOCK *x,
int64_t distortion_y = 0, distortion_uv = 0;
assert(mbmi->ref_frame[0] == INTRA_FRAME);
assert(this_mode == NEWDV);
if (this_mode == NEWDV) {
int rate_mv;
@ -1760,15 +1762,15 @@ static int64_t rd_pick_intra_sby_mode(VP9_COMP *cpi, MACROBLOCK *x,
int64_t this_distortion, this_rd;
TX_SIZE best_tx = TX_4X4;
int i;
int *bmode_costs;
const int *bmode_costs;
#if CONFIG_FILTERINTRA
int mode_ext, fbit, fbit_selected = 0;
#endif // CONFIG_FILTERINTRA
const MODE_INFO *above_mi = xd->up_available ?
xd->mi[-xd->mi_stride].src_mi : NULL;
const MODE_INFO *left_mi = xd->left_available ? xd->mi[-1].src_mi : NULL;
const PREDICTION_MODE A = vp9_above_block_mode(mic, above_mi, 0);
const PREDICTION_MODE L = vp9_left_block_mode(mic, left_mi, 0);
PREDICTION_MODE A = vp9_above_block_mode(mic, above_mi, 0);
PREDICTION_MODE L = vp9_left_block_mode(mic, left_mi, 0);
#if CONFIG_TX_SKIP
int tx_skipped = 0;
int q_idx = vp9_get_qindex(&cpi->common.seg, mic->mbmi.segment_id,
@ -1786,6 +1788,10 @@ static int64_t rd_pick_intra_sby_mode(VP9_COMP *cpi, MACROBLOCK *x,
uint8_t best_index[PALETTE_MAX_SIZE], best_literal[PALETTE_MAX_SIZE];
int8_t palette_color_delta[PALETTE_MAX_SIZE];
#endif // CONFIG_PALETTE
#if CONFIG_INTRABC
if (is_intrabc_mode(A)) A = DC_PRED;
if (is_intrabc_mode(L)) L = DC_PRED;
#endif // CONFIG_INTRABC
bmode_costs = cpi->y_mode_costs[A][L];
if (cpi->sf.tx_size_search_method == USE_FULL_RD)
@ -1834,6 +1840,9 @@ static int64_t rd_pick_intra_sby_mode(VP9_COMP *cpi, MACROBLOCK *x,
if (try_tx_skip)
this_rate += vp9_cost_bit(cpi->common.fc.y_tx_skip_prob[0], 0);
#endif
#if CONFIG_INTRABC
this_rate += vp9_cost_bit(INTRABC_PROB, 0);
#endif // CONFIG_INTRABC
#if CONFIG_FILTERINTRA
if (is_filter_allowed(mode) && is_filter_enabled(mic->mbmi.tx_size))
this_rate += vp9_cost_bit(cpi->common.fc.filterintra_prob
@ -1900,6 +1909,9 @@ static int64_t rd_pick_intra_sby_mode(VP9_COMP *cpi, MACROBLOCK *x,
this_rate = this_rate_tokenonly + bmode_costs[mode];
this_rate += vp9_cost_bit(cpi->common.fc.y_tx_skip_prob[0], 1);
#if CONFIG_INTRABC
this_rate += vp9_cost_bit(INTRABC_PROB, 0);
#endif // CONFIG_INTRABC
#if CONFIG_FILTERINTRA
if (is_filter_allowed(mode) && is_filter_enabled(mic->mbmi.tx_size))
this_rate += vp9_cost_bit(cpi->common.fc.filterintra_prob
@ -2121,6 +2133,9 @@ static int64_t rd_pick_intra_sby_mode(VP9_COMP *cpi, MACROBLOCK *x,
this_rate += vp9_cost_bit(cpi->common.fc.y_tx_skip_prob[0],
mic->mbmi.tx_skip[0]);
#endif // CONFIG_TX_SKIP
#if CONFIG_INTRABC
this_rate += vp9_cost_bit(INTRABC_PROB, 0);
#endif // CONFIG_INTRABC
this_rd = RDCOST(x->rdmult, x->rddiv, this_rate, this_distortion);
if (this_rd < best_rd) {
mode_selected = DC_PRED;
@ -2202,14 +2217,9 @@ static int64_t rd_pick_intrabc_sb_mode(VP9_COMP *cpi, MACROBLOCK *x,
PREDICTION_MODE mode;
MACROBLOCKD *const xd = &x->e_mbd;
MODE_INFO *const mic = xd->mi[0].src_mi;
const MODE_INFO *above_mi = xd->mi[-xd->mi_stride].src_mi;
const MODE_INFO *left_mi = xd->left_available ? xd->mi[-1].src_mi : NULL;
const PREDICTION_MODE A = vp9_above_block_mode(mic, above_mi, 0);
const PREDICTION_MODE L = vp9_left_block_mode(mic, left_mi, 0);
MB_MODE_INFO *mbmi = &mic->mbmi;
MB_MODE_INFO mbmi_selected = *mbmi;
int best_skip = x->skip;
const int *bmode_costs = cpi->y_mode_costs[A][L];
struct buf_2d yv12_mb[MAX_MB_PLANE];
int i;
#if CONFIG_TX_SKIP
@ -2261,7 +2271,7 @@ static int64_t rd_pick_intrabc_sb_mode(VP9_COMP *cpi, MACROBLOCK *x,
cpi->common.interp_filter = saved_interp_filter;
if (this_rd == INT64_MAX)
continue;
this_rate += bmode_costs[mode];
this_rate += vp9_cost_bit(INTRABC_PROB, 1);
this_rd = RDCOST(x->rdmult, x->rddiv, this_rate, this_distortion);
if (this_rd < best_rd) {
mbmi_selected = *mbmi;
@ -5614,6 +5624,9 @@ static void rd_pick_palette_444(VP9_COMP *cpi, MACROBLOCK *x, RD_COST *rd_cost,
}
}
rate_uv = rate_uv_tokenonly + (1 + 8 * 2 * n) * vp9_cost_bit(128, 0);
#if CONFIG_INTRABC
rate_y += vp9_cost_bit(INTRABC_PROB, 0);
#endif // CONFIG_INTRABC
#if CONFIG_TX_SKIP
rate_y +=
vp9_cost_bit(cpi->common.fc.y_tx_skip_prob[0], mbmi->tx_skip[0]);