/* * Copyright (c) 2010 The WebM project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #include <math.h> #include <stdio.h> #include <string.h> #include <assert.h> #include "onyx_int.h" #include "tokenize.h" #include "vpx_mem/vpx_mem.h" /* Global event counters used for accumulating statistics across several compressions, then generating context.c = initial stats. */ void vp8_stuff_mb(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t); void vp8_fix_contexts(MACROBLOCKD *x); #include "dct_value_tokens.h" #include "dct_value_cost.h" const TOKENVALUE *const vp8_dct_value_tokens_ptr = …; const short *const vp8_dct_value_cost_ptr = …; #if 0 int skip_true_count = 0; int skip_false_count = 0; #endif /* function used to generate dct_value_tokens and dct_value_cost tables */ /* static void fill_value_tokens() { TOKENVALUE *t = dct_value_tokens + DCT_MAX_VALUE; const vp8_extra_bit_struct *e = vp8_extra_bits; int i = -DCT_MAX_VALUE; int sign = 1; do { if (!i) sign = 0; { const int a = sign ? -i : i; int eb = sign; if (a > 4) { int j = 4; while (++j < 11 && e[j].base_val <= a) {} t[i].Token = --j; eb |= (a - e[j].base_val) << 1; } else t[i].Token = a; t[i].Extra = eb; } // initialize the cost for extra bits for all possible coefficient value. { int cost = 0; const vp8_extra_bit_struct *p = vp8_extra_bits + t[i].Token; if (p->base_val) { const int extra = t[i].Extra; const int Length = p->Len; if (Length) cost += vp8_treed_cost(p->tree, p->prob, extra >> 1, Length); cost += vp8_cost_bit(vp8_prob_half, extra & 1); // sign dct_value_cost[i + DCT_MAX_VALUE] = cost; } } } while (++i < DCT_MAX_VALUE); vp8_dct_value_tokens_ptr = dct_value_tokens + DCT_MAX_VALUE; vp8_dct_value_cost_ptr = dct_value_cost + DCT_MAX_VALUE; } */ static void tokenize2nd_order_b(MACROBLOCK *x, TOKENEXTRA **tp, VP8_COMP *cpi) { … } static void tokenize1st_order_b( MACROBLOCK *x, TOKENEXTRA **tp, int type, /* which plane: 0=Y no DC, 1=Y2, 2=UV, 3=Y with DC */ VP8_COMP *cpi) { … } static int mb_is_skippable(MACROBLOCKD *x, int has_y2_block) { … } void vp8_tokenize_mb(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t) { … } static void stuff2nd_order_b(TOKENEXTRA **tp, ENTROPY_CONTEXT *a, ENTROPY_CONTEXT *l, VP8_COMP *cpi, MACROBLOCK *x) { … } static void stuff1st_order_b(TOKENEXTRA **tp, ENTROPY_CONTEXT *a, ENTROPY_CONTEXT *l, int type, VP8_COMP *cpi, MACROBLOCK *x) { … } static void stuff1st_order_buv(TOKENEXTRA **tp, ENTROPY_CONTEXT *a, ENTROPY_CONTEXT *l, VP8_COMP *cpi, MACROBLOCK *x) { … } void vp8_stuff_mb(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t) { … } void vp8_fix_contexts(MACROBLOCKD *x) { … }