diff options
Diffstat (limited to 'vp8/encoder/tokenize.c')
-rw-r--r-- | vp8/encoder/tokenize.c | 236 |
1 files changed, 52 insertions, 184 deletions
diff --git a/vp8/encoder/tokenize.c b/vp8/encoder/tokenize.c index c72c1e7e7..2ddae1cbd 100644 --- a/vp8/encoder/tokenize.c +++ b/vp8/encoder/tokenize.c @@ -26,38 +26,26 @@ #ifdef ENTROPY_STATS INT64 context_counters[BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [MAX_ENTROPY_TOKENS]; -#if CONFIG_HYBRIDTRANSFORM INT64 hybrid_context_counters[BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [MAX_ENTROPY_TOKENS]; -#endif INT64 context_counters_8x8[BLOCK_TYPES_8X8] [COEF_BANDS] [PREV_COEF_CONTEXTS] [MAX_ENTROPY_TOKENS]; -#if CONFIG_HYBRIDTRANSFORM8X8 INT64 hybrid_context_counters_8x8[BLOCK_TYPES_8X8] [COEF_BANDS] [PREV_COEF_CONTEXTS] [MAX_ENTROPY_TOKENS]; -#endif INT64 context_counters_16x16[BLOCK_TYPES_16X16] [COEF_BANDS] [PREV_COEF_CONTEXTS] [MAX_ENTROPY_TOKENS]; -#if CONFIG_HYBRIDTRANSFORM16X16 INT64 hybrid_context_counters_16x16[BLOCK_TYPES_16X16] [COEF_BANDS] [PREV_COEF_CONTEXTS] [MAX_ENTROPY_TOKENS]; -#endif extern unsigned int tree_update_hist[BLOCK_TYPES][COEF_BANDS] [PREV_COEF_CONTEXTS][ENTROPY_NODES][2]; -#if CONFIG_HYBRIDTRANSFORM extern unsigned int hybrid_tree_update_hist[BLOCK_TYPES][COEF_BANDS] [PREV_COEF_CONTEXTS][ENTROPY_NODES][2]; -#endif extern unsigned int tree_update_hist_8x8[BLOCK_TYPES_8X8][COEF_BANDS] [PREV_COEF_CONTEXTS][ENTROPY_NODES] [2]; -#if CONFIG_HYBRIDTRANSFORM8X8 extern unsigned int hybrid_tree_update_hist_8x8[BLOCK_TYPES_8X8][COEF_BANDS] [PREV_COEF_CONTEXTS][ENTROPY_NODES] [2]; -#endif extern unsigned int tree_update_hist_16x16[BLOCK_TYPES_16X16][COEF_BANDS] [PREV_COEF_CONTEXTS][ENTROPY_NODES] [2]; -#if CONFIG_HYBRIDTRANSFORM16X16 extern unsigned int hybrid_tree_update_hist_16x16[BLOCK_TYPES_16X16][COEF_BANDS] [PREV_COEF_CONTEXTS][ENTROPY_NODES] [2]; -#endif #endif /* ENTROPY_STATS */ void vp8_stuff_mb(VP8_COMP *cpi, MACROBLOCKD *xd, TOKENEXTRA **t, int dry_run); @@ -134,9 +122,7 @@ static void tokenize1st_order_b_16x16(MACROBLOCKD *xd, const int eob = b->eob; /* one beyond last nonzero coeff */ TOKENEXTRA *t = *tp; /* store tokens starting here */ const short *qcoeff_ptr = b->qcoeff; -#if CONFIG_HYBRIDTRANSFORM16X16 TX_TYPE tx_type = get_tx_type(xd, b); -#endif int seg_eob = 256; int segment_id = xd->mode_info_context->mbmi.segment_id; @@ -162,21 +148,18 @@ static void tokenize1st_order_b_16x16(MACROBLOCKD *xd, } t->Token = x; -#if CONFIG_HYBRIDTRANSFORM16X16 if (tx_type != DCT_DCT) t->context_tree = cpi->common.fc.hybrid_coef_probs_16x16[type][band][pt]; else -#endif t->context_tree = cpi->common.fc.coef_probs_16x16[type][band][pt]; t->skip_eob_node = pt == 0 && ((band > 0 && type != PLANE_TYPE_Y_NO_DC) || (band > 1 && type == PLANE_TYPE_Y_NO_DC)); + assert(vp8_coef_encodings[t->Token].Len - t->skip_eob_node > 0); if (!dry_run) { -#if CONFIG_HYBRIDTRANSFORM16X16 if (tx_type != DCT_DCT) ++cpi->hybrid_coef_counts_16x16[type][band][pt][x]; else -#endif ++cpi->coef_counts_16x16[type][band][pt][x]; } pt = vp8_prev_token_class[x]; @@ -309,10 +292,7 @@ static void tokenize1st_order_b_8x8(MACROBLOCKD *xd, int c = (type == PLANE_TYPE_Y_NO_DC) ? 1 : 0; /* start at DC unless type 0 */ TOKENEXTRA *t = *tp; /* store tokens starting here */ const short *qcoeff_ptr = b->qcoeff; -#if CONFIG_HYBRIDTRANSFORM8X8 - TX_TYPE tx_type = xd->mode_info_context->mbmi.mode == I8X8_PRED ? - get_tx_type(xd, b) : DCT_DCT; -#endif + TX_TYPE tx_type = get_tx_type(xd, b); const int eob = b->eob; int seg_eob = 64; int segment_id = xd->mode_info_context->mbmi.segment_id; @@ -338,11 +318,9 @@ static void tokenize1st_order_b_8x8(MACROBLOCKD *xd, x = DCT_EOB_TOKEN; t->Token = x; -#if CONFIG_HYBRIDTRANSFORM8X8 if (tx_type != DCT_DCT) t->context_tree = cpi->common.fc.hybrid_coef_probs_8x8[type][band][pt]; else -#endif t->context_tree = cpi->common.fc.coef_probs_8x8[type][band][pt]; t->skip_eob_node = pt == 0 && ((band > 0 && type != PLANE_TYPE_Y_NO_DC) || @@ -350,11 +328,9 @@ static void tokenize1st_order_b_8x8(MACROBLOCKD *xd, assert(vp8_coef_encodings[t->Token].Len - t->skip_eob_node > 0); if (!dry_run) { -#if CONFIG_HYBRIDTRANSFORM8X8 if (tx_type != DCT_DCT) ++cpi->hybrid_coef_counts_8x8[type][band][pt][x]; else -#endif ++cpi->coef_counts_8x8[type][band][pt][x]; } pt = vp8_prev_token_class[x]; @@ -427,103 +403,6 @@ static void tokenize1st_order_chroma_4x4(MACROBLOCKD *xd, } } -#if CONFIG_HYBRIDTRANSFORM -static void tokenize1st_order_ht_4x4(MACROBLOCKD *xd, - TOKENEXTRA **tp, - PLANE_TYPE type, - VP8_COMP *cpi, - int dry_run) { - unsigned int block; - const BLOCKD *b = xd->block; - int pt; /* near block/prev token context index */ - TOKENEXTRA *t = *tp;/* store tokens starting here */ - ENTROPY_CONTEXT * a; - ENTROPY_CONTEXT * l; - int const *pt_scan ; - int seg_eob = 16; - int segment_id = xd->mode_info_context->mbmi.segment_id; - - if ( segfeature_active( xd, segment_id, SEG_LVL_EOB ) ) { - seg_eob = get_segdata( xd, segment_id, SEG_LVL_EOB ); - } - - /* Luma */ - for (block = 0; block < 16; block++, b++) { - const int eob = b->eob; - TX_TYPE tx_type = DCT_DCT; - const int tmp1 = vp8_block2above[block]; - const int tmp2 = vp8_block2left[block]; - const int16_t *qcoeff_ptr = b->qcoeff; - int c = (type == PLANE_TYPE_Y_NO_DC) ? 1 : 0; - - a = (ENTROPY_CONTEXT *)xd->above_context + tmp1; - l = (ENTROPY_CONTEXT *)xd->left_context + tmp2; - VP8_COMBINEENTROPYCONTEXTS(pt, *a, *l); - - if( xd->mode_info_context->mbmi.mode == B_PRED ) { - tx_type = get_tx_type(xd, b); - } - - // assign scanning order for luma components coded in intra4x4 mode - if ((xd->mode_info_context->mbmi.mode == B_PRED) && - (type == PLANE_TYPE_Y_WITH_DC)) { - switch (tx_type) { - case ADST_DCT: - pt_scan = vp8_row_scan; - break; - case DCT_ADST: - pt_scan = vp8_col_scan; - break; - default : - pt_scan = vp8_default_zig_zag1d; - break; - } - } else { - pt_scan = vp8_default_zig_zag1d; - } - - do { - const int band = vp8_coef_bands[c]; - int token; - - if (c < eob) { - const int rc = pt_scan[c]; - const int v = qcoeff_ptr[rc]; - - t->Extra = vp8_dct_value_tokens_ptr[v].Extra; - token = vp8_dct_value_tokens_ptr[v].Token; - } else - token = DCT_EOB_TOKEN; - - t->Token = token; - if (tx_type != DCT_DCT) - t->context_tree = cpi->common.fc.hybrid_coef_probs[type][band][pt]; - else - t->context_tree = cpi->common.fc.coef_probs[type][band][pt]; - - t->skip_eob_node = pt == 0 && ((band > 0 && type != PLANE_TYPE_Y_NO_DC) || - (band > 1 && type == PLANE_TYPE_Y_NO_DC)); - assert(vp8_coef_encodings[t->Token].Len - t->skip_eob_node > 0); - - if (!dry_run) { - if (tx_type != DCT_DCT) - ++cpi->hybrid_coef_counts[type][band][pt][token]; - else - ++cpi->coef_counts [type][band][pt][token]; - } - pt = vp8_prev_token_class[token]; - ++t; - } while (c < eob && ++c < seg_eob); - - *tp = t; - pt = (c != !type); /* 0 <-> all coeff data is zero */ - *a = *l = pt; - } - - tokenize1st_order_chroma_4x4(xd, tp, cpi, dry_run); -} -#endif - static void tokenize1st_order_b_4x4(MACROBLOCKD *xd, TOKENEXTRA **tp, PLANE_TYPE type, @@ -536,6 +415,7 @@ static void tokenize1st_order_b_4x4(MACROBLOCKD *xd, ENTROPY_CONTEXT *a, *l; int seg_eob = 16; int segment_id = xd->mode_info_context->mbmi.segment_id; + int const *pt_scan = vp8_default_zig_zag1d; if (segfeature_active(xd, segment_id, SEG_LVL_EOB)) { seg_eob = get_segdata(xd, segment_id, SEG_LVL_EOB); @@ -547,6 +427,18 @@ static void tokenize1st_order_b_4x4(MACROBLOCKD *xd, const int16_t *qcoeff_ptr = b->qcoeff; int c = (type == PLANE_TYPE_Y_NO_DC) ? 1 : 0; + TX_TYPE tx_type = get_tx_type(xd, &xd->block[block]); + switch (tx_type) { + case ADST_DCT: + pt_scan = vp8_row_scan; + break; + case DCT_ADST: + pt_scan = vp8_col_scan; + break; + default : + pt_scan = vp8_default_zig_zag1d; + break; + } a = (ENTROPY_CONTEXT *)xd->above_context + vp8_block2above[block]; l = (ENTROPY_CONTEXT *)xd->left_context + vp8_block2left[block]; VP8_COMBINEENTROPYCONTEXTS(pt, *a, *l); @@ -558,7 +450,7 @@ static void tokenize1st_order_b_4x4(MACROBLOCKD *xd, int token; if (c < eob) { - const int rc = vp8_default_zig_zag1d[c]; + const int rc = pt_scan[c]; const int v = qcoeff_ptr[rc]; t->Extra = vp8_dct_value_tokens_ptr[v].Extra; @@ -567,13 +459,20 @@ static void tokenize1st_order_b_4x4(MACROBLOCKD *xd, token = DCT_EOB_TOKEN; t->Token = token; - t->context_tree = cpi->common.fc.coef_probs[type][band][pt]; + if (tx_type != DCT_DCT) + t->context_tree = cpi->common.fc.hybrid_coef_probs[type][band][pt]; + else + t->context_tree = cpi->common.fc.coef_probs[type][band][pt]; t->skip_eob_node = pt == 0 && ((band > 0 && type != PLANE_TYPE_Y_NO_DC) || (band > 1 && type == PLANE_TYPE_Y_NO_DC)); assert(vp8_coef_encodings[t->Token].Len - t->skip_eob_node > 0); - if (!dry_run) - ++cpi->coef_counts[type][band][pt][token]; + if (!dry_run) { + if (tx_type != DCT_DCT) + ++cpi->hybrid_coef_counts[type][band][pt][token]; + else + ++cpi->coef_counts[type][band][pt][token]; + } pt = vp8_prev_token_class[token]; ++t; } while (c < eob && ++c < seg_eob); @@ -674,12 +573,6 @@ void vp8_tokenize_mb(VP8_COMP *cpi, int skip_inc; int segment_id = xd->mode_info_context->mbmi.segment_id; -#if CONFIG_HYBRIDTRANSFORM - int QIndex = cpi->mb.q_index; - int active_ht = (QIndex < ACTIVE_HT) && - (xd->mode_info_context->mbmi.mode == B_PRED); -#endif - if (!segfeature_active(xd, segment_id, SEG_LVL_EOB) || (get_segdata(xd, segment_id, SEG_LVL_EOB) != 0)) { skip_inc = 1; @@ -696,7 +589,8 @@ void vp8_tokenize_mb(VP8_COMP *cpi, xd->mode_info_context->mbmi.mb_skip_coeff = mb_is_skippable_16x16(xd); break; case TX_8X8: - if (xd->mode_info_context->mbmi.mode == I8X8_PRED) + if (xd->mode_info_context->mbmi.mode == I8X8_PRED || + xd->mode_info_context->mbmi.mode == SPLITMV) xd->mode_info_context->mbmi.mb_skip_coeff = mb_is_skippable_8x8_4x4uv(xd, 0); else xd->mode_info_context->mbmi.mb_skip_coeff = mb_is_skippable_8x8(xd, has_y2_block); @@ -745,17 +639,15 @@ void vp8_tokenize_mb(VP8_COMP *cpi, tokenize1st_order_b_16x16(xd, xd->block, t, PLANE_TYPE_Y_WITH_DC, A, L, cpi, dry_run); + A[1] = A[2] = A[3] = A[0]; + L[1] = L[2] = L[3] = L[0]; - for (b = 1; b < 16; b++) { - *(A + vp8_block2above[b]) = *(A); - *(L + vp8_block2left[b] ) = *(L); - } for (b = 16; b < 24; b += 4) { tokenize1st_order_b_8x8(xd, xd->block + b, t, PLANE_TYPE_UV, A + vp8_block2above_8x8[b], L + vp8_block2left_8x8[b], cpi, dry_run); - *(A + vp8_block2above_8x8[b]+1) = *(A + vp8_block2above_8x8[b]); - *(L + vp8_block2left_8x8[b]+1 ) = *(L + vp8_block2left_8x8[b]); + A[vp8_block2above_8x8[b] + 1] = A[vp8_block2above_8x8[b]]; + L[vp8_block2left_8x8[b] + 1] = L[vp8_block2left_8x8[b]]; } vpx_memset(&A[8], 0, sizeof(A[8])); vpx_memset(&L[8], 0, sizeof(L[8])); @@ -769,27 +661,23 @@ void vp8_tokenize_mb(VP8_COMP *cpi, A + vp8_block2above_8x8[b], L + vp8_block2left_8x8[b], cpi, dry_run); - *(A + vp8_block2above_8x8[b] + 1) = *(A + vp8_block2above_8x8[b]); - *(L + vp8_block2left_8x8[b] + 1) = *(L + vp8_block2left_8x8[b]); + A[vp8_block2above_8x8[b] + 1] = A[vp8_block2above_8x8[b]]; + L[vp8_block2left_8x8[b] + 1] = L[vp8_block2left_8x8[b]]; } - if (xd->mode_info_context->mbmi.mode == I8X8_PRED) { + if (xd->mode_info_context->mbmi.mode == I8X8_PRED || + xd->mode_info_context->mbmi.mode == SPLITMV) { tokenize1st_order_chroma_4x4(xd, t, cpi, dry_run); } else { for (b = 16; b < 24; b += 4) { tokenize1st_order_b_8x8(xd, xd->block + b, t, PLANE_TYPE_UV, A + vp8_block2above_8x8[b], L + vp8_block2left_8x8[b], cpi, dry_run); - *(A + vp8_block2above_8x8[b] + 1) = *(A + vp8_block2above_8x8[b]); - *(L + vp8_block2left_8x8[b] + 1) = *(L + vp8_block2left_8x8[b]); + A[vp8_block2above_8x8[b] + 1] = A[vp8_block2above_8x8[b]]; + L[vp8_block2left_8x8[b] + 1] = L[vp8_block2left_8x8[b]]; } } } else { -#if CONFIG_HYBRIDTRANSFORM - if (active_ht) - tokenize1st_order_ht_4x4(xd, t, plane_type, cpi, dry_run); - else -#endif - tokenize1st_order_b_4x4(xd, t, plane_type, cpi, dry_run); + tokenize1st_order_b_4x4(xd, t, plane_type, cpi, dry_run); } if (dry_run) *t = t_backup; @@ -1077,31 +965,24 @@ static __inline void stuff1st_order_b_8x8(MACROBLOCKD *xd, int dry_run) { int pt; /* near block/prev token context index */ TOKENEXTRA *t = *tp; /* store tokens starting here */ -#if CONFIG_HYBRIDTRANSFORM8X8 - TX_TYPE tx_type = xd->mode_info_context->mbmi.mode == I8X8_PRED ? - get_tx_type(xd, b) : DCT_DCT; -#endif + TX_TYPE tx_type = get_tx_type(xd, b); const int band = vp8_coef_bands_8x8[(type == PLANE_TYPE_Y_NO_DC) ? 1 : 0]; VP8_COMBINEENTROPYCONTEXTS(pt, *a, *l); (void) b; t->Token = DCT_EOB_TOKEN; -#if CONFIG_HYBRIDTRANSFORM8X8 if (tx_type != DCT_DCT) t->context_tree = cpi->common.fc.hybrid_coef_probs_8x8[type][band][pt]; else -#endif t->context_tree = cpi->common.fc.coef_probs_8x8[type][band][pt]; // t->section = 8; t->skip_eob_node = 0; ++t; *tp = t; if (!dry_run) { -#if CONFIG_HYBRIDTRANSFORM8X8 if (tx_type == DCT_DCT) ++cpi->hybrid_coef_counts_8x8[type][band][pt][DCT_EOB_TOKEN]; else -#endif ++cpi->coef_counts_8x8[type][band][pt][DCT_EOB_TOKEN]; } pt = 0; /* 0 <-> all coeff data is zero */ @@ -1157,8 +1038,8 @@ static void vp8_stuff_mb_8x8(VP8_COMP *cpi, MACROBLOCKD *xd, A + vp8_block2above_8x8[b], L + vp8_block2left_8x8[b], cpi, dry_run); - *(A + vp8_block2above_8x8[b] + 1) = *(A + vp8_block2above_8x8[b]); - *(L + vp8_block2left_8x8[b] + 1) = *(L + vp8_block2left_8x8[b]); + A[vp8_block2above_8x8[b] + 1] = A[vp8_block2above_8x8[b]]; + L[vp8_block2left_8x8[b] + 1] = L[vp8_block2left_8x8[b]]; } for (b = 16; b < 24; b += 4) { @@ -1166,8 +1047,8 @@ static void vp8_stuff_mb_8x8(VP8_COMP *cpi, MACROBLOCKD *xd, A + vp8_block2above[b], L + vp8_block2left[b], cpi, dry_run); - *(A + vp8_block2above_8x8[b] + 1) = *(A + vp8_block2above_8x8[b]); - *(L + vp8_block2left_8x8[b] + 1) = *(L + vp8_block2left_8x8[b]); + A[vp8_block2above_8x8[b] + 1] = A[vp8_block2above_8x8[b]]; + L[vp8_block2left_8x8[b] + 1] = L[vp8_block2left_8x8[b]]; } if (dry_run) *t = t_backup; @@ -1183,29 +1064,23 @@ static __inline void stuff1st_order_b_16x16(MACROBLOCKD *xd, int dry_run) { int pt; /* near block/prev token context index */ TOKENEXTRA *t = *tp; /* store tokens starting here */ -#if CONFIG_HYBRIDTRANSFORM16X16 TX_TYPE tx_type = get_tx_type(xd, b); -#endif const int band = vp8_coef_bands_16x16[(type == PLANE_TYPE_Y_NO_DC) ? 1 : 0]; VP8_COMBINEENTROPYCONTEXTS(pt, *a, *l); (void) b; t->Token = DCT_EOB_TOKEN; -#if CONFIG_HYBRIDTRANSFORM16X16 if (tx_type != DCT_DCT) t->context_tree = cpi->common.fc.hybrid_coef_probs_16x16[type][band][pt]; else -#endif t->context_tree = cpi->common.fc.coef_probs_16x16[type][band][pt]; t->skip_eob_node = 0; ++t; *tp = t; if (!dry_run) { -#if CONFIG_HYBRIDTRANSFORM16X16 if (tx_type != DCT_DCT) ++cpi->hybrid_coef_counts_16x16[type][band][pt][DCT_EOB_TOKEN]; else -#endif ++cpi->coef_counts_16x16[type][band][pt][DCT_EOB_TOKEN]; } pt = 0; /* 0 <-> all coeff data is zero */ @@ -1221,17 +1096,15 @@ static void vp8_stuff_mb_16x16(VP8_COMP *cpi, MACROBLOCKD *xd, stuff1st_order_b_16x16(xd, xd->block, t, PLANE_TYPE_Y_WITH_DC, A, L, cpi, dry_run); - for (i = 1; i < 16; i++) { - *(A + vp8_block2above[i]) = *(A); - *(L + vp8_block2left[i]) = *(L); - } + A[1] = A[2] = A[3] = A[0]; + L[1] = L[2] = L[3] = L[0]; for (b = 16; b < 24; b += 4) { stuff1st_order_buv_8x8(xd, xd->block + b, t, A + vp8_block2above[b], L + vp8_block2left[b], cpi, dry_run); - *(A + vp8_block2above_8x8[b]+1) = *(A + vp8_block2above_8x8[b]); - *(L + vp8_block2left_8x8[b]+1 ) = *(L + vp8_block2left_8x8[b]); + A[vp8_block2above_8x8[b] + 1] = A[vp8_block2above_8x8[b]]; + L[vp8_block2left_8x8[b] + 1] = L[vp8_block2left_8x8[b]]; } vpx_memset(&A[8], 0, sizeof(A[8])); vpx_memset(&L[8], 0, sizeof(L[8])); @@ -1272,28 +1145,22 @@ static __inline void stuff1st_order_b_4x4(MACROBLOCKD *xd, int dry_run) { int pt; /* near block/prev token context index */ TOKENEXTRA *t = *tp; /* store tokens starting here */ -#if CONFIG_HYBRIDTRANSFORM TX_TYPE tx_type = get_tx_type(xd, b); -#endif const int band = vp8_coef_bands[(type == PLANE_TYPE_Y_NO_DC) ? 1 : 0]; VP8_COMBINEENTROPYCONTEXTS(pt, *a, *l); t->Token = DCT_EOB_TOKEN; -#if CONFIG_HYBRIDTRANSFORM if (tx_type != DCT_DCT) t->context_tree = cpi->common.fc.hybrid_coef_probs[type][band][pt]; else -#endif t->context_tree = cpi->common.fc.coef_probs[type][band][pt]; t->skip_eob_node = 0; ++t; *tp = t; if (!dry_run) { -#if CONFIG_HYBRIDTRANSFORM if (tx_type != DCT_DCT) ++cpi->hybrid_coef_counts[type][band][pt][DCT_EOB_TOKEN]; else -#endif ++cpi->coef_counts[type][band][pt][DCT_EOB_TOKEN]; } pt = 0; /* 0 <-> all coeff data is zero */ @@ -1371,8 +1238,8 @@ static void vp8_stuff_mb_8x8_4x4uv(VP8_COMP *cpi, MACROBLOCKD *xd, A + vp8_block2above_8x8[b], L + vp8_block2left_8x8[b], cpi, dry_run); - *(A + vp8_block2above_8x8[b] + 1) = *(A + vp8_block2above_8x8[b]); - *(L + vp8_block2left_8x8[b] + 1) = *(L + vp8_block2left_8x8[b]); + A[vp8_block2above_8x8[b] + 1] = A[vp8_block2above_8x8[b]]; + L[vp8_block2left_8x8[b] + 1] = L[vp8_block2left_8x8[b]]; } for (b = 16; b < 24; b++) @@ -1391,7 +1258,8 @@ void vp8_stuff_mb(VP8_COMP *cpi, MACROBLOCKD *xd, TOKENEXTRA **t, int dry_run) { if (tx_size == TX_16X16) { vp8_stuff_mb_16x16(cpi, xd, t, dry_run); } else if (tx_size == TX_8X8) { - if (xd->mode_info_context->mbmi.mode == I8X8_PRED) { + if (xd->mode_info_context->mbmi.mode == I8X8_PRED || + xd->mode_info_context->mbmi.mode == SPLITMV) { vp8_stuff_mb_8x8_4x4uv(cpi, xd, t, dry_run); } else { vp8_stuff_mb_8x8(cpi, xd, t, dry_run); |