Commit 45712dc8 authored by Paul Wilkins's avatar Paul Wilkins Committed by Gerrit Code Review
Browse files

Merge "Abstract selection of coef band." into experimental

parents 51afedbe 9255ad10
......@@ -41,8 +41,12 @@ DECLARE_ALIGNED(16, const uint8_t, vp9_norm[256]) = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
DECLARE_ALIGNED(16, const int, vp9_coef_bands_4x4[16]) = {
0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7
// Unified coefficient band structure used by all block sizes
DECLARE_ALIGNED(16, const int, vp9_coef_bands[32]) = {
0, 1, 2, 3, 5, 4, 4, 5,
5, 3, 6, 6, 6, 6, 6, 7,
7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7
};
DECLARE_ALIGNED(16, const uint8_t, vp9_prev_token_class[MAX_ENTROPY_TOKENS]) = {
......@@ -70,17 +74,6 @@ DECLARE_ALIGNED(16, const int, vp9_row_scan_4x4[16]) = {
12, 13, 14, 15
};
DECLARE_ALIGNED(64, const int, vp9_coef_bands_8x8[64]) = {
0, 1, 2, 3, 5, 4, 4, 5,
5, 3, 6, 3, 5, 4, 6, 6,
6, 5, 5, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7
};
DECLARE_ALIGNED(64, const int, vp9_default_zig_zag1d_8x8[64]) = {
0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5,
12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28,
......@@ -88,26 +81,6 @@ DECLARE_ALIGNED(64, const int, vp9_default_zig_zag1d_8x8[64]) = {
58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63,
};
// Table can be optimized.
DECLARE_ALIGNED(16, const int, vp9_coef_bands_16x16[256]) = {
0, 1, 2, 3, 5, 4, 4, 5, 5, 3, 6, 3, 5, 4, 6, 6,
6, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
};
DECLARE_ALIGNED(16, const int, vp9_default_zig_zag1d_16x16[256]) = {
0, 1, 16, 32, 17, 2, 3, 18,
33, 48, 64, 49, 34, 19, 4, 5,
......@@ -143,76 +116,6 @@ DECLARE_ALIGNED(16, const int, vp9_default_zig_zag1d_16x16[256]) = {
237, 252, 253, 238, 223, 239, 254, 255,
};
DECLARE_ALIGNED(16, const int, vp9_coef_bands_32x32[1024]) = {
0, 1, 2, 3, 5, 4, 4, 5, 5, 3, 6, 3, 5, 4, 6, 6,
6, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
};
DECLARE_ALIGNED(16, const int, vp9_default_zig_zag1d_32x32[1024]) = {
0, 1, 32, 64, 33, 2, 3, 34, 65, 96, 128, 97, 66, 35, 4, 5, 36, 67, 98, 129, 160, 192, 161, 130, 99, 68, 37, 6, 7, 38, 69, 100,
131, 162, 193, 224, 256, 225, 194, 163, 132, 101, 70, 39, 8, 9, 40, 71, 102, 133, 164, 195, 226, 257, 288, 320, 289, 258, 227, 196, 165, 134, 103, 72,
......@@ -341,6 +244,13 @@ int vp9_get_coef_context(int * recent_energy, int token) {
return vp9_prev_token_class[token];
};
int vp9_get_coef_band(int coef_index) {
if (coef_index < 32)
return vp9_coef_bands[coef_index];
else
return 7;
}
void vp9_default_coef_probs(VP9_COMMON *pc) {
vpx_memcpy(pc->fc.coef_probs_4x4, default_coef_probs_4x4,
sizeof(pc->fc.coef_probs_4x4));
......
......@@ -72,10 +72,6 @@ extern vp9_extra_bit_struct vp9_extra_bits[12]; /* indexed by token value */
position within the 4x4 DCT. */
#define COEF_BANDS 8
extern DECLARE_ALIGNED(16, const int, vp9_coef_bands_4x4[16]);
extern DECLARE_ALIGNED(64, const int, vp9_coef_bands_8x8[64]);
extern DECLARE_ALIGNED(16, const int, vp9_coef_bands_16x16[256]);
extern DECLARE_ALIGNED(16, const int, vp9_coef_bands_32x32[1024]);
/* Inside dimension is 3-valued measure of nearby complexity, that is,
the extent to which nearby coefficients are nonzero. For the first
......@@ -127,4 +123,5 @@ static void vp9_reset_mb_tokens_context(MACROBLOCKD* const xd) {
}
extern int vp9_get_coef_context(int * recent_energy, int token);
extern int vp9_get_coef_band(int coef_index);
#endif // VP9_COMMON_VP9_ENTROPY_H_
......@@ -65,7 +65,7 @@ static int get_signed(BOOL_DECODER *br, int value_to_sign) {
#define INCREMENT_COUNT(token) \
do { \
coef_counts[type][coef_bands[c]][pt][token]++; \
coef_counts[type][vp9_get_coef_band(c)][pt][token]++; \
pt = vp9_get_coef_context(&recent_energy, token); \
} while (0)
......@@ -87,8 +87,7 @@ static int decode_coefs(VP9D_COMP *dx, const MACROBLOCKD *xd,
BOOL_DECODER* const br, int block_idx,
PLANE_TYPE type, TX_TYPE tx_type,
int seg_eob, int16_t *qcoeff_ptr,
const int *const scan, TX_SIZE txfm_size,
const int *coef_bands) {
const int *const scan, TX_SIZE txfm_size) {
ENTROPY_CONTEXT* const A0 = (ENTROPY_CONTEXT *) xd->above_context;
ENTROPY_CONTEXT* const L0 = (ENTROPY_CONTEXT *) xd->left_context;
const int aidx = vp9_block2above[txfm_size][block_idx];
......@@ -180,7 +179,7 @@ static int decode_coefs(VP9D_COMP *dx, const MACROBLOCKD *xd,
int val;
const uint8_t *cat6 = cat6_prob;
if (c >= seg_eob) break;
prob = coef_probs[type][coef_bands[c]][pt];
prob = coef_probs[type][vp9_get_coef_band(c)][pt];
if (!vp9_read(br, prob[EOB_CONTEXT_NODE]))
break;
SKIP_START:
......@@ -188,7 +187,7 @@ SKIP_START:
if (!vp9_read(br, prob[ZERO_CONTEXT_NODE])) {
INCREMENT_COUNT(ZERO_TOKEN);
++c;
prob = coef_probs[type][coef_bands[c]][pt];
prob = coef_probs[type][vp9_get_coef_band(c)][pt];
goto SKIP_START;
}
// ONE_CONTEXT_NODE_0_
......@@ -252,7 +251,7 @@ SKIP_START:
}
if (c < seg_eob)
coef_counts[type][coef_bands[c]][pt][DCT_EOB_TOKEN]++;
coef_counts[type][vp9_get_coef_band(c)][pt][DCT_EOB_TOKEN]++;
A0[aidx] = L0[lidx] = (c > !type);
if (txfm_size >= TX_8X8 && type != PLANE_TYPE_Y2) {
......@@ -312,7 +311,7 @@ int vp9_decode_sb_tokens(VP9D_COMP* const pbi,
DCT_DCT, get_eob(xd, segment_id, 1024),
xd->sb_coeff_data.qcoeff,
vp9_default_zig_zag1d_32x32,
TX_32X32, vp9_coef_bands_32x32);
TX_32X32);
eobtotal += c;
// 16x16 chroma blocks
......@@ -321,7 +320,7 @@ int vp9_decode_sb_tokens(VP9D_COMP* const pbi,
eobs[i] = c = decode_coefs(pbi, xd, bc, i, PLANE_TYPE_UV, DCT_DCT, seg_eob,
xd->sb_coeff_data.qcoeff + 1024 + (i - 16) * 64,
vp9_default_zig_zag1d_16x16,
TX_16X16, vp9_coef_bands_16x16);
TX_16X16);
eobtotal += c;
}
......@@ -345,7 +344,7 @@ static int vp9_decode_mb_tokens_16x16(VP9D_COMP* const pbi,
get_tx_type(xd, &xd->block[0]),
get_eob(xd, segment_id, 256),
xd->qcoeff, vp9_default_zig_zag1d_16x16,
TX_16X16, vp9_coef_bands_16x16);
TX_16X16);
eobtotal += c;
// 8x8 chroma blocks
......@@ -354,7 +353,7 @@ static int vp9_decode_mb_tokens_16x16(VP9D_COMP* const pbi,
eobs[i] = c = decode_coefs(pbi, xd, bc, i, PLANE_TYPE_UV,
DCT_DCT, seg_eob, xd->block[i].qcoeff,
vp9_default_zig_zag1d_8x8,
TX_8X8, vp9_coef_bands_8x8);
TX_8X8);
eobtotal += c;
}
A[8] = 0;
......@@ -376,8 +375,7 @@ static int vp9_decode_mb_tokens_8x8(VP9D_COMP* const pbi,
eobs[24] = c = decode_coefs(pbi, xd, bc, 24, PLANE_TYPE_Y2,
DCT_DCT, get_eob(xd, segment_id, 4),
xd->block[24].qcoeff,
vp9_default_zig_zag1d_4x4, TX_8X8,
vp9_coef_bands_4x4);
vp9_default_zig_zag1d_4x4, TX_8X8);
eobtotal += c - 4;
type = PLANE_TYPE_Y_NO_DC;
} else {
......@@ -394,8 +392,7 @@ static int vp9_decode_mb_tokens_8x8(VP9D_COMP* const pbi,
type == PLANE_TYPE_Y_WITH_DC ?
get_tx_type(xd, xd->block + i) : DCT_DCT,
seg_eob, xd->block[i].qcoeff,
vp9_default_zig_zag1d_8x8,
TX_8X8, vp9_coef_bands_8x8);
vp9_default_zig_zag1d_8x8, TX_8X8);
eobtotal += c;
}
......@@ -407,16 +404,14 @@ static int vp9_decode_mb_tokens_8x8(VP9D_COMP* const pbi,
for (i = 16; i < 24; i++) {
eobs[i] = c = decode_coefs(pbi, xd, bc, i, PLANE_TYPE_UV,
DCT_DCT, seg_eob, xd->block[i].qcoeff,
vp9_default_zig_zag1d_4x4, TX_4X4,
vp9_coef_bands_4x4);
vp9_default_zig_zag1d_4x4, TX_4X4);
eobtotal += c;
}
} else {
for (i = 16; i < 24; i += 4) {
eobs[i] = c = decode_coefs(pbi, xd, bc, i, PLANE_TYPE_UV,
DCT_DCT, seg_eob, xd->block[i].qcoeff,
vp9_default_zig_zag1d_8x8,
TX_8X8, vp9_coef_bands_8x8);
vp9_default_zig_zag1d_8x8, TX_8X8);
eobtotal += c;
}
}
......@@ -432,7 +427,7 @@ static int decode_coefs_4x4(VP9D_COMP *dx, MACROBLOCKD *xd,
int c;
c = decode_coefs(dx, xd, bc, i, type, tx_type, seg_eob,
xd->block[i].qcoeff, scan, TX_4X4, vp9_coef_bands_4x4);
xd->block[i].qcoeff, scan, TX_4X4);
eobs[i] = c;
return c;
......
......@@ -386,13 +386,12 @@ static void optimize_b(MACROBLOCK *mb, int i, PLANE_TYPE type,
int best, band, pt;
int err_mult = plane_rd_mult[type];
int default_eob;
int const *scan, *bands;
int const *scan;
switch (tx_size) {
default:
case TX_4X4:
scan = vp9_default_zig_zag1d_4x4;
bands = vp9_coef_bands_4x4;
default_eob = 16;
// TODO: this isn't called (for intra4x4 modes), but will be left in
// since it could be used later
......@@ -419,12 +418,10 @@ static void optimize_b(MACROBLOCK *mb, int i, PLANE_TYPE type,
break;
case TX_8X8:
scan = vp9_default_zig_zag1d_8x8;
bands = vp9_coef_bands_8x8;
default_eob = 64;
break;
case TX_16X16:
scan = vp9_default_zig_zag1d_16x16;
bands = vp9_coef_bands_16x16;
default_eob = 256;
break;
}
......@@ -459,7 +456,7 @@ static void optimize_b(MACROBLOCK *mb, int i, PLANE_TYPE type,
t0 = (vp9_dct_value_tokens_ptr + x)->Token;
/* Consider both possible successor states. */
if (next < default_eob) {
band = bands[i + 1];
band = vp9_get_coef_band(i + 1);
pt = trellis_get_coeff_context(t0);
rate0 +=
mb->token_costs[tx_size][type][band][pt][tokens[next][0].token];
......@@ -506,7 +503,7 @@ static void optimize_b(MACROBLOCK *mb, int i, PLANE_TYPE type,
t0 = t1 = (vp9_dct_value_tokens_ptr + x)->Token;
}
if (next < default_eob) {
band = bands[i + 1];
band = vp9_get_coef_band(i + 1);
if (t0 != DCT_EOB_TOKEN) {
pt = trellis_get_coeff_context(t0);
rate0 += mb->token_costs[tx_size][type][band][pt][
......@@ -541,7 +538,7 @@ static void optimize_b(MACROBLOCK *mb, int i, PLANE_TYPE type,
* add a new trellis node, but we do need to update the costs.
*/
else {
band = bands[i + 1];
band = vp9_get_coef_band(i + 1);
t0 = tokens[next][0].token;
t1 = tokens[next][1].token;
/* Update the cost of each path if we're past the EOB token. */
......@@ -558,7 +555,7 @@ static void optimize_b(MACROBLOCK *mb, int i, PLANE_TYPE type,
}
/* Now pick the best path through the whole trellis. */
band = bands[i + 1];
band = vp9_get_coef_band(i + 1);
VP9_COMBINEENTROPYCONTEXTS(pt, *a, *l);
rate0 = tokens[next][0].rate;
rate1 = tokens[next][1].rate;
......
......@@ -431,7 +431,7 @@ static INLINE int cost_coeffs(MACROBLOCK *mb,
int c = (type == PLANE_TYPE_Y_NO_DC) ? 1 : 0;
int cost = 0, seg_eob;
const int segment_id = xd->mode_info_context->mbmi.segment_id;
const int *scan, *band;
const int *scan;
int16_t *qcoeff_ptr = b->qcoeff;
const TX_TYPE tx_type = (type == PLANE_TYPE_Y_WITH_DC) ?
get_tx_type(xd, b) : DCT_DCT;
......@@ -443,7 +443,6 @@ static INLINE int cost_coeffs(MACROBLOCK *mb,
switch (tx_size) {
case TX_4X4:
scan = vp9_default_zig_zag1d_4x4;
band = vp9_coef_bands_4x4;
seg_eob = 16;
if (type == PLANE_TYPE_Y_WITH_DC) {
if (tx_type == ADST_DCT) {
......@@ -456,17 +455,14 @@ static INLINE int cost_coeffs(MACROBLOCK *mb,
case TX_8X8:
if (type == PLANE_TYPE_Y2) {
scan = vp9_default_zig_zag1d_4x4;
band = vp9_coef_bands_4x4;
seg_eob = 4;
} else {
scan = vp9_default_zig_zag1d_8x8;
band = vp9_coef_bands_8x8;
seg_eob = 64;
}
break;
case TX_16X16:
scan = vp9_default_zig_zag1d_16x16;
band = vp9_coef_bands_16x16;
seg_eob = 256;
if (type == PLANE_TYPE_UV) {
const int uv_idx = ib - 16;
......@@ -475,7 +471,6 @@ static INLINE int cost_coeffs(MACROBLOCK *mb,
break;
case TX_32X32:
scan = vp9_default_zig_zag1d_32x32;
band = vp9_coef_bands_32x32;
seg_eob = 1024;
qcoeff_ptr = xd->sb_coeff_data.qcoeff;
break;
......@@ -494,24 +489,24 @@ static INLINE int cost_coeffs(MACROBLOCK *mb,
for (; c < eob; c++) {
int v = qcoeff_ptr[scan[c]];
int t = vp9_dct_value_tokens_ptr[v].Token;
cost += token_costs[band[c]][pt][t];
cost += token_costs[vp9_get_coef_band(c)][pt][t];
cost += vp9_dct_value_cost_ptr[v];
pt = vp9_get_coef_context(&recent_energy, t);
}
if (c < seg_eob)
cost += mb->hybrid_token_costs[tx_size][type][band[c]]
cost += mb->hybrid_token_costs[tx_size][type][vp9_get_coef_band(c)]
[pt][DCT_EOB_TOKEN];
} else {
int recent_energy = 0;
for (; c < eob; c++) {
int v = qcoeff_ptr[scan[c]];
int t = vp9_dct_value_tokens_ptr[v].Token;
cost += token_costs[band[c]][pt][t];
cost += token_costs[vp9_get_coef_band(c)][pt][t];
cost += vp9_dct_value_cost_ptr[v];
pt = vp9_get_coef_context(&recent_energy, t);
}
if (c < seg_eob)
cost += mb->token_costs[tx_size][type][band[c]]
cost += mb->token_costs[tx_size][type][vp9_get_coef_band(c)]
[pt][DCT_EOB_TOKEN];
}
......
......@@ -116,7 +116,7 @@ static void tokenize_b(VP9_COMP *cpi,
int16_t *qcoeff_ptr = b->qcoeff;
int seg_eob;
const int segment_id = xd->mode_info_context->mbmi.segment_id;
const int *bands, *scan;
const int *scan;
vp9_coeff_count *counts;
vp9_coeff_probs *probs;
const TX_TYPE tx_type = (type == PLANE_TYPE_Y_WITH_DC) ?
......@@ -138,7 +138,6 @@ static void tokenize_b(VP9_COMP *cpi,
default:
case TX_4X4:
seg_eob = 16;
bands = vp9_coef_bands_4x4;
scan = vp9_default_zig_zag1d_4x4;
if (tx_type != DCT_DCT) {
counts = cpi->hybrid_coef_counts_4x4;
......@@ -156,7 +155,6 @@ static void tokenize_b(VP9_COMP *cpi,
case TX_8X8:
if (type == PLANE_TYPE_Y2) {
seg_eob = 4;
bands = vp9_coef_bands_4x4;
scan = vp9_default_zig_zag1d_4x4;
} else {
#if CONFIG_CNVCONTEXT
......@@ -164,7 +162,6 @@ static void tokenize_b(VP9_COMP *cpi,
l_ec = (l[0] + l[1]) != 0;
#endif
seg_eob = 64;
bands = vp9_coef_bands_8x8;
scan = vp9_default_zig_zag1d_8x8;
}
if (tx_type != DCT_DCT) {
......@@ -186,7 +183,6 @@ static void tokenize_b(VP9_COMP *cpi,
}
#endif
seg_eob = 256;
bands = vp9_coef_bands_16x16;
scan = vp9_default_zig_zag1d_16x16;
if (tx_type != DCT_DCT) {
counts = cpi->hybrid_coef_counts_16x16;
......@@ -210,7 +206,6 @@ static void tokenize_b(VP9_COMP *cpi,
l_ec = l_ec != 0;
#endif
seg_eob = 1024;
bands = vp9_coef_bands_32x32;
scan = vp9_default_zig_zag1d_32x32;
counts = cpi->coef_counts_32x32;
probs = cpi->common.fc.coef_probs_32x32;
......@@ -224,7 +219,7 @@ static void tokenize_b(VP9_COMP *cpi,
seg_eob = 0;
do {
const int band = bands[c];
const int band = vp9_get_coef_band(c);
int token;
if (c < eob) {
......@@ -703,7 +698,6 @@ static INLINE void stuff_b(VP9_COMP *cpi,
TX_SIZE tx_size,
int dry_run) {
const BLOCKD * const b = xd->block + ib;
const int *bands;
vp9_coeff_count *counts;
vp9_coeff_probs *probs;
int pt, band;
......@@ -723,7 +717,6 @@ static INLINE void stuff_b(VP9_COMP *cpi,
switch (tx_size) {
default:
case TX_4X4:
bands = vp9_coef_bands_4x4;
if (tx_type != DCT_DCT) {
counts = cpi->hybrid_coef_counts_4x4;
probs = cpi->common.fc.hybrid_coef_probs_4x4;
......@@ -739,7 +732,6 @@ static INLINE void stuff_b(VP9_COMP *cpi,
l_ec = (l[0] + l[1]) != 0;
}
#endif
bands = vp9_coef_bands_8x8;
if (tx_type != DCT_DCT) {
counts = cpi->hybrid_coef_counts_8x8;
probs = cpi->common.fc.hybrid_coef_probs_8x8;
......@@ -758,7 +750,6 @@ static INLINE void stuff_b(VP9_COMP *cpi,
l_ec = (l[0] + l[1] + l1[0] + l1[1]) != 0;
}
#endif
bands = vp9_coef_bands_16x16;
if (tx_type != DCT_DCT) {
counts = cpi->hybrid_coef_counts_16x16;
probs = cpi->common.fc.hybrid_coef_probs_16x16;
......@@ -776,7 +767,6 @@ static INLINE void stuff_b(VP9_COMP *cpi,
a_ec = a_ec != 0;
l_ec = l_ec != 0;
#endif
bands = vp9_coef_bands_32x32;
counts = cpi->coef_counts_32x32;
probs = cpi->common.fc.coef_probs_32x32;
break;
......@@ -784,7 +774,7 @@ static INLINE void stuff_b(VP9_COMP *cpi,
VP9_COMBINEENTROPYCONTEXTS(pt, a_ec, l_ec);
band = bands[(type == PLANE_TYPE_Y_NO_DC) ? 1 : 0];
band = vp9_get_coef_band((type == PLANE_TYPE_Y_NO_DC) ? 1 : 0);
t->Token = DCT_EOB_TOKEN;
t->context_tree = probs[type][band][pt];
t->skip_eob_node = 0;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment