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