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