2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
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.
11 #ifndef VP9_ENCODER_VP9_VARIANCE_H_
12 #define VP9_ENCODER_VP9_VARIANCE_H_
14 #include "vpx/vpx_integer.h"
20 void variance(const uint8_t *src_ptr,
22 const uint8_t *ref_ptr,
29 typedef unsigned int(*vp9_sad_fn_t)(const uint8_t *src_ptr,
31 const uint8_t *ref_ptr,
33 unsigned int max_sad);
35 typedef unsigned int(*vp9_sad_avg_fn_t)(const uint8_t *src_ptr,
37 const uint8_t *ref_ptr,
39 const uint8_t *second_pred,
40 unsigned int max_sad);
42 typedef void (*vp9_sad_multi_fn_t)(const uint8_t *src_ptr,
44 const uint8_t *ref_ptr,
46 unsigned int *sad_array);
48 typedef void (*vp9_sad_multi1_fn_t)(const uint8_t *src_ptr,
50 const uint8_t *ref_ptr,
52 unsigned int *sad_array);
54 typedef void (*vp9_sad_multi_d_fn_t)(const uint8_t *src_ptr,
56 const uint8_t* const ref_ptr[],
57 int ref_stride, unsigned int *sad_array);
59 typedef unsigned int (*vp9_variance_fn_t)(const uint8_t *src_ptr,
61 const uint8_t *ref_ptr,
65 typedef unsigned int (*vp9_subpixvariance_fn_t)(const uint8_t *src_ptr,
69 const uint8_t *ref_ptr,
73 typedef unsigned int (*vp9_subp_avg_variance_fn_t)(const uint8_t *src_ptr,
77 const uint8_t *ref_ptr,
80 const uint8_t *second_pred);
82 typedef unsigned int (*vp9_getmbss_fn_t)(const short *);
84 typedef unsigned int (*vp9_get16x16prederror_fn_t)(const uint8_t *src_ptr,
86 const uint8_t *ref_ptr,
89 typedef struct vp9_variance_vtable {
91 vp9_sad_avg_fn_t sdaf;
93 vp9_subpixvariance_fn_t svf;
94 vp9_subp_avg_variance_fn_t svaf;
95 vp9_variance_fn_t svf_halfpix_h;
96 vp9_variance_fn_t svf_halfpix_v;
97 vp9_variance_fn_t svf_halfpix_hv;
98 vp9_sad_multi_fn_t sdx3f;
99 vp9_sad_multi1_fn_t sdx8f;
100 vp9_sad_multi_d_fn_t sdx4df;
101 } vp9_variance_fn_ptr_t;
103 static void comp_avg_pred(uint8_t *comp_pred, const uint8_t *pred, int width,
104 int height, const uint8_t *ref, int ref_stride) {
107 for (i = 0; i < height; i++) {
108 for (j = 0; j < width; j++) {
110 tmp = pred[j] + ref[j];
111 comp_pred[j] = (tmp + 1) >> 1;
122 #endif // VP9_ENCODER_VP9_VARIANCE_H_