global_motion.h 2.54 KB
Newer Older
1
/*
2
 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
3
 *
4
5
6
7
8
9
 * This source code is subject to the terms of the BSD 2 Clause License and
 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
 * was not distributed with this source code in the LICENSE file, you can
 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
 * Media Patent License 1.0 was not distributed with this source code in the
 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10
11
 */

Yaowu Xu's avatar
Yaowu Xu committed
12
13
#ifndef AV1_ENCODER_GLOBAL_MOTION_H_
#define AV1_ENCODER_GLOBAL_MOTION_H_
14

Yaowu Xu's avatar
Yaowu Xu committed
15
#include "aom/aom_integer.h"
16
17
#include "aom_scale/yv12config.h"
#include "av1/common/mv.h"
18
19
20
21
22

#ifdef __cplusplus
extern "C" {
#endif

23
extern const double gm_advantage_thresh[TRANS_TYPES];
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

void convert_to_params(const double *params, int32_t *model);

void convert_model_to_params(const double *params, WarpedMotionParams *model);

// Adds some offset to a global motion parameter and handles
// all of the necessary precision shifts, clamping, and
// zero-centering.
int32_t add_param_offset(int param_index, int32_t param_value, int32_t offset);

void force_wmtype(WarpedMotionParams *wm, TransformationType wmtype);

double refine_integerized_param(WarpedMotionParams *wm,
                                TransformationType wmtype,
#if CONFIG_AOM_HIGHBITDEPTH
                                int use_hbd, int bd,
#endif  // CONFIG_AOM_HIGHBITDEPTH
                                uint8_t *ref, int r_width, int r_height,
                                int r_stride, uint8_t *dst, int d_width,
                                int d_height, int d_stride, int n_refinements);

Sarah Parker's avatar
Sarah Parker committed
45
46
47
48
49
50
51
52
53
54
55
/*
  Computes global motion parameters between two frames. The array
  "params" should be length 9, where the first 2 slots are translation
  parameters in (row, col) order, and the remaining slots correspond
  to values in the transformation matrix of the corresponding motion
  model. They are arranged in "params" such that values on the tx-matrix
  diagonal have odd numbered indices so the folowing matrix:
  A | B
  C | D
  would produce params = [trans row, trans col, B, A, C, D]
*/
56
int compute_global_motion_feature_based(TransformationType type,
57
58
                                        YV12_BUFFER_CONFIG *frm,
                                        YV12_BUFFER_CONFIG *ref,
59
60
61
#if CONFIG_AOM_HIGHBITDEPTH
                                        int bit_depth,
#endif
62
                                        double *params);
63
64
65
#ifdef __cplusplus
}  // extern "C"
#endif
Yaowu Xu's avatar
Yaowu Xu committed
66
#endif  // AV1_ENCODER_GLOBAL_MOTION_H_