vp9_mcomp.h 5.46 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
67
int vp9_init_search_range(struct VP9_COMP *cpi, int size);

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

Deb Mukherjee's avatar
Deb Mukherjee committed
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
typedef int (integer_mv_pattern_search_fn) (
    const MACROBLOCK *x,
    MV *ref_mv,
    int search_param,
    int error_per_bit,
    int do_init_search,
    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;
89
integer_mv_pattern_search_fn vp9_fast_dia_search;
John Koleszar's avatar
John Koleszar committed
90

91
typedef int (fractional_mv_step_fp) (
Dmitry Kovalev's avatar
Dmitry Kovalev committed
92
    const MACROBLOCK *x,
93
    MV *bestmv, const MV *ref_mv,
94
    int allow_hp,
95
96
97
98
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,
    int *mvjcost,
    int *mvcost[2],
    int *distortion,
    unsigned int *sse);
103

104
105
106
extern fractional_mv_step_fp vp9_find_best_sub_pixel_tree;

typedef int (fractional_mv_step_comp_fp) (
Dmitry Kovalev's avatar
Dmitry Kovalev committed
107
    const MACROBLOCK *x,
108
    MV *bestmv, const MV *ref_mv,
109
    int allow_hp,
110
111
112
113
114
115
116
117
    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,
    int *mvjcost, int *mvcost[2],
    int *distortion, unsigned int *sse1,
    const uint8_t *second_pred,
    int w, int h);
118

119
extern fractional_mv_step_comp_fp vp9_find_best_sub_pixel_comp_tree;
John Koleszar's avatar
John Koleszar committed
120

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

127
typedef int (*vp9_refining_search_fn_t)(const MACROBLOCK *x,
128
                                        MV *ref_mv, int sad_per_bit,
Jim Bankoski's avatar
Jim Bankoski committed
129
                                        int distance,
130
                                        const vp9_variance_fn_ptr_t *fn_ptr,
131
                                        const MV *center_mv);
Jim Bankoski's avatar
Jim Bankoski committed
132

133
typedef int (*vp9_diamond_search_fn_t)(const MACROBLOCK *x,
134
                                       const search_site_config *cfg,
135
                                       MV *ref_mv, MV *best_mv,
Jim Bankoski's avatar
Jim Bankoski committed
136
137
                                       int search_param, int sad_per_bit,
                                       int *num00,
138
                                       const vp9_variance_fn_ptr_t *fn_ptr,
139
                                       const MV *center_mv);
John Koleszar's avatar
John Koleszar committed
140

141
int vp9_refining_search_8p_c(const MACROBLOCK *x,
142
                             MV *ref_mv, int error_per_bit,
143
144
                             int search_range,
                             const vp9_variance_fn_ptr_t *fn_ptr,
145
                             const MV *center_mv, const uint8_t *second_pred,
146
                             int w, int h);
147
148
149
150
#ifdef __cplusplus
}  // extern "C"
#endif

151
#endif  // VP9_ENCODER_VP9_MCOMP_H_