void vp8_tokenize_mb(VP8_COMP *cpi, MACROBLOCKD *x, TOKENEXTRA **t) { int plane_type; int has_y2_block; has_y2_block = (x->mode_info_context->mbmi.mode != B_PRED && x->mode_info_context->mbmi.mode != SPLITMV); x->mode_info_context->mbmi.mb_skip_coeff = mb_is_skippable(x, has_y2_block); if (x->mode_info_context->mbmi.mb_skip_coeff) { if (!cpi->common.mb_no_coeff_skip) { vp8_stuff_mb(cpi, x, t); } else { vp8_fix_contexts(x); cpi->skip_true_count++; } return; } plane_type = 3; if(has_y2_block) { tokenize2nd_order_b(x, t, cpi); plane_type = 0; } tokenize1st_order_b(x, t, plane_type, cpi); }
void vp8_tokenize_mb(VP8_COMP *cpi, MACROBLOCKD *x, TOKENEXTRA **t) { ENTROPY_CONTEXT * A = (ENTROPY_CONTEXT *)x->above_context; ENTROPY_CONTEXT * L = (ENTROPY_CONTEXT *)x->left_context; int plane_type; int b; TOKENEXTRA *start = *t; TOKENEXTRA *tp = *t; x->mode_info_context->mbmi.dc_diff = 1; #if 0 if (x->mbmi.force_no_skip) { x->mbmi.mb_skip_coeff = 1; //reset for next_mb. x->mbmi.force_no_skip = 0; } #endif #if 1 x->mode_info_context->mbmi.mb_skip_coeff = mb_is_skippable(x); if (x->mode_info_context->mbmi.mb_skip_coeff) { cpi->skip_true_count++; if (!cpi->common.mb_no_coeff_skip) vp8_stuff_mb(cpi, x, t) ; else { vp8_fix_contexts(x); } if (x->mode_info_context->mbmi.mode != B_PRED && x->mode_info_context->mbmi.mode != SPLITMV) x->mode_info_context->mbmi.dc_diff = 0; else x->mode_info_context->mbmi.dc_diff = 1; return; } cpi->skip_false_count++; #endif #if 0 vpx_memcpy(cpi->coef_counts_backup, cpi->coef_counts, sizeof(cpi->coef_counts)); #endif if (x->mode_info_context->mbmi.mode == B_PRED || x->mode_info_context->mbmi.mode == SPLITMV) { plane_type = 3; } else { tokenize2nd_order_b(x->block + 24, t, 1, x->frame_type, A + vp8_block2above[24], L + vp8_block2left[24], cpi); plane_type = 0; } for (b = 0; b < 16; b++) tokenize1st_order_b(x->block + b, t, plane_type, x->frame_type, A + vp8_block2above[b], L + vp8_block2left[b], cpi); for (b = 16; b < 24; b++) tokenize1st_order_b(x->block + b, t, 2, x->frame_type, A + vp8_block2above[b], L + vp8_block2left[b], cpi); #if 0 if (cpi->common.mb_no_coeff_skip) { int skip = 1; while ((tp != *t) && skip) { skip = (skip && (tp->Token == DCT_EOB_TOKEN)); tp ++; } if (skip != x->mbmi.mb_skip_coeff) skip += 0; x->mbmi.mb_skip_coeff = skip; if (x->mbmi.mb_skip_coeff == 1) { x->mbmi.dc_diff = 0; //redo the coutnts vpx_memcpy(cpi->coef_counts, cpi->coef_counts_backup, sizeof(cpi->coef_counts)); *t = start; cpi->skip_true_count++; //skip_true_count++; } else { cpi->skip_false_count++; //skip_false_count++; } } #endif }
void vp8_tokenize_mb(VP8_COMP *cpi, MACROBLOCKD *x, TOKENEXTRA **t) { //int i; ENTROPY_CONTEXT **const A = x->above_context; ENTROPY_CONTEXT(* const L)[4] = x->left_context; int plane_type; int b; TOKENEXTRA *start = *t; TOKENEXTRA *tp = *t; x->mbmi.dc_diff = 1; vpx_memcpy(cpi->coef_counts_backup, cpi->coef_counts, sizeof(cpi->coef_counts)); if (x->mbmi.mode == B_PRED || x->mbmi.mode == SPLITMV) { plane_type = 3; } else { tokenize2nd_order_b(x->block + 24, t, 1, x->frame_type, A[Y2CONTEXT] + vp8_block2above[24], L[Y2CONTEXT] + vp8_block2left[24], cpi); plane_type = 0; } for (b = 0; b < 16; b++) tokenize1st_order_b(x->block + b, t, plane_type, x->frame_type, A[vp8_block2context[b]] + vp8_block2above[b], L[vp8_block2context[b]] + vp8_block2left[b], cpi); for (b = 16; b < 24; b++) tokenize1st_order_b(x->block + b, t, 2, x->frame_type, A[vp8_block2context[b]] + vp8_block2above[b], L[vp8_block2context[b]] + vp8_block2left[b], cpi); if (cpi->common.mb_no_coeff_skip) { x->mbmi.mb_skip_coeff = 1; while ((tp != *t) && x->mbmi.mb_skip_coeff) { x->mbmi.mb_skip_coeff = (x->mbmi.mb_skip_coeff && (tp->Token == DCT_EOB_TOKEN)); tp ++; } if (x->mbmi.mb_skip_coeff == 1) { x->mbmi.dc_diff = 0; //redo the coutnts vpx_memcpy(cpi->coef_counts, cpi->coef_counts_backup, sizeof(cpi->coef_counts)); *t = start; cpi->skip_true_count++; //skip_true_count++; } else { cpi->skip_false_count++; //skip_false_count++; } } }