| Index: source/libvpx/vp9/encoder/vp9_tokenize.h
|
| ===================================================================
|
| --- source/libvpx/vp9/encoder/vp9_tokenize.h (revision 293588)
|
| +++ source/libvpx/vp9/encoder/vp9_tokenize.h (working copy)
|
| @@ -20,33 +20,30 @@
|
| extern "C" {
|
| #endif
|
|
|
| -void vp9_tokenize_initialize();
|
| -
|
| #define EOSB_TOKEN 127 // Not signalled, encoder only
|
|
|
| -typedef struct {
|
| - int16_t token;
|
| #if CONFIG_VP9_HIGHBITDEPTH
|
| - int32_t extra;
|
| + typedef int32_t EXTRABIT;
|
| #else
|
| - int16_t extra;
|
| + typedef int16_t EXTRABIT;
|
| #endif
|
| +
|
| +
|
| +typedef struct {
|
| + int16_t token;
|
| + EXTRABIT extra;
|
| } TOKENVALUE;
|
|
|
| typedef struct {
|
| const vp9_prob *context_tree;
|
| -#if CONFIG_VP9_HIGHBITDEPTH
|
| - int32_t extra;
|
| -#else
|
| - int16_t extra;
|
| -#endif
|
| - uint8_t token;
|
| - uint8_t skip_eob_node;
|
| + EXTRABIT extra;
|
| + uint8_t token;
|
| + uint8_t skip_eob_node;
|
| } TOKENEXTRA;
|
|
|
| extern const vp9_tree_index vp9_coef_tree[];
|
| extern const vp9_tree_index vp9_coef_con_tree[];
|
| -extern struct vp9_token vp9_coef_encodings[];
|
| +extern const struct vp9_token vp9_coef_encodings[];
|
|
|
| int vp9_is_skippable_in_plane(MACROBLOCK *x, BLOCK_SIZE bsize, int plane);
|
| int vp9_has_high_freq_in_plane(MACROBLOCK *x, BLOCK_SIZE bsize, int plane);
|
| @@ -63,13 +60,51 @@
|
| * fields are not.
|
| */
|
| extern const TOKENVALUE *vp9_dct_value_tokens_ptr;
|
| +extern const TOKENVALUE *vp9_dct_cat_lt_10_value_tokens;
|
| +extern const int16_t vp9_cat6_low_cost[256];
|
| +extern const int16_t vp9_cat6_high_cost[128];
|
| +extern const int16_t vp9_cat6_high10_high_cost[512];
|
| +extern const int16_t vp9_cat6_high12_high_cost[2048];
|
| +static INLINE int16_t vp9_get_cost(int16_t token, EXTRABIT extrabits,
|
| + const int16_t *cat6_high_table) {
|
| + if (token != CATEGORY6_TOKEN)
|
| + return vp9_extra_bits[token].cost[extrabits];
|
| + return vp9_cat6_low_cost[extrabits & 0xff]
|
| + + cat6_high_table[extrabits >> 8];
|
| +}
|
| +
|
| #if CONFIG_VP9_HIGHBITDEPTH
|
| -extern const int16_t *vp9_dct_value_cost_high10_ptr;
|
| -extern const TOKENVALUE *vp9_dct_value_tokens_high10_ptr;
|
| -extern const int16_t *vp9_dct_value_cost_high12_ptr;
|
| -extern const TOKENVALUE *vp9_dct_value_tokens_high12_ptr;
|
| +static INLINE const int16_t* vp9_get_high_cost_table(int bit_depth) {
|
| + return bit_depth == 8 ? vp9_cat6_high_cost
|
| + : (bit_depth == 10 ? vp9_cat6_high10_high_cost :
|
| + vp9_cat6_high12_high_cost);
|
| +}
|
| +#else
|
| +static INLINE const int16_t* vp9_get_high_cost_table(int bit_depth) {
|
| + (void) bit_depth;
|
| + return vp9_cat6_high_cost;
|
| +}
|
| #endif // CONFIG_VP9_HIGHBITDEPTH
|
|
|
| +static INLINE void vp9_get_token_extra(int v, int16_t *token, EXTRABIT *extra) {
|
| + if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) {
|
| + *token = CATEGORY6_TOKEN;
|
| + if (v >= CAT6_MIN_VAL)
|
| + *extra = 2 * v - 2 * CAT6_MIN_VAL;
|
| + else
|
| + *extra = -2 * v - 2 * CAT6_MIN_VAL + 1;
|
| + return;
|
| + }
|
| + *token = vp9_dct_cat_lt_10_value_tokens[v].token;
|
| + *extra = vp9_dct_cat_lt_10_value_tokens[v].extra;
|
| +}
|
| +static INLINE int16_t vp9_get_token(int v) {
|
| + if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL)
|
| + return 10;
|
| + return vp9_dct_cat_lt_10_value_tokens[v].token;
|
| +}
|
| +
|
| +
|
| #ifdef __cplusplus
|
| } // extern "C"
|
| #endif
|
|
|