LCOV - code coverage report
Current view: top level - media/libvpx/libvpx/vp9/encoder - vp9_tokenize.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 27 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 5 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
       3             :  *
       4             :  *  Use of this source code is governed by a BSD-style license
       5             :  *  that can be found in the LICENSE file in the root of the source
       6             :  *  tree. An additional intellectual property rights grant can be found
       7             :  *  in the file PATENTS.  All contributing project authors may
       8             :  *  be found in the AUTHORS file in the root of the source tree.
       9             :  */
      10             : 
      11             : #ifndef VP9_ENCODER_VP9_TOKENIZE_H_
      12             : #define VP9_ENCODER_VP9_TOKENIZE_H_
      13             : 
      14             : #include "vp9/common/vp9_entropy.h"
      15             : 
      16             : #include "vp9/encoder/vp9_block.h"
      17             : #include "vp9/encoder/vp9_treewriter.h"
      18             : 
      19             : #ifdef __cplusplus
      20             : extern "C" {
      21             : #endif
      22             : 
      23             : #define EOSB_TOKEN 127  // Not signalled, encoder only
      24             : 
      25             : #if CONFIG_VP9_HIGHBITDEPTH
      26             : typedef int32_t EXTRABIT;
      27             : #else
      28             : typedef int16_t EXTRABIT;
      29             : #endif
      30             : 
      31             : typedef struct {
      32             :   int16_t token;
      33             :   EXTRABIT extra;
      34             : } TOKENVALUE;
      35             : 
      36             : typedef struct {
      37             :   const vpx_prob *context_tree;
      38             :   int16_t token;
      39             :   EXTRABIT extra;
      40             : } TOKENEXTRA;
      41             : 
      42             : extern const vpx_tree_index vp9_coef_tree[];
      43             : extern const vpx_tree_index vp9_coef_con_tree[];
      44             : extern const struct vp9_token vp9_coef_encodings[];
      45             : 
      46             : int vp9_is_skippable_in_plane(MACROBLOCK *x, BLOCK_SIZE bsize, int plane);
      47             : int vp9_has_high_freq_in_plane(MACROBLOCK *x, BLOCK_SIZE bsize, int plane);
      48             : 
      49             : struct VP9_COMP;
      50             : struct ThreadData;
      51             : 
      52             : void vp9_tokenize_sb(struct VP9_COMP *cpi, struct ThreadData *td,
      53             :                      TOKENEXTRA **t, int dry_run, int seg_skip,
      54             :                      BLOCK_SIZE bsize);
      55             : 
      56             : typedef struct {
      57             :   const vpx_prob *prob;
      58             :   int len;
      59             :   int base_val;
      60             :   const int16_t *cost;
      61             : } vp9_extra_bit;
      62             : 
      63             : // indexed by token value
      64             : extern const vp9_extra_bit vp9_extra_bits[ENTROPY_TOKENS];
      65             : #if CONFIG_VP9_HIGHBITDEPTH
      66             : extern const vp9_extra_bit vp9_extra_bits_high10[ENTROPY_TOKENS];
      67             : extern const vp9_extra_bit vp9_extra_bits_high12[ENTROPY_TOKENS];
      68             : #endif  // CONFIG_VP9_HIGHBITDEPTH
      69             : 
      70             : extern const int16_t *vp9_dct_value_cost_ptr;
      71             : /* TODO: The Token field should be broken out into a separate char array to
      72             :  *  improve cache locality, since it's needed for costing when the rest of the
      73             :  *  fields are not.
      74             :  */
      75             : extern const TOKENVALUE *vp9_dct_value_tokens_ptr;
      76             : extern const TOKENVALUE *vp9_dct_cat_lt_10_value_tokens;
      77             : extern const int *vp9_dct_cat_lt_10_value_cost;
      78             : extern const int16_t vp9_cat6_low_cost[256];
      79             : extern const int vp9_cat6_high_cost[64];
      80             : extern const int vp9_cat6_high10_high_cost[256];
      81             : extern const int vp9_cat6_high12_high_cost[1024];
      82           0 : static INLINE int vp9_get_cost(int16_t token, EXTRABIT extrabits,
      83             :                                const int *cat6_high_table) {
      84           0 :   if (token != CATEGORY6_TOKEN)
      85           0 :     return vp9_extra_bits[token].cost[extrabits >> 1];
      86           0 :   return vp9_cat6_low_cost[(extrabits >> 1) & 0xff] +
      87           0 :          cat6_high_table[extrabits >> 9];
      88             : }
      89             : 
      90             : #if CONFIG_VP9_HIGHBITDEPTH
      91             : static INLINE const int *vp9_get_high_cost_table(int bit_depth) {
      92             :   return bit_depth == 8 ? vp9_cat6_high_cost
      93             :                         : (bit_depth == 10 ? vp9_cat6_high10_high_cost
      94             :                                            : vp9_cat6_high12_high_cost);
      95             : }
      96             : #else
      97           0 : static INLINE const int *vp9_get_high_cost_table(int bit_depth) {
      98             :   (void)bit_depth;
      99           0 :   return vp9_cat6_high_cost;
     100             : }
     101             : #endif  // CONFIG_VP9_HIGHBITDEPTH
     102             : 
     103           0 : static INLINE void vp9_get_token_extra(int v, int16_t *token, EXTRABIT *extra) {
     104           0 :   if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) {
     105           0 :     *token = CATEGORY6_TOKEN;
     106           0 :     if (v >= CAT6_MIN_VAL)
     107           0 :       *extra = 2 * v - 2 * CAT6_MIN_VAL;
     108             :     else
     109           0 :       *extra = -2 * v - 2 * CAT6_MIN_VAL + 1;
     110           0 :     return;
     111             :   }
     112           0 :   *token = vp9_dct_cat_lt_10_value_tokens[v].token;
     113           0 :   *extra = vp9_dct_cat_lt_10_value_tokens[v].extra;
     114             : }
     115           0 : static INLINE int16_t vp9_get_token(int v) {
     116           0 :   if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) return 10;
     117           0 :   return vp9_dct_cat_lt_10_value_tokens[v].token;
     118             : }
     119             : 
     120           0 : static INLINE int vp9_get_token_cost(int v, int16_t *token,
     121             :                                      const int *cat6_high_table) {
     122           0 :   if (v >= CAT6_MIN_VAL || v <= -CAT6_MIN_VAL) {
     123             :     EXTRABIT extrabits;
     124           0 :     *token = CATEGORY6_TOKEN;
     125           0 :     extrabits = abs(v) - CAT6_MIN_VAL;
     126           0 :     return vp9_cat6_low_cost[extrabits & 0xff] +
     127           0 :            cat6_high_table[extrabits >> 8];
     128             :   }
     129           0 :   *token = vp9_dct_cat_lt_10_value_tokens[v].token;
     130           0 :   return vp9_dct_cat_lt_10_value_cost[v];
     131             : }
     132             : 
     133             : #ifdef __cplusplus
     134             : }  // extern "C"
     135             : #endif
     136             : 
     137             : #endif  // VP9_ENCODER_VP9_TOKENIZE_H_

Generated by: LCOV version 1.13