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 |