1ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian/* 2ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * 4ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * Use of this source code is governed by a BSD-style license 5ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * that can be found in the LICENSE file in the root of the source 6ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * tree. An additional intellectual property rights grant can be found 7ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * in the file PATENTS. All contributing project authors may 8ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * be found in the AUTHORS file in the root of the source tree. 9ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian */ 10ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 11ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifndef VP9_ENCODER_VP9_RD_H_ 12ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define VP9_ENCODER_VP9_RD_H_ 13ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 14ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include <limits.h> 15ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 16ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "vp9/common/vp9_blockd.h" 17ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 18ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "vp9/encoder/vp9_block.h" 19ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "vp9/encoder/vp9_context_tree.h" 2068e1c830ade592be74773e249bf94e2bbfb50de7Johann#include "vp9/encoder/vp9_cost.h" 21ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 22ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifdef __cplusplus 23ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianextern "C" { 24ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif 25ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 267bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define RDDIV_BITS 7 277bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define RD_EPB_SHIFT 6 28ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 29ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define RDCOST(RM, DM, R, D) \ 3068e1c830ade592be74773e249bf94e2bbfb50de7Johann (ROUND_POWER_OF_TWO(((int64_t)R) * (RM), VP9_PROB_COST_SHIFT) + (D << DM)) 317bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define QIDX_SKIP_THRESH 115 32ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 337bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define MV_COST_WEIGHT 108 347bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define MV_COST_WEIGHT_SUB 120 35ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 36ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define INVALID_MV 0x80008000 37ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 38ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define MAX_MODES 30 397bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define MAX_REFS 6 40ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 418b92989c89bec8632aa47dc58dc162f199d62edcJames Zern#define RD_THRESH_INIT_FACT 32 427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#define RD_THRESH_MAX_FACT 64 437bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define RD_THRESH_INC 1 447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 45ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// This enumerator type needs to be kept aligned with the mode order in 46ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// const MODE_DEFINITION vp9_mode_order[MAX_MODES] used in the rd code. 47ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniantypedef enum { 48ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_NEARESTMV, 49ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_NEARESTA, 50ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_NEARESTG, 51ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 52ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_DC, 53ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 54ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_NEWMV, 55ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_NEWA, 56ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_NEWG, 57ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 58ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_NEARMV, 59ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_NEARA, 607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian THR_NEARG, 617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian THR_ZEROMV, 637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian THR_ZEROG, 647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian THR_ZEROA, 657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 66ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_COMP_NEARESTLA, 67ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_COMP_NEARESTGA, 68ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 69ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_TM, 70ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 71ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_COMP_NEARLA, 72ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_COMP_NEWLA, 73ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_COMP_NEARGA, 74ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_COMP_NEWGA, 75ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 76ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_COMP_ZEROLA, 77ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_COMP_ZEROGA, 78ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 79ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_H_PRED, 80ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_V_PRED, 81ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_D135_PRED, 82ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_D207_PRED, 83ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_D153_PRED, 84ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_D63_PRED, 85ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_D117_PRED, 86ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_D45_PRED, 87ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} THR_MODES; 88ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 89ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniantypedef enum { 90ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_LAST, 91ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_GOLD, 92ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_ALTR, 93ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_COMP_LA, 94ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_COMP_GA, 95ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian THR_INTRA, 96ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} THR_MODES_SUB8X8; 97ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 98ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniantypedef struct RD_OPT { 99ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian // Thresh_mult is used to set a threshold for the rd score. A higher value 100ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian // means that we will accept the best mode so far more often. This number 101ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian // is used in combination with the current block size, and thresh_freq_fact 102ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian // to pick a threshold. 103ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int thresh_mult[MAX_MODES]; 104ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int thresh_mult_sub8x8[MAX_REFS]; 105ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 106ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int threshes[MAX_SEGMENTS][BLOCK_SIZES][MAX_MODES]; 107ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 108ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int64_t prediction_type_threshes[MAX_REF_FRAMES][REFERENCE_MODES]; 109ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 110ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int64_t filter_threshes[MAX_REF_FRAMES][SWITCHABLE_FILTER_CONTEXTS]; 111ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 112ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int RDMULT; 113ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int RDDIV; 114ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} RD_OPT; 115ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 1167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramaniantypedef struct RD_COST { 1177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int rate; 1187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int64_t dist; 1197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int64_t rdcost; 1207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} RD_COST; 1217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// Reset the rate distortion cost values to maximum (invalid) value. 1237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vp9_rd_cost_reset(RD_COST *rd_cost); 1247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// Initialize the rate distortion cost values to zero. 1257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vp9_rd_cost_init(RD_COST *rd_cost); 1267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 127ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianstruct TileInfo; 1287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstruct TileDataEnc; 129ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianstruct VP9_COMP; 130ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianstruct macroblock; 131ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 1328b92989c89bec8632aa47dc58dc162f199d62edcJames Zernint64_t vp9_compute_rd_mult_based_on_qindex(const struct VP9_COMP *cpi, 1338b92989c89bec8632aa47dc58dc162f199d62edcJames Zern int qindex); 1348b92989c89bec8632aa47dc58dc162f199d62edcJames Zern 135ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint vp9_compute_rd_mult(const struct VP9_COMP *cpi, int qindex); 136ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 137ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid vp9_initialize_rd_consts(struct VP9_COMP *cpi); 138ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 1397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vp9_initialize_me_consts(struct VP9_COMP *cpi, MACROBLOCK *x, int qindex); 140ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 141ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid vp9_model_rd_from_var_lapndz(unsigned int var, unsigned int n, 1427bc9febe8749e98a3812a0dc4380ceae75c29450Johann unsigned int qstep, int *rate, int64_t *dist); 143ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 1448b92989c89bec8632aa47dc58dc162f199d62edcJames Zernvoid vp9_model_rd_from_var_lapndz_vec(unsigned int var[MAX_MB_PLANE], 1458b92989c89bec8632aa47dc58dc162f199d62edcJames Zern unsigned int n_log2[MAX_MB_PLANE], 1468b92989c89bec8632aa47dc58dc162f199d62edcJames Zern unsigned int qstep[MAX_MB_PLANE], 1478b92989c89bec8632aa47dc58dc162f199d62edcJames Zern int64_t *rate_sum, int64_t *dist_sum); 1488b92989c89bec8632aa47dc58dc162f199d62edcJames Zern 1497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianint vp9_get_switchable_rate(const struct VP9_COMP *cpi, 1507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const MACROBLOCKD *const xd); 1517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1527bc9febe8749e98a3812a0dc4380ceae75c29450Johannint vp9_raster_block_offset(BLOCK_SIZE plane_bsize, int raster_block, 1537bc9febe8749e98a3812a0dc4380ceae75c29450Johann int stride); 154ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 1557bc9febe8749e98a3812a0dc4380ceae75c29450Johannint16_t *vp9_raster_block_offset_int16(BLOCK_SIZE plane_bsize, int raster_block, 1567bc9febe8749e98a3812a0dc4380ceae75c29450Johann int16_t *base); 157ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 1587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianYV12_BUFFER_CONFIG *vp9_get_scaled_ref_frame(const struct VP9_COMP *cpi, 1597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int ref_frame); 1607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vp9_init_me_luts(void); 162ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 163ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid vp9_get_entropy_contexts(BLOCK_SIZE bsize, TX_SIZE tx_size, 164ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const struct macroblockd_plane *pd, 165ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ENTROPY_CONTEXT t_above[16], 166ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ENTROPY_CONTEXT t_left[16]); 167ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 168ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid vp9_set_rd_speed_thresholds(struct VP9_COMP *cpi); 169ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 170ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid vp9_set_rd_speed_thresholds_sub8x8(struct VP9_COMP *cpi); 171ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 1727bc9febe8749e98a3812a0dc4380ceae75c29450Johannvoid vp9_update_rd_thresh_fact(int (*fact)[MAX_MODES], int rd_thresh, int bsize, 1737bc9febe8749e98a3812a0dc4380ceae75c29450Johann int best_mode_index); 1747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 175ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianstatic INLINE int rd_less_than_thresh(int64_t best_rd, int thresh, 1768b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int *const thresh_fact) { 1778b92989c89bec8632aa47dc58dc162f199d62edcJames Zern return best_rd < ((int64_t)thresh * (*thresh_fact) >> 5) || thresh == INT_MAX; 178ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} 179ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 18068e1c830ade592be74773e249bf94e2bbfb50de7Johannstatic INLINE void set_error_per_bit(MACROBLOCK *x, int rdmult) { 18168e1c830ade592be74773e249bf94e2bbfb50de7Johann x->errorperbit = rdmult >> RD_EPB_SHIFT; 18268e1c830ade592be74773e249bf94e2bbfb50de7Johann x->errorperbit += (x->errorperbit == 0); 18368e1c830ade592be74773e249bf94e2bbfb50de7Johann} 18468e1c830ade592be74773e249bf94e2bbfb50de7Johann 1857bc9febe8749e98a3812a0dc4380ceae75c29450Johannvoid vp9_mv_pred(struct VP9_COMP *cpi, MACROBLOCK *x, uint8_t *ref_y_buffer, 1867bc9febe8749e98a3812a0dc4380ceae75c29450Johann int ref_y_stride, int ref_frame, BLOCK_SIZE block_size); 187ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 188ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid vp9_setup_pred_block(const MACROBLOCKD *xd, 189ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian struct buf_2d dst[MAX_MB_PLANE], 1907bc9febe8749e98a3812a0dc4380ceae75c29450Johann const YV12_BUFFER_CONFIG *src, int mi_row, int mi_col, 191ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const struct scale_factors *scale, 192ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const struct scale_factors *scale_uv); 1937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianint vp9_get_intra_cost_penalty(int qindex, int qdelta, 1957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_bit_depth_t bit_depth); 1967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 19768e1c830ade592be74773e249bf94e2bbfb50de7Johannunsigned int vp9_get_sby_perpixel_variance(struct VP9_COMP *cpi, 19868e1c830ade592be74773e249bf94e2bbfb50de7Johann const struct buf_2d *ref, 19968e1c830ade592be74773e249bf94e2bbfb50de7Johann BLOCK_SIZE bs); 20068e1c830ade592be74773e249bf94e2bbfb50de7Johann#if CONFIG_VP9_HIGHBITDEPTH 20168e1c830ade592be74773e249bf94e2bbfb50de7Johannunsigned int vp9_high_get_sby_perpixel_variance(struct VP9_COMP *cpi, 20268e1c830ade592be74773e249bf94e2bbfb50de7Johann const struct buf_2d *ref, 20368e1c830ade592be74773e249bf94e2bbfb50de7Johann BLOCK_SIZE bs, int bd); 20468e1c830ade592be74773e249bf94e2bbfb50de7Johann#endif 20568e1c830ade592be74773e249bf94e2bbfb50de7Johann 206ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifdef __cplusplus 207ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} // extern "C" 208ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif 209ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 210ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif // VP9_ENCODER_VP9_RD_H_ 211