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 16struct VP9_COMP; 17 18// Structure to hold snapshot of coding context during the mode picking process 19typedef struct { 20 MODE_INFO mic; 21 uint8_t *zcoeff_blk; 22 tran_low_t *coeff[MAX_MB_PLANE][3]; 23 tran_low_t *qcoeff[MAX_MB_PLANE][3]; 24 tran_low_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 tran_low_t *coeff_pbuf[MAX_MB_PLANE][3]; 29 tran_low_t *qcoeff_pbuf[MAX_MB_PLANE][3]; 30 tran_low_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 // For current partition, only if all Y, U, and V transform blocks' 37 // coefficients are quantized to 0, skippable is set to 0. 38 int skippable; 39 uint8_t skip_txfm[MAX_MB_PLANE << 2]; 40 int best_mode_index; 41 int hybrid_pred_diff; 42 int comp_pred_diff; 43 int single_pred_diff; 44 int64_t tx_rd_diff[TX_MODES]; 45 int64_t best_filter_diff[SWITCHABLE_FILTER_CONTEXTS]; 46 47#if CONFIG_VP9_TEMPORAL_DENOISING 48 unsigned int newmv_sse; 49 unsigned int zeromv_sse; 50 PREDICTION_MODE best_sse_inter_mode; 51 int_mv best_sse_mv; 52 MV_REFERENCE_FRAME best_reference_frame; 53 MV_REFERENCE_FRAME best_zeromv_reference_frame; 54#endif 55 56 // motion vector cache for adaptive motion search control in partition 57 // search loop 58 MV pred_mv[MAX_REF_FRAMES]; 59 INTERP_FILTER pred_interp_filter; 60} PICK_MODE_CONTEXT; 61 62typedef struct PC_TREE { 63 int index; 64 PARTITION_TYPE partitioning; 65 BLOCK_SIZE block_size; 66 PICK_MODE_CONTEXT none; 67 PICK_MODE_CONTEXT horizontal[2]; 68 PICK_MODE_CONTEXT vertical[2]; 69 union { 70 struct PC_TREE *split[4]; 71 PICK_MODE_CONTEXT *leaf_split[4]; 72 }; 73} PC_TREE; 74 75void vp9_setup_pc_tree(struct VP9Common *cm, struct VP9_COMP *cpi); 76void vp9_free_pc_tree(struct VP9_COMP *cpi); 77 78#endif /* VP9_ENCODER_VP9_CONTEXT_TREE_H_ */ 79