1 /* 2 * Copyright (c) 2014 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_CONTEXT_TREE_H_ 12 #define VP9_ENCODER_VP9_CONTEXT_TREE_H_ 13 14 #include "vp9/common/vp9_blockd.h" 15 16 struct VP9_COMP; 17 struct VP9Common; 18 struct ThreadData; 19 20 // Structure to hold snapshot of coding context during the mode picking process 21 typedef struct { 22 MODE_INFO mic; 23 uint8_t *zcoeff_blk; 24 tran_low_t *coeff[MAX_MB_PLANE][3]; 25 tran_low_t *qcoeff[MAX_MB_PLANE][3]; 26 tran_low_t *dqcoeff[MAX_MB_PLANE][3]; 27 uint16_t *eobs[MAX_MB_PLANE][3]; 28 29 // dual buffer pointers, 0: in use, 1: best in store 30 tran_low_t *coeff_pbuf[MAX_MB_PLANE][3]; 31 tran_low_t *qcoeff_pbuf[MAX_MB_PLANE][3]; 32 tran_low_t *dqcoeff_pbuf[MAX_MB_PLANE][3]; 33 uint16_t *eobs_pbuf[MAX_MB_PLANE][3]; 34 35 int is_coded; 36 int num_4x4_blk; 37 int skip; 38 int pred_pixel_ready; 39 // For current partition, only if all Y, U, and V transform blocks' 40 // coefficients are quantized to 0, skippable is set to 0. 41 int skippable; 42 uint8_t skip_txfm[MAX_MB_PLANE << 2]; 43 int best_mode_index; 44 int hybrid_pred_diff; 45 int comp_pred_diff; 46 int single_pred_diff; 47 int64_t tx_rd_diff[TX_MODES]; 48 int64_t best_filter_diff[SWITCHABLE_FILTER_CONTEXTS]; 49 50 // TODO(jingning) Use RD_COST struct here instead. This involves a boarder 51 // scope of refactoring. 52 int rate; 53 int64_t dist; 54 55 #if CONFIG_VP9_TEMPORAL_DENOISING 56 unsigned int newmv_sse; 57 unsigned int zeromv_sse; 58 PREDICTION_MODE best_sse_inter_mode; 59 int_mv best_sse_mv; 60 MV_REFERENCE_FRAME best_reference_frame; 61 MV_REFERENCE_FRAME best_zeromv_reference_frame; 62 #endif 63 64 // motion vector cache for adaptive motion search control in partition 65 // search loop 66 MV pred_mv[MAX_REF_FRAMES]; 67 INTERP_FILTER pred_interp_filter; 68 } PICK_MODE_CONTEXT; 69 70 typedef struct PC_TREE { 71 int index; 72 PARTITION_TYPE partitioning; 73 BLOCK_SIZE block_size; 74 PICK_MODE_CONTEXT none; 75 PICK_MODE_CONTEXT horizontal[2]; 76 PICK_MODE_CONTEXT vertical[2]; 77 union { 78 struct PC_TREE *split[4]; 79 PICK_MODE_CONTEXT *leaf_split[4]; 80 }; 81 } PC_TREE; 82 83 void vp9_setup_pc_tree(struct VP9Common *cm, struct ThreadData *td); 84 void vp9_free_pc_tree(struct ThreadData *td); 85 86 #endif /* VP9_ENCODER_VP9_CONTEXT_TREE_H_ */ 87