1 /*
2  *  Copyright (c) 2010 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_RDOPT_H_
12 #define VP9_ENCODER_VP9_RDOPT_H_
13 
14 #include "vp9/common/vp9_blockd.h"
15 
16 #include "vp9/encoder/vp9_block.h"
17 #include "vp9/encoder/vp9_context_tree.h"
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 struct TileInfo;
24 struct VP9_COMP;
25 struct macroblock;
26 struct RD_COST;
27 
28 void vp9_rd_pick_intra_mode_sb(struct VP9_COMP *cpi, struct macroblock *x,
29                                struct RD_COST *rd_cost, BLOCK_SIZE bsize,
30                                PICK_MODE_CONTEXT *ctx, int64_t best_rd);
31 
32 unsigned int vp9_get_sby_perpixel_variance(VP9_COMP *cpi,
33                                            const struct buf_2d *ref,
34                                            BLOCK_SIZE bs);
35 #if CONFIG_VP9_HIGHBITDEPTH
36 unsigned int vp9_high_get_sby_perpixel_variance(VP9_COMP *cpi,
37                                                 const struct buf_2d *ref,
38                                                 BLOCK_SIZE bs, int bd);
39 #endif
40 
41 void vp9_rd_pick_inter_mode_sb(struct VP9_COMP *cpi,
42                                struct TileDataEnc *tile_data,
43                                struct macroblock *x,
44                                int mi_row, int mi_col,
45                                struct RD_COST *rd_cost,
46                                BLOCK_SIZE bsize, PICK_MODE_CONTEXT *ctx,
47                                int64_t best_rd_so_far);
48 
49 void vp9_rd_pick_inter_mode_sb_seg_skip(struct VP9_COMP *cpi,
50                                         struct TileDataEnc *tile_data,
51                                         struct macroblock *x,
52                                         struct RD_COST *rd_cost,
53                                         BLOCK_SIZE bsize,
54                                         PICK_MODE_CONTEXT *ctx,
55                                         int64_t best_rd_so_far);
56 
57 int vp9_internal_image_edge(struct VP9_COMP *cpi);
58 int vp9_active_h_edge(struct VP9_COMP *cpi, int mi_row, int mi_step);
59 int vp9_active_v_edge(struct VP9_COMP *cpi, int mi_col, int mi_step);
60 int vp9_active_edge_sb(struct VP9_COMP *cpi, int mi_row, int mi_col);
61 
62 void vp9_rd_pick_inter_mode_sub8x8(struct VP9_COMP *cpi,
63                                    struct TileDataEnc *tile_data,
64                                    struct macroblock *x,
65                                    int mi_row, int mi_col,
66                                    struct RD_COST *rd_cost,
67                                    BLOCK_SIZE bsize, PICK_MODE_CONTEXT *ctx,
68                                    int64_t best_rd_so_far);
69 
70 #ifdef __cplusplus
71 }  // extern "C"
72 #endif
73 
74 #endif  // VP9_ENCODER_VP9_RDOPT_H_
75