variance.h revision 7ce0a1d1337c01056ba24006efab21f00e179e04
1/*
2 *  Copyright (c) 2015 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 VPX_DSP_VARIANCE_H_
12#define VPX_DSP_VARIANCE_H_
13
14#include "./vpx_config.h"
15
16#include "vpx/vpx_integer.h"
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
22#define FILTER_BITS 7
23#define FILTER_WEIGHT 128
24
25typedef unsigned int(*vpx_sad_fn_t)(const uint8_t *a, int a_stride,
26                                    const uint8_t *b_ptr, int b_stride);
27
28typedef unsigned int(*vpx_sad_avg_fn_t)(const uint8_t *a_ptr, int a_stride,
29                                        const uint8_t *b_ptr, int b_stride,
30                                        const uint8_t *second_pred);
31
32typedef void (*vp8_copy32xn_fn_t)(const uint8_t *a, int a_stride,
33                                  uint8_t *b, int b_stride, int n);
34
35typedef void (*vpx_sad_multi_fn_t)(const uint8_t *a, int a_stride,
36                                   const uint8_t *b, int b_stride,
37                                   unsigned int *sad_array);
38
39typedef void (*vpx_sad_multi_d_fn_t)(const uint8_t *a, int a_stride,
40                                     const uint8_t *const b_array[],
41                                     int b_stride,
42                                     unsigned int *sad_array);
43
44typedef unsigned int (*vpx_variance_fn_t)(const uint8_t *a, int a_stride,
45                                          const uint8_t *b, int b_stride,
46                                          unsigned int *sse);
47
48typedef unsigned int (*vpx_subpixvariance_fn_t)(const uint8_t *a, int a_stride,
49                                                int xoffset, int yoffset,
50                                                const uint8_t *b, int b_stride,
51                                                unsigned int *sse);
52
53typedef unsigned int (*vpx_subp_avg_variance_fn_t)(const uint8_t *a_ptr,
54                                                   int a_stride,
55                                                   int xoffset, int yoffset,
56                                                   const uint8_t *b_ptr,
57                                                   int b_stride,
58                                                   unsigned int *sse,
59                                                   const uint8_t *second_pred);
60#if CONFIG_VP8
61typedef struct variance_vtable {
62  vpx_sad_fn_t            sdf;
63  vpx_variance_fn_t       vf;
64  vpx_subpixvariance_fn_t svf;
65  vpx_variance_fn_t       svf_halfpix_h;
66  vpx_variance_fn_t       svf_halfpix_v;
67  vpx_variance_fn_t       svf_halfpix_hv;
68  vpx_sad_multi_fn_t      sdx3f;
69  vpx_sad_multi_fn_t      sdx8f;
70  vpx_sad_multi_d_fn_t    sdx4df;
71#if ARCH_X86 || ARCH_X86_64
72  vp8_copy32xn_fn_t       copymem;
73#endif
74} vp8_variance_fn_ptr_t;
75#endif  // CONFIG_VP8
76
77#if CONFIG_VP9 || CONFIG_VP10
78typedef struct vp9_variance_vtable {
79  vpx_sad_fn_t               sdf;
80  vpx_sad_avg_fn_t           sdaf;
81  vpx_variance_fn_t          vf;
82  vpx_subpixvariance_fn_t    svf;
83  vpx_subp_avg_variance_fn_t svaf;
84  vpx_sad_multi_fn_t         sdx3f;
85  vpx_sad_multi_fn_t         sdx8f;
86  vpx_sad_multi_d_fn_t       sdx4df;
87} vp9_variance_fn_ptr_t;
88#endif  // CONFIG_VP9 || CONFIG_VP10
89
90#ifdef __cplusplus
91}  // extern "C"
92#endif
93
94#endif  // VPX_DSP_VARIANCE_H_
95