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