|
1 /* |
|
2 * Copyright (c) 2010 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 VP9_ENCODER_VP9_VARIANCE_H_ |
|
12 #define VP9_ENCODER_VP9_VARIANCE_H_ |
|
13 |
|
14 #include "vpx/vpx_integer.h" |
|
15 // #include "./vpx_config.h" |
|
16 |
|
17 void variance(const uint8_t *src_ptr, |
|
18 int source_stride, |
|
19 const uint8_t *ref_ptr, |
|
20 int recon_stride, |
|
21 int w, |
|
22 int h, |
|
23 unsigned int *sse, |
|
24 int *sum); |
|
25 |
|
26 typedef unsigned int(*vp9_sad_fn_t)(const uint8_t *src_ptr, |
|
27 int source_stride, |
|
28 const uint8_t *ref_ptr, |
|
29 int ref_stride, |
|
30 unsigned int max_sad); |
|
31 |
|
32 typedef unsigned int(*vp9_sad_avg_fn_t)(const uint8_t *src_ptr, |
|
33 int source_stride, |
|
34 const uint8_t *ref_ptr, |
|
35 int ref_stride, |
|
36 const uint8_t *second_pred, |
|
37 unsigned int max_sad); |
|
38 |
|
39 typedef void (*vp9_sad_multi_fn_t)(const uint8_t *src_ptr, |
|
40 int source_stride, |
|
41 const uint8_t *ref_ptr, |
|
42 int ref_stride, |
|
43 unsigned int *sad_array); |
|
44 |
|
45 typedef void (*vp9_sad_multi1_fn_t)(const uint8_t *src_ptr, |
|
46 int source_stride, |
|
47 const uint8_t *ref_ptr, |
|
48 int ref_stride, |
|
49 unsigned int *sad_array); |
|
50 |
|
51 typedef void (*vp9_sad_multi_d_fn_t)(const uint8_t *src_ptr, |
|
52 int source_stride, |
|
53 const uint8_t* const ref_ptr[], |
|
54 int ref_stride, unsigned int *sad_array); |
|
55 |
|
56 typedef unsigned int (*vp9_variance_fn_t)(const uint8_t *src_ptr, |
|
57 int source_stride, |
|
58 const uint8_t *ref_ptr, |
|
59 int ref_stride, |
|
60 unsigned int *sse); |
|
61 |
|
62 typedef unsigned int (*vp9_subpixvariance_fn_t)(const uint8_t *src_ptr, |
|
63 int source_stride, |
|
64 int xoffset, |
|
65 int yoffset, |
|
66 const uint8_t *ref_ptr, |
|
67 int Refstride, |
|
68 unsigned int *sse); |
|
69 |
|
70 typedef unsigned int (*vp9_subp_avg_variance_fn_t)(const uint8_t *src_ptr, |
|
71 int source_stride, |
|
72 int xoffset, |
|
73 int yoffset, |
|
74 const uint8_t *ref_ptr, |
|
75 int Refstride, |
|
76 unsigned int *sse, |
|
77 const uint8_t *second_pred); |
|
78 |
|
79 typedef unsigned int (*vp9_getmbss_fn_t)(const short *); |
|
80 |
|
81 typedef unsigned int (*vp9_get16x16prederror_fn_t)(const uint8_t *src_ptr, |
|
82 int source_stride, |
|
83 const uint8_t *ref_ptr, |
|
84 int ref_stride); |
|
85 |
|
86 typedef struct vp9_variance_vtable { |
|
87 vp9_sad_fn_t sdf; |
|
88 vp9_sad_avg_fn_t sdaf; |
|
89 vp9_variance_fn_t vf; |
|
90 vp9_subpixvariance_fn_t svf; |
|
91 vp9_subp_avg_variance_fn_t svaf; |
|
92 vp9_variance_fn_t svf_halfpix_h; |
|
93 vp9_variance_fn_t svf_halfpix_v; |
|
94 vp9_variance_fn_t svf_halfpix_hv; |
|
95 vp9_sad_multi_fn_t sdx3f; |
|
96 vp9_sad_multi1_fn_t sdx8f; |
|
97 vp9_sad_multi_d_fn_t sdx4df; |
|
98 } vp9_variance_fn_ptr_t; |
|
99 |
|
100 static void comp_avg_pred(uint8_t *comp_pred, const uint8_t *pred, int width, |
|
101 int height, const uint8_t *ref, int ref_stride) { |
|
102 int i, j; |
|
103 |
|
104 for (i = 0; i < height; i++) { |
|
105 for (j = 0; j < width; j++) { |
|
106 int tmp; |
|
107 tmp = pred[j] + ref[j]; |
|
108 comp_pred[j] = (tmp + 1) >> 1; |
|
109 } |
|
110 comp_pred += width; |
|
111 pred += width; |
|
112 ref += ref_stride; |
|
113 } |
|
114 } |
|
115 #endif // VP9_ENCODER_VP9_VARIANCE_H_ |