Home | History | Annotate | Download | only in encoder
      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_BLOCK_H_
     12 #define VP9_ENCODER_VP9_BLOCK_H_
     13 
     14 #include "vp9/common/vp9_entropymv.h"
     15 #include "vp9/common/vp9_entropy.h"
     16 
     17 #ifdef __cplusplus
     18 extern "C" {
     19 #endif
     20 
     21 typedef struct {
     22   unsigned int sse;
     23   int sum;
     24   unsigned int var;
     25 } diff;
     26 
     27 struct macroblock_plane {
     28   DECLARE_ALIGNED(16, int16_t, src_diff[64 * 64]);
     29   tran_low_t *qcoeff;
     30   tran_low_t *coeff;
     31   uint16_t *eobs;
     32   struct buf_2d src;
     33 
     34   // Quantizer setings
     35   int16_t *quant_fp;
     36   int16_t *round_fp;
     37   int16_t *quant;
     38   int16_t *quant_shift;
     39   int16_t *zbin;
     40   int16_t *round;
     41 
     42   int64_t quant_thred[2];
     43 };
     44 
     45 /* The [2] dimension is for whether we skip the EOB node (i.e. if previous
     46  * coefficient in this block was zero) or not. */
     47 typedef unsigned int vp9_coeff_cost[PLANE_TYPES][REF_TYPES][COEF_BANDS][2]
     48                                    [COEFF_CONTEXTS][ENTROPY_TOKENS];
     49 
     50 typedef struct {
     51   int_mv ref_mvs[MAX_REF_FRAMES][MAX_MV_REF_CANDIDATES];
     52   uint8_t mode_context[MAX_REF_FRAMES];
     53 } MB_MODE_INFO_EXT;
     54 
     55 typedef struct macroblock MACROBLOCK;
     56 struct macroblock {
     57   struct macroblock_plane plane[MAX_MB_PLANE];
     58 
     59   MACROBLOCKD e_mbd;
     60   MB_MODE_INFO_EXT *mbmi_ext;
     61   MB_MODE_INFO_EXT *mbmi_ext_base;
     62   int skip_block;
     63   int select_tx_size;
     64   int skip_recode;
     65   int skip_optimize;
     66   int q_index;
     67 
     68   int errorperbit;
     69   int sadperbit16;
     70   int sadperbit4;
     71   int rddiv;
     72   int rdmult;
     73   int mb_energy;
     74 
     75   // These are set to their default values at the beginning, and then adjusted
     76   // further in the encoding process.
     77   BLOCK_SIZE min_partition_size;
     78   BLOCK_SIZE max_partition_size;
     79 
     80   int mv_best_ref_index[MAX_REF_FRAMES];
     81   unsigned int max_mv_context[MAX_REF_FRAMES];
     82   unsigned int source_variance;
     83   unsigned int pred_sse[MAX_REF_FRAMES];
     84   int pred_mv_sad[MAX_REF_FRAMES];
     85 
     86   int nmvjointcost[MV_JOINTS];
     87   int *nmvcost[2];
     88   int *nmvcost_hp[2];
     89   int **mvcost;
     90 
     91   int nmvjointsadcost[MV_JOINTS];
     92   int *nmvsadcost[2];
     93   int *nmvsadcost_hp[2];
     94   int **mvsadcost;
     95 
     96   // These define limits to motion vector components to prevent them
     97   // from extending outside the UMV borders
     98   int mv_col_min;
     99   int mv_col_max;
    100   int mv_row_min;
    101   int mv_row_max;
    102 
    103   // Notes transform blocks where no coefficents are coded.
    104   // Set during mode selection. Read during block encoding.
    105   uint8_t zcoeff_blk[TX_SIZES][256];
    106 
    107   int skip;
    108 
    109   int encode_breakout;
    110 
    111   // note that token_costs is the cost when eob node is skipped
    112   vp9_coeff_cost token_costs[TX_SIZES];
    113 
    114   int optimize;
    115 
    116   // indicate if it is in the rd search loop or encoding process
    117   int use_lp32x32fdct;
    118   int skip_encode;
    119 
    120   // use fast quantization process
    121   int quant_fp;
    122 
    123   // skip forward transform and quantization
    124   uint8_t skip_txfm[MAX_MB_PLANE << 2];
    125   #define SKIP_TXFM_NONE 0
    126   #define SKIP_TXFM_AC_DC 1
    127   #define SKIP_TXFM_AC_ONLY 2
    128 
    129   int64_t bsse[MAX_MB_PLANE << 2];
    130 
    131   // Used to store sub partition's choices.
    132   MV pred_mv[MAX_REF_FRAMES];
    133 
    134   // Strong color activity detection. Used in RTC coding mode to enhance
    135   // the visual quality at the boundary of moving color objects.
    136   uint8_t color_sensitivity[2];
    137 
    138   void (*fwd_txm4x4)(const int16_t *input, tran_low_t *output, int stride);
    139   void (*itxm_add)(const tran_low_t *input, uint8_t *dest, int stride, int eob);
    140 #if CONFIG_VP9_HIGHBITDEPTH
    141   void (*highbd_itxm_add)(const tran_low_t *input, uint8_t *dest, int stride,
    142                           int eob, int bd);
    143 #endif
    144 };
    145 
    146 #ifdef __cplusplus
    147 }  // extern "C"
    148 #endif
    149 
    150 #endif  // VP9_ENCODER_VP9_BLOCK_H_
    151