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_onyxc_int.h" 15 16 struct VP9_COMP; 17 18 // Structure to hold snapshot of coding context during the mode picking process 19 typedef struct { 20 MODE_INFO mic; 21 uint8_t *zcoeff_blk; 22 int16_t *coeff[MAX_MB_PLANE][3]; 23 int16_t *qcoeff[MAX_MB_PLANE][3]; 24 int16_t *dqcoeff[MAX_MB_PLANE][3]; 25 uint16_t *eobs[MAX_MB_PLANE][3]; 26 27 // dual buffer pointers, 0: in use, 1: best in store 28 int16_t *coeff_pbuf[MAX_MB_PLANE][3]; 29 int16_t *qcoeff_pbuf[MAX_MB_PLANE][3]; 30 int16_t *dqcoeff_pbuf[MAX_MB_PLANE][3]; 31 uint16_t *eobs_pbuf[MAX_MB_PLANE][3]; 32 33 int is_coded; 34 int num_4x4_blk; 35 int skip; 36 int skip_txfm[MAX_MB_PLANE]; 37 int best_mode_index; 38 int hybrid_pred_diff; 39 int comp_pred_diff; 40 int single_pred_diff; 41 int64_t tx_rd_diff[TX_MODES]; 42 int64_t best_filter_diff[SWITCHABLE_FILTER_CONTEXTS]; 43 44 #if CONFIG_VP9_TEMPORAL_DENOISING 45 unsigned int newmv_sse; 46 unsigned int zeromv_sse; 47 PREDICTION_MODE best_sse_inter_mode; 48 int_mv best_sse_mv; 49 MV_REFERENCE_FRAME best_reference_frame; 50 MV_REFERENCE_FRAME best_zeromv_reference_frame; 51 #endif 52 53 // motion vector cache for adaptive motion search control in partition 54 // search loop 55 MV pred_mv[MAX_REF_FRAMES]; 56 INTERP_FILTER pred_interp_filter; 57 } PICK_MODE_CONTEXT; 58 59 typedef struct PC_TREE { 60 int index; 61 PARTITION_TYPE partitioning; 62 BLOCK_SIZE block_size; 63 PICK_MODE_CONTEXT none; 64 PICK_MODE_CONTEXT horizontal[2]; 65 PICK_MODE_CONTEXT vertical[2]; 66 union { 67 struct PC_TREE *split[4]; 68 PICK_MODE_CONTEXT *leaf_split[4]; 69 }; 70 } PC_TREE; 71 72 void vp9_setup_pc_tree(struct VP9Common *cm, struct VP9_COMP *cpi); 73 void vp9_free_pc_tree(struct VP9_COMP *cpi); 74 75 #endif /* VP9_ENCODER_VP9_CONTEXT_TREE_H_ */ 76