vp9_mcomp.h 5.63 KB
Newer Older
John Koleszar's avatar
John Koleszar committed
1
/*
2
 *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
John Koleszar's avatar
John Koleszar committed
3
 *
4
 *  Use of this source code is governed by a BSD-style license
5
6
 *  that can be found in the LICENSE file in the root of the source
 *  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.
John Koleszar's avatar
John Koleszar committed
9
10
11
 */


12
13
#ifndef VP9_ENCODER_VP9_MCOMP_H_
#define VP9_ENCODER_VP9_MCOMP_H_
John Koleszar's avatar
John Koleszar committed
14

15
16
#include "vp9/encoder/vp9_block.h"
#include "vp9/encoder/vp9_variance.h"
John Koleszar's avatar
John Koleszar committed
17

18
19
20
21
#ifdef __cplusplus
extern "C" {
#endif

22
23
// The maximum number of steps in a step search given the largest
// allowed initial step
24
#define MAX_MVSEARCH_STEPS 11
25
26
27
// Max full pel mv specified in the unit of full pixel
// Enable the use of motion vector in range [-1023, 1023].
#define MAX_FULL_PEL_VAL ((1 << (MAX_MVSEARCH_STEPS - 1)) - 1)
28
29
// Maximum size of the first step in full pel units
#define MAX_FIRST_STEP (1 << (MAX_MVSEARCH_STEPS-1))
30
31
32
33
// Allowed motion vector pixel distance outside image border
// for Block_16x16
#define BORDER_MV_PIXELS_B16 (16 + VP9_INTERP_EXTEND)

34
35
36
37
38
39
40
41
42
43
44
45
46
47
// motion search site
typedef struct search_site {
  MV mv;
  int offset;
} search_site;

typedef struct search_site_config {
  search_site ss[8 * MAX_MVSEARCH_STEPS + 1];
  int ss_count;
  int searches_per_step;
} search_site_config;

void vp9_init_dsmotion_compensation(search_site_config *cfg, int stride);
void vp9_init3smotion_compensation(search_site_config *cfg,  int stride);
John Koleszar's avatar
John Koleszar committed
48

Dmitry Kovalev's avatar
Dmitry Kovalev committed
49
void vp9_set_mv_search_range(MACROBLOCK *x, const MV *mv);
Dmitry Kovalev's avatar
Dmitry Kovalev committed
50
51
int vp9_mv_bit_cost(const MV *mv, const MV *ref,
                    const int *mvjcost, int *mvcost[2], int weight);
Deb Mukherjee's avatar
Deb Mukherjee committed
52
53
54

// Utility to compute variance + MV rate cost for a given MV
int vp9_get_mvpred_var(const MACROBLOCK *x,
55
                       const MV *best_mv, const MV *center_mv,
Deb Mukherjee's avatar
Deb Mukherjee committed
56
57
58
                       const vp9_variance_fn_ptr_t *vfp,
                       int use_mvcost);
int vp9_get_mvpred_av_var(const MACROBLOCK *x,
59
                          const MV *best_mv, const MV *center_mv,
Deb Mukherjee's avatar
Deb Mukherjee committed
60
61
62
                          const uint8_t *second_pred,
                          const vp9_variance_fn_ptr_t *vfp,
                          int use_mvcost);
Dmitry Kovalev's avatar
Dmitry Kovalev committed
63

64
struct VP9_COMP;
65
66
struct SPEED_FEATURES;

67
int vp9_init_search_range(int size);
68
69

// Runs sequence of diamond searches in smaller steps for RD
Deb Mukherjee's avatar
Deb Mukherjee committed
70
int vp9_full_pixel_diamond(const struct VP9_COMP *cpi, MACROBLOCK *x,
Dmitry Kovalev's avatar
Dmitry Kovalev committed
71
                           MV *mvp_full, int step_param,
72
                           int sadpb, int further_steps, int do_refine,
73
                           int *cost_list,
74
                           const vp9_variance_fn_ptr_t *fn_ptr,
75
                           const MV *ref_mv, MV *dst_mv);
John Koleszar's avatar
John Koleszar committed
76

Deb Mukherjee's avatar
Deb Mukherjee committed
77
78
79
80
81
82
typedef int (integer_mv_pattern_search_fn) (
    const MACROBLOCK *x,
    MV *ref_mv,
    int search_param,
    int error_per_bit,
    int do_init_search,
83
    int *cost_list,
Deb Mukherjee's avatar
Deb Mukherjee committed
84
85
86
87
88
89
90
91
92
    const vp9_variance_fn_ptr_t *vf,
    int use_mvcost,
    const MV *center_mv,
    MV *best_mv);

integer_mv_pattern_search_fn vp9_hex_search;
integer_mv_pattern_search_fn vp9_bigdia_search;
integer_mv_pattern_search_fn vp9_square_search;
integer_mv_pattern_search_fn vp9_fast_hex_search;
93
integer_mv_pattern_search_fn vp9_fast_dia_search;
John Koleszar's avatar
John Koleszar committed
94

95
typedef int (fractional_mv_step_fp) (
Dmitry Kovalev's avatar
Dmitry Kovalev committed
96
    const MACROBLOCK *x,
97
    MV *bestmv, const MV *ref_mv,
98
    int allow_hp,
99
100
101
102
    int error_per_bit,
    const vp9_variance_fn_ptr_t *vfp,
    int forced_stop,  // 0 - full, 1 - qtr only, 2 - half only
    int iters_per_step,
103
    int *cost_list,
104
105
106
107
    int *mvjcost, int *mvcost[2],
    int *distortion, unsigned int *sse1,
    const uint8_t *second_pred,
    int w, int h);
108

109
extern fractional_mv_step_fp vp9_find_best_sub_pixel_tree;
110
extern fractional_mv_step_fp vp9_find_best_sub_pixel_tree_pruned;
111
extern fractional_mv_step_fp vp9_find_best_sub_pixel_tree_pruned_more;
112
extern fractional_mv_step_fp vp9_find_best_sub_pixel_tree_pruned_evenmore;
John Koleszar's avatar
John Koleszar committed
113

114
typedef int (*vp9_full_search_fn_t)(const MACROBLOCK *x,
115
116
117
                                    const MV *ref_mv, int sad_per_bit,
                                    int distance,
                                    const vp9_variance_fn_ptr_t *fn_ptr,
118
                                    const MV *center_mv, MV *best_mv);
Jim Bankoski's avatar
Jim Bankoski committed
119

120
typedef int (*vp9_refining_search_fn_t)(const MACROBLOCK *x,
121
                                        MV *ref_mv, int sad_per_bit,
Jim Bankoski's avatar
Jim Bankoski committed
122
                                        int distance,
123
                                        const vp9_variance_fn_ptr_t *fn_ptr,
124
                                        const MV *center_mv);
Jim Bankoski's avatar
Jim Bankoski committed
125

126
typedef int (*vp9_diamond_search_fn_t)(const MACROBLOCK *x,
127
                                       const search_site_config *cfg,
128
                                       MV *ref_mv, MV *best_mv,
Jim Bankoski's avatar
Jim Bankoski committed
129
130
                                       int search_param, int sad_per_bit,
                                       int *num00,
131
                                       const vp9_variance_fn_ptr_t *fn_ptr,
132
                                       const MV *center_mv);
John Koleszar's avatar
John Koleszar committed
133

134
int vp9_refining_search_8p_c(const MACROBLOCK *x,
135
                             MV *ref_mv, int error_per_bit,
136
137
                             int search_range,
                             const vp9_variance_fn_ptr_t *fn_ptr,
138
                             const MV *center_mv, const uint8_t *second_pred);
139
140
141
142
143
144

struct VP9_COMP;

int vp9_full_pixel_search(struct VP9_COMP *cpi, MACROBLOCK *x,
                          BLOCK_SIZE bsize, MV *mvp_full,
                          int step_param, int error_per_bit,
145
                          int *cost_list,
146
147
                          const MV *ref_mv, MV *tmp_mv,
                          int var_max, int rd);
148

149
150
151
152
#ifdef __cplusplus
}  // extern "C"
#endif

153
#endif  // VP9_ENCODER_VP9_MCOMP_H_