1*fb1b10abSAndroid Build Coastguard Worker /* 2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2014 The WebM project authors. All Rights Reserved. 3*fb1b10abSAndroid Build Coastguard Worker * 4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*fb1b10abSAndroid Build Coastguard Worker */ 10*fb1b10abSAndroid Build Coastguard Worker 11*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_VP9_ENCODER_VP9_CONTEXT_TREE_H_ 12*fb1b10abSAndroid Build Coastguard Worker #define VPX_VP9_ENCODER_VP9_CONTEXT_TREE_H_ 13*fb1b10abSAndroid Build Coastguard Worker 14*fb1b10abSAndroid Build Coastguard Worker #include "vp9/common/vp9_blockd.h" 15*fb1b10abSAndroid Build Coastguard Worker #include "vp9/encoder/vp9_block.h" 16*fb1b10abSAndroid Build Coastguard Worker 17*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 18*fb1b10abSAndroid Build Coastguard Worker extern "C" { 19*fb1b10abSAndroid Build Coastguard Worker #endif 20*fb1b10abSAndroid Build Coastguard Worker 21*fb1b10abSAndroid Build Coastguard Worker struct VP9_COMP; 22*fb1b10abSAndroid Build Coastguard Worker struct VP9Common; 23*fb1b10abSAndroid Build Coastguard Worker struct ThreadData; 24*fb1b10abSAndroid Build Coastguard Worker 25*fb1b10abSAndroid Build Coastguard Worker // Structure to hold snapshot of coding context during the mode picking process 26*fb1b10abSAndroid Build Coastguard Worker typedef struct { 27*fb1b10abSAndroid Build Coastguard Worker MODE_INFO mic; 28*fb1b10abSAndroid Build Coastguard Worker MB_MODE_INFO_EXT mbmi_ext; 29*fb1b10abSAndroid Build Coastguard Worker uint8_t *zcoeff_blk; 30*fb1b10abSAndroid Build Coastguard Worker tran_low_t *coeff[MAX_MB_PLANE][3]; 31*fb1b10abSAndroid Build Coastguard Worker tran_low_t *qcoeff[MAX_MB_PLANE][3]; 32*fb1b10abSAndroid Build Coastguard Worker tran_low_t *dqcoeff[MAX_MB_PLANE][3]; 33*fb1b10abSAndroid Build Coastguard Worker uint16_t *eobs[MAX_MB_PLANE][3]; 34*fb1b10abSAndroid Build Coastguard Worker 35*fb1b10abSAndroid Build Coastguard Worker // dual buffer pointers, 0: in use, 1: best in store 36*fb1b10abSAndroid Build Coastguard Worker tran_low_t *coeff_pbuf[MAX_MB_PLANE][3]; 37*fb1b10abSAndroid Build Coastguard Worker tran_low_t *qcoeff_pbuf[MAX_MB_PLANE][3]; 38*fb1b10abSAndroid Build Coastguard Worker tran_low_t *dqcoeff_pbuf[MAX_MB_PLANE][3]; 39*fb1b10abSAndroid Build Coastguard Worker uint16_t *eobs_pbuf[MAX_MB_PLANE][3]; 40*fb1b10abSAndroid Build Coastguard Worker 41*fb1b10abSAndroid Build Coastguard Worker int is_coded; 42*fb1b10abSAndroid Build Coastguard Worker int num_4x4_blk; 43*fb1b10abSAndroid Build Coastguard Worker int skip; 44*fb1b10abSAndroid Build Coastguard Worker int pred_pixel_ready; 45*fb1b10abSAndroid Build Coastguard Worker // For current partition, only if all Y, U, and V transform blocks' 46*fb1b10abSAndroid Build Coastguard Worker // coefficients are quantized to 0, skippable is set to 0. 47*fb1b10abSAndroid Build Coastguard Worker int skippable; 48*fb1b10abSAndroid Build Coastguard Worker uint8_t skip_txfm[MAX_MB_PLANE << 2]; 49*fb1b10abSAndroid Build Coastguard Worker int best_mode_index; 50*fb1b10abSAndroid Build Coastguard Worker int hybrid_pred_diff; 51*fb1b10abSAndroid Build Coastguard Worker int comp_pred_diff; 52*fb1b10abSAndroid Build Coastguard Worker int single_pred_diff; 53*fb1b10abSAndroid Build Coastguard Worker int64_t best_filter_diff[SWITCHABLE_FILTER_CONTEXTS]; 54*fb1b10abSAndroid Build Coastguard Worker 55*fb1b10abSAndroid Build Coastguard Worker // TODO(jingning) Use RD_COST struct here instead. This involves a boarder 56*fb1b10abSAndroid Build Coastguard Worker // scope of refactoring. 57*fb1b10abSAndroid Build Coastguard Worker int rate; 58*fb1b10abSAndroid Build Coastguard Worker int64_t dist; 59*fb1b10abSAndroid Build Coastguard Worker int64_t rdcost; 60*fb1b10abSAndroid Build Coastguard Worker 61*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_TEMPORAL_DENOISING 62*fb1b10abSAndroid Build Coastguard Worker unsigned int newmv_sse; 63*fb1b10abSAndroid Build Coastguard Worker unsigned int zeromv_sse; 64*fb1b10abSAndroid Build Coastguard Worker unsigned int zeromv_lastref_sse; 65*fb1b10abSAndroid Build Coastguard Worker PREDICTION_MODE best_sse_inter_mode; 66*fb1b10abSAndroid Build Coastguard Worker int_mv best_sse_mv; 67*fb1b10abSAndroid Build Coastguard Worker MV_REFERENCE_FRAME best_reference_frame; 68*fb1b10abSAndroid Build Coastguard Worker MV_REFERENCE_FRAME best_zeromv_reference_frame; 69*fb1b10abSAndroid Build Coastguard Worker int sb_skip_denoising; 70*fb1b10abSAndroid Build Coastguard Worker #endif 71*fb1b10abSAndroid Build Coastguard Worker 72*fb1b10abSAndroid Build Coastguard Worker // motion vector cache for adaptive motion search control in partition 73*fb1b10abSAndroid Build Coastguard Worker // search loop 74*fb1b10abSAndroid Build Coastguard Worker MV pred_mv[MAX_REF_FRAMES]; 75*fb1b10abSAndroid Build Coastguard Worker INTERP_FILTER pred_interp_filter; 76*fb1b10abSAndroid Build Coastguard Worker 77*fb1b10abSAndroid Build Coastguard Worker // Used for the machine learning-based early termination 78*fb1b10abSAndroid Build Coastguard Worker int32_t sum_y_eobs; 79*fb1b10abSAndroid Build Coastguard Worker // Skip certain ref frames during RD search of rectangular partitions. 80*fb1b10abSAndroid Build Coastguard Worker uint8_t skip_ref_frame_mask; 81*fb1b10abSAndroid Build Coastguard Worker } PICK_MODE_CONTEXT; 82*fb1b10abSAndroid Build Coastguard Worker 83*fb1b10abSAndroid Build Coastguard Worker typedef struct PC_TREE { 84*fb1b10abSAndroid Build Coastguard Worker int index; 85*fb1b10abSAndroid Build Coastguard Worker PARTITION_TYPE partitioning; 86*fb1b10abSAndroid Build Coastguard Worker BLOCK_SIZE block_size; 87*fb1b10abSAndroid Build Coastguard Worker PICK_MODE_CONTEXT none; 88*fb1b10abSAndroid Build Coastguard Worker PICK_MODE_CONTEXT horizontal[2]; 89*fb1b10abSAndroid Build Coastguard Worker PICK_MODE_CONTEXT vertical[2]; 90*fb1b10abSAndroid Build Coastguard Worker union { 91*fb1b10abSAndroid Build Coastguard Worker struct PC_TREE *split[4]; 92*fb1b10abSAndroid Build Coastguard Worker PICK_MODE_CONTEXT *leaf_split[4]; 93*fb1b10abSAndroid Build Coastguard Worker } u; 94*fb1b10abSAndroid Build Coastguard Worker // Obtained from a simple motion search. Used by the ML based partition search 95*fb1b10abSAndroid Build Coastguard Worker // speed feature. 96*fb1b10abSAndroid Build Coastguard Worker MV mv; 97*fb1b10abSAndroid Build Coastguard Worker } PC_TREE; 98*fb1b10abSAndroid Build Coastguard Worker 99*fb1b10abSAndroid Build Coastguard Worker void vp9_setup_pc_tree(struct VP9Common *cm, struct ThreadData *td); 100*fb1b10abSAndroid Build Coastguard Worker void vp9_free_pc_tree(struct ThreadData *td); 101*fb1b10abSAndroid Build Coastguard Worker 102*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 103*fb1b10abSAndroid Build Coastguard Worker } // extern "C" 104*fb1b10abSAndroid Build Coastguard Worker #endif 105*fb1b10abSAndroid Build Coastguard Worker 106*fb1b10abSAndroid Build Coastguard Worker #endif // VPX_VP9_ENCODER_VP9_CONTEXT_TREE_H_ 107