OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 | 11 |
12 #include "vp9/encoder/vp9_variance.h" | 12 #include "vp9/encoder/vp9_variance.h" |
13 #include "vp9/common/vp9_filter.h" | 13 #include "vp9/common/vp9_filter.h" |
14 #include "vp9/common/vp9_subpelvar.h" | 14 #include "vp9/common/vp9_subpelvar.h" |
15 #include "vpx/vpx_integer.h" | 15 #include "vpx/vpx_integer.h" |
16 | 16 |
17 unsigned int vp9_get_mb_ss_c(const short *src_ptr) { | 17 unsigned int vp9_get_mb_ss_c(const int16_t *src_ptr) { |
18 unsigned int i, sum = 0; | 18 unsigned int i, sum = 0; |
19 | 19 |
20 for (i = 0; i < 256; i++) { | 20 for (i = 0; i < 256; i++) { |
21 sum += (src_ptr[i] * src_ptr[i]); | 21 sum += (src_ptr[i] * src_ptr[i]); |
22 } | 22 } |
23 | 23 |
24 return sum; | 24 return sum; |
25 } | 25 } |
26 | 26 |
27 | 27 unsigned int vp9_variance64x64_c(const uint8_t *src_ptr, |
28 | |
29 #if CONFIG_SUPERBLOCKS | |
30 unsigned int vp9_variance32x32_c(const unsigned char *src_ptr, | |
31 int source_stride, | 28 int source_stride, |
32 const unsigned char *ref_ptr, | 29 const uint8_t *ref_ptr, |
33 int recon_stride, | 30 int recon_stride, |
34 unsigned int *sse) { | 31 unsigned int *sse) { |
35 unsigned int var; | 32 unsigned int var; |
| 33 int avg; |
| 34 |
| 35 variance(src_ptr, source_stride, ref_ptr, recon_stride, 64, 64, &var, &avg); |
| 36 *sse = var; |
| 37 return (var - (((int64_t)avg * avg) >> 12)); |
| 38 } |
| 39 |
| 40 unsigned int vp9_variance32x32_c(const uint8_t *src_ptr, |
| 41 int source_stride, |
| 42 const uint8_t *ref_ptr, |
| 43 int recon_stride, |
| 44 unsigned int *sse) { |
| 45 unsigned int var; |
36 int avg; | 46 int avg; |
37 | 47 |
38 variance(src_ptr, source_stride, ref_ptr, recon_stride, 32, 32, &var, &avg); | 48 variance(src_ptr, source_stride, ref_ptr, recon_stride, 32, 32, &var, &avg); |
39 *sse = var; | 49 *sse = var; |
40 return (var - (((int64_t)avg * avg) >> 10)); | 50 return (var - (((int64_t)avg * avg) >> 10)); |
41 } | 51 } |
42 #endif | |
43 | 52 |
44 unsigned int vp9_variance16x16_c(const unsigned char *src_ptr, | 53 unsigned int vp9_variance16x16_c(const uint8_t *src_ptr, |
45 int source_stride, | 54 int source_stride, |
46 const unsigned char *ref_ptr, | 55 const uint8_t *ref_ptr, |
47 int recon_stride, | 56 int recon_stride, |
48 unsigned int *sse) { | 57 unsigned int *sse) { |
49 unsigned int var; | 58 unsigned int var; |
50 int avg; | 59 int avg; |
51 | 60 |
52 variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 16, &var, &avg); | 61 variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 16, &var, &avg); |
53 *sse = var; | 62 *sse = var; |
54 return (var - (((unsigned int)avg * avg) >> 8)); | 63 return (var - (((unsigned int)avg * avg) >> 8)); |
55 } | 64 } |
56 | 65 |
57 unsigned int vp9_variance8x16_c(const unsigned char *src_ptr, | 66 unsigned int vp9_variance8x16_c(const uint8_t *src_ptr, |
58 int source_stride, | 67 int source_stride, |
59 const unsigned char *ref_ptr, | 68 const uint8_t *ref_ptr, |
60 int recon_stride, | 69 int recon_stride, |
61 unsigned int *sse) { | 70 unsigned int *sse) { |
62 unsigned int var; | 71 unsigned int var; |
63 int avg; | 72 int avg; |
64 | 73 |
65 variance(src_ptr, source_stride, ref_ptr, recon_stride, 8, 16, &var, &avg); | 74 variance(src_ptr, source_stride, ref_ptr, recon_stride, 8, 16, &var, &avg); |
66 *sse = var; | 75 *sse = var; |
67 return (var - (((unsigned int)avg * avg) >> 7)); | 76 return (var - (((unsigned int)avg * avg) >> 7)); |
68 } | 77 } |
69 | 78 |
70 unsigned int vp9_variance16x8_c(const unsigned char *src_ptr, | 79 unsigned int vp9_variance16x8_c(const uint8_t *src_ptr, |
71 int source_stride, | 80 int source_stride, |
72 const unsigned char *ref_ptr, | 81 const uint8_t *ref_ptr, |
73 int recon_stride, | 82 int recon_stride, |
74 unsigned int *sse) { | 83 unsigned int *sse) { |
75 unsigned int var; | 84 unsigned int var; |
76 int avg; | 85 int avg; |
77 | 86 |
78 variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 8, &var, &avg); | 87 variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 8, &var, &avg); |
79 *sse = var; | 88 *sse = var; |
80 return (var - (((unsigned int)avg * avg) >> 7)); | 89 return (var - (((unsigned int)avg * avg) >> 7)); |
81 } | 90 } |
82 | 91 |
83 | 92 |
84 unsigned int vp9_variance8x8_c(const unsigned char *src_ptr, | 93 unsigned int vp9_variance8x8_c(const uint8_t *src_ptr, |
85 int source_stride, | 94 int source_stride, |
86 const unsigned char *ref_ptr, | 95 const uint8_t *ref_ptr, |
87 int recon_stride, | 96 int recon_stride, |
88 unsigned int *sse) { | 97 unsigned int *sse) { |
89 unsigned int var; | 98 unsigned int var; |
90 int avg; | 99 int avg; |
91 | 100 |
92 variance(src_ptr, source_stride, ref_ptr, recon_stride, 8, 8, &var, &avg); | 101 variance(src_ptr, source_stride, ref_ptr, recon_stride, 8, 8, &var, &avg); |
93 *sse = var; | 102 *sse = var; |
94 return (var - (((unsigned int)avg * avg) >> 6)); | 103 return (var - (((unsigned int)avg * avg) >> 6)); |
95 } | 104 } |
96 | 105 |
97 unsigned int vp9_variance4x4_c(const unsigned char *src_ptr, | 106 unsigned int vp9_variance4x4_c(const uint8_t *src_ptr, |
98 int source_stride, | 107 int source_stride, |
99 const unsigned char *ref_ptr, | 108 const uint8_t *ref_ptr, |
100 int recon_stride, | 109 int recon_stride, |
101 unsigned int *sse) { | 110 unsigned int *sse) { |
102 unsigned int var; | 111 unsigned int var; |
103 int avg; | 112 int avg; |
104 | 113 |
105 variance(src_ptr, source_stride, ref_ptr, recon_stride, 4, 4, &var, &avg); | 114 variance(src_ptr, source_stride, ref_ptr, recon_stride, 4, 4, &var, &avg); |
106 *sse = var; | 115 *sse = var; |
107 return (var - (((unsigned int)avg * avg) >> 4)); | 116 return (var - (((unsigned int)avg * avg) >> 4)); |
108 } | 117 } |
109 | 118 |
110 | 119 |
111 unsigned int vp9_mse16x16_c(const unsigned char *src_ptr, | 120 unsigned int vp9_mse16x16_c(const uint8_t *src_ptr, |
112 int source_stride, | 121 int source_stride, |
113 const unsigned char *ref_ptr, | 122 const uint8_t *ref_ptr, |
114 int recon_stride, | 123 int recon_stride, |
115 unsigned int *sse) { | 124 unsigned int *sse) { |
116 unsigned int var; | 125 unsigned int var; |
117 int avg; | 126 int avg; |
118 | 127 |
119 variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 16, &var, &avg); | 128 variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 16, &var, &avg); |
120 *sse = var; | 129 *sse = var; |
121 return var; | 130 return var; |
122 } | 131 } |
123 | 132 |
124 | 133 |
125 unsigned int vp9_sub_pixel_variance4x4_c(const unsigned char *src_ptr, | 134 unsigned int vp9_sub_pixel_variance4x4_c(const uint8_t *src_ptr, |
126 int src_pixels_per_line, | 135 int src_pixels_per_line, |
127 int xoffset, | 136 int xoffset, |
128 int yoffset, | 137 int yoffset, |
129 const unsigned char *dst_ptr, | 138 const uint8_t *dst_ptr, |
130 int dst_pixels_per_line, | 139 int dst_pixels_per_line, |
131 unsigned int *sse) { | 140 unsigned int *sse) { |
132 unsigned char temp2[20 * 16]; | 141 uint8_t temp2[20 * 16]; |
133 const short *HFilter, *VFilter; | 142 const int16_t *HFilter, *VFilter; |
134 unsigned short FData3[5 * 4]; // Temp data bufffer used in filtering | 143 uint16_t FData3[5 * 4]; // Temp data bufffer used in filtering |
135 | 144 |
136 HFilter = vp9_bilinear_filters[xoffset]; | 145 HFilter = vp9_bilinear_filters[xoffset]; |
137 VFilter = vp9_bilinear_filters[yoffset]; | 146 VFilter = vp9_bilinear_filters[yoffset]; |
138 | 147 |
139 // First filter 1d Horizontal | 148 // First filter 1d Horizontal |
140 var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 5,
4, HFilter); | 149 var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 5,
4, HFilter); |
141 | 150 |
142 // Now filter Verticaly | 151 // Now filter Verticaly |
143 var_filter_block2d_bil_second_pass(FData3, temp2, 4, 4, 4, 4, VFilter); | 152 var_filter_block2d_bil_second_pass(FData3, temp2, 4, 4, 4, 4, VFilter); |
144 | 153 |
145 return vp9_variance4x4_c(temp2, 4, dst_ptr, dst_pixels_per_line, sse); | 154 return vp9_variance4x4_c(temp2, 4, dst_ptr, dst_pixels_per_line, sse); |
146 } | 155 } |
147 | 156 |
148 | 157 |
149 unsigned int vp9_sub_pixel_variance8x8_c(const unsigned char *src_ptr, | 158 unsigned int vp9_sub_pixel_variance8x8_c(const uint8_t *src_ptr, |
150 int src_pixels_per_line, | 159 int src_pixels_per_line, |
151 int xoffset, | 160 int xoffset, |
152 int yoffset, | 161 int yoffset, |
153 const unsigned char *dst_ptr, | 162 const uint8_t *dst_ptr, |
154 int dst_pixels_per_line, | 163 int dst_pixels_per_line, |
155 unsigned int *sse) { | 164 unsigned int *sse) { |
156 unsigned short FData3[9 * 8]; // Temp data bufffer used in filtering | 165 uint16_t FData3[9 * 8]; // Temp data bufffer used in filtering |
157 unsigned char temp2[20 * 16]; | 166 uint8_t temp2[20 * 16]; |
158 const short *HFilter, *VFilter; | 167 const int16_t *HFilter, *VFilter; |
159 | 168 |
160 HFilter = vp9_bilinear_filters[xoffset]; | 169 HFilter = vp9_bilinear_filters[xoffset]; |
161 VFilter = vp9_bilinear_filters[yoffset]; | 170 VFilter = vp9_bilinear_filters[yoffset]; |
162 | 171 |
163 var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 9,
8, HFilter); | 172 var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 9,
8, HFilter); |
164 var_filter_block2d_bil_second_pass(FData3, temp2, 8, 8, 8, 8, VFilter); | 173 var_filter_block2d_bil_second_pass(FData3, temp2, 8, 8, 8, 8, VFilter); |
165 | 174 |
166 return vp9_variance8x8_c(temp2, 8, dst_ptr, dst_pixels_per_line, sse); | 175 return vp9_variance8x8_c(temp2, 8, dst_ptr, dst_pixels_per_line, sse); |
167 } | 176 } |
168 | 177 |
169 unsigned int vp9_sub_pixel_variance16x16_c(const unsigned char *src_ptr, | 178 unsigned int vp9_sub_pixel_variance16x16_c(const uint8_t *src_ptr, |
170 int src_pixels_per_line, | 179 int src_pixels_per_line, |
171 int xoffset, | 180 int xoffset, |
172 int yoffset, | 181 int yoffset, |
173 const unsigned char *dst_ptr, | 182 const uint8_t *dst_ptr, |
174 int dst_pixels_per_line, | 183 int dst_pixels_per_line, |
175 unsigned int *sse) { | 184 unsigned int *sse) { |
176 unsigned short FData3[17 * 16]; // Temp data bufffer used in filtering | 185 uint16_t FData3[17 * 16]; // Temp data bufffer used in filtering |
177 unsigned char temp2[20 * 16]; | 186 uint8_t temp2[20 * 16]; |
178 const short *HFilter, *VFilter; | 187 const int16_t *HFilter, *VFilter; |
179 | 188 |
180 HFilter = vp9_bilinear_filters[xoffset]; | 189 HFilter = vp9_bilinear_filters[xoffset]; |
181 VFilter = vp9_bilinear_filters[yoffset]; | 190 VFilter = vp9_bilinear_filters[yoffset]; |
182 | 191 |
183 var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 17,
16, HFilter); | 192 var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 17,
16, HFilter); |
184 var_filter_block2d_bil_second_pass(FData3, temp2, 16, 16, 16, 16, VFilter); | 193 var_filter_block2d_bil_second_pass(FData3, temp2, 16, 16, 16, 16, VFilter); |
185 | 194 |
186 return vp9_variance16x16_c(temp2, 16, dst_ptr, dst_pixels_per_line, sse); | 195 return vp9_variance16x16_c(temp2, 16, dst_ptr, dst_pixels_per_line, sse); |
187 } | 196 } |
188 | 197 |
189 #if CONFIG_SUPERBLOCKS | 198 unsigned int vp9_sub_pixel_variance64x64_c(const uint8_t *src_ptr, |
190 unsigned int vp9_sub_pixel_variance32x32_c(const unsigned char *src_ptr, | |
191 int src_pixels_per_line, | 199 int src_pixels_per_line, |
192 int xoffset, | 200 int xoffset, |
193 int yoffset, | 201 int yoffset, |
194 const unsigned char *dst_ptr, | 202 const uint8_t *dst_ptr, |
195 int dst_pixels_per_line, | 203 int dst_pixels_per_line, |
196 unsigned int *sse) { | 204 unsigned int *sse) { |
197 unsigned short FData3[33 * 32]; // Temp data bufffer used in filtering | 205 uint16_t FData3[65 * 64]; // Temp data bufffer used in filtering |
198 unsigned char temp2[36 * 32]; | 206 uint8_t temp2[68 * 64]; |
199 const short *HFilter, *VFilter; | 207 const int16_t *HFilter, *VFilter; |
| 208 |
| 209 HFilter = vp9_bilinear_filters[xoffset]; |
| 210 VFilter = vp9_bilinear_filters[yoffset]; |
| 211 |
| 212 var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, |
| 213 1, 65, 64, HFilter); |
| 214 var_filter_block2d_bil_second_pass(FData3, temp2, 64, 64, 64, 64, VFilter); |
| 215 |
| 216 return vp9_variance64x64_c(temp2, 64, dst_ptr, dst_pixels_per_line, sse); |
| 217 } |
| 218 |
| 219 unsigned int vp9_sub_pixel_variance32x32_c(const uint8_t *src_ptr, |
| 220 int src_pixels_per_line, |
| 221 int xoffset, |
| 222 int yoffset, |
| 223 const uint8_t *dst_ptr, |
| 224 int dst_pixels_per_line, |
| 225 unsigned int *sse) { |
| 226 uint16_t FData3[33 * 32]; // Temp data bufffer used in filtering |
| 227 uint8_t temp2[36 * 32]; |
| 228 const int16_t *HFilter, *VFilter; |
200 | 229 |
201 HFilter = vp9_bilinear_filters[xoffset]; | 230 HFilter = vp9_bilinear_filters[xoffset]; |
202 VFilter = vp9_bilinear_filters[yoffset]; | 231 VFilter = vp9_bilinear_filters[yoffset]; |
203 | 232 |
204 var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 33,
32, HFilter); | 233 var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 33,
32, HFilter); |
205 var_filter_block2d_bil_second_pass(FData3, temp2, 32, 32, 32, 32, VFilter); | 234 var_filter_block2d_bil_second_pass(FData3, temp2, 32, 32, 32, 32, VFilter); |
206 | 235 |
207 return vp9_variance32x32_c(temp2, 32, dst_ptr, dst_pixels_per_line, sse); | 236 return vp9_variance32x32_c(temp2, 32, dst_ptr, dst_pixels_per_line, sse); |
208 } | 237 } |
209 #endif | |
210 | 238 |
211 unsigned int vp9_variance_halfpixvar16x16_h_c(const unsigned char *src_ptr, | 239 unsigned int vp9_variance_halfpixvar16x16_h_c(const uint8_t *src_ptr, |
212 int source_stride, | 240 int source_stride, |
213 const unsigned char *ref_ptr, | 241 const uint8_t *ref_ptr, |
214 int recon_stride, | 242 int recon_stride, |
215 unsigned int *sse) { | 243 unsigned int *sse) { |
216 return vp9_sub_pixel_variance16x16_c(src_ptr, source_stride, 8, 0, | 244 return vp9_sub_pixel_variance16x16_c(src_ptr, source_stride, 8, 0, |
217 ref_ptr, recon_stride, sse); | 245 ref_ptr, recon_stride, sse); |
218 } | 246 } |
219 | 247 |
220 #if CONFIG_SUPERBLOCKS | 248 unsigned int vp9_variance_halfpixvar32x32_h_c(const uint8_t *src_ptr, |
221 unsigned int vp9_variance_halfpixvar32x32_h_c(const unsigned char *src_ptr, | |
222 int source_stride, | 249 int source_stride, |
223 const unsigned char *ref_ptr, | 250 const uint8_t *ref_ptr, |
224 int recon_stride, | 251 int recon_stride, |
225 unsigned int *sse) { | 252 unsigned int *sse) { |
226 return vp9_sub_pixel_variance32x32_c(src_ptr, source_stride, 8, 0, | 253 return vp9_sub_pixel_variance32x32_c(src_ptr, source_stride, 8, 0, |
227 ref_ptr, recon_stride, sse); | 254 ref_ptr, recon_stride, sse); |
228 } | 255 } |
229 #endif | |
230 | 256 |
| 257 unsigned int vp9_variance_halfpixvar64x64_h_c(const uint8_t *src_ptr, |
| 258 int source_stride, |
| 259 const uint8_t *ref_ptr, |
| 260 int recon_stride, |
| 261 unsigned int *sse) { |
| 262 return vp9_sub_pixel_variance64x64_c(src_ptr, source_stride, 8, 0, |
| 263 ref_ptr, recon_stride, sse); |
| 264 } |
231 | 265 |
232 unsigned int vp9_variance_halfpixvar16x16_v_c(const unsigned char *src_ptr, | 266 unsigned int vp9_variance_halfpixvar16x16_v_c(const uint8_t *src_ptr, |
233 int source_stride, | 267 int source_stride, |
234 const unsigned char *ref_ptr, | 268 const uint8_t *ref_ptr, |
235 int recon_stride, | 269 int recon_stride, |
236 unsigned int *sse) { | 270 unsigned int *sse) { |
237 return vp9_sub_pixel_variance16x16_c(src_ptr, source_stride, 0, 8, | 271 return vp9_sub_pixel_variance16x16_c(src_ptr, source_stride, 0, 8, |
238 ref_ptr, recon_stride, sse); | 272 ref_ptr, recon_stride, sse); |
239 } | 273 } |
240 | 274 |
241 #if CONFIG_SUPERBLOCKS | 275 unsigned int vp9_variance_halfpixvar32x32_v_c(const uint8_t *src_ptr, |
242 unsigned int vp9_variance_halfpixvar32x32_v_c(const unsigned char *src_ptr, | |
243 int source_stride, | 276 int source_stride, |
244 const unsigned char *ref_ptr, | 277 const uint8_t *ref_ptr, |
245 int recon_stride, | 278 int recon_stride, |
246 unsigned int *sse) { | 279 unsigned int *sse) { |
247 return vp9_sub_pixel_variance32x32_c(src_ptr, source_stride, 0, 8, | 280 return vp9_sub_pixel_variance32x32_c(src_ptr, source_stride, 0, 8, |
248 ref_ptr, recon_stride, sse); | 281 ref_ptr, recon_stride, sse); |
249 } | 282 } |
250 #endif | |
251 | 283 |
252 unsigned int vp9_variance_halfpixvar16x16_hv_c(const unsigned char *src_ptr, | 284 unsigned int vp9_variance_halfpixvar64x64_v_c(const uint8_t *src_ptr, |
| 285 int source_stride, |
| 286 const uint8_t *ref_ptr, |
| 287 int recon_stride, |
| 288 unsigned int *sse) { |
| 289 return vp9_sub_pixel_variance64x64_c(src_ptr, source_stride, 0, 8, |
| 290 ref_ptr, recon_stride, sse); |
| 291 } |
| 292 |
| 293 unsigned int vp9_variance_halfpixvar16x16_hv_c(const uint8_t *src_ptr, |
253 int source_stride, | 294 int source_stride, |
254 const unsigned char *ref_ptr, | 295 const uint8_t *ref_ptr, |
255 int recon_stride, | 296 int recon_stride, |
256 unsigned int *sse) { | 297 unsigned int *sse) { |
257 return vp9_sub_pixel_variance16x16_c(src_ptr, source_stride, 8, 8, | 298 return vp9_sub_pixel_variance16x16_c(src_ptr, source_stride, 8, 8, |
258 ref_ptr, recon_stride, sse); | 299 ref_ptr, recon_stride, sse); |
259 } | 300 } |
260 | 301 |
261 #if CONFIG_SUPERBLOCKS | 302 unsigned int vp9_variance_halfpixvar32x32_hv_c(const uint8_t *src_ptr, |
262 unsigned int vp9_variance_halfpixvar32x32_hv_c(const unsigned char *src_ptr, | |
263 int source_stride, | 303 int source_stride, |
264 const unsigned char *ref_ptr, | 304 const uint8_t *ref_ptr, |
265 int recon_stride, | 305 int recon_stride, |
266 unsigned int *sse) { | 306 unsigned int *sse) { |
267 return vp9_sub_pixel_variance32x32_c(src_ptr, source_stride, 8, 8, | 307 return vp9_sub_pixel_variance32x32_c(src_ptr, source_stride, 8, 8, |
268 ref_ptr, recon_stride, sse); | 308 ref_ptr, recon_stride, sse); |
269 } | 309 } |
270 #endif | |
271 | 310 |
272 unsigned int vp9_sub_pixel_mse16x16_c(const unsigned char *src_ptr, | 311 unsigned int vp9_variance_halfpixvar64x64_hv_c(const uint8_t *src_ptr, |
| 312 int source_stride, |
| 313 const uint8_t *ref_ptr, |
| 314 int recon_stride, |
| 315 unsigned int *sse) { |
| 316 return vp9_sub_pixel_variance64x64_c(src_ptr, source_stride, 8, 8, |
| 317 ref_ptr, recon_stride, sse); |
| 318 } |
| 319 |
| 320 unsigned int vp9_sub_pixel_mse16x16_c(const uint8_t *src_ptr, |
273 int src_pixels_per_line, | 321 int src_pixels_per_line, |
274 int xoffset, | 322 int xoffset, |
275 int yoffset, | 323 int yoffset, |
276 const unsigned char *dst_ptr, | 324 const uint8_t *dst_ptr, |
277 int dst_pixels_per_line, | 325 int dst_pixels_per_line, |
278 unsigned int *sse) { | 326 unsigned int *sse) { |
279 vp9_sub_pixel_variance16x16_c(src_ptr, src_pixels_per_line, | 327 vp9_sub_pixel_variance16x16_c(src_ptr, src_pixels_per_line, |
280 xoffset, yoffset, dst_ptr, | 328 xoffset, yoffset, dst_ptr, |
281 dst_pixels_per_line, sse); | 329 dst_pixels_per_line, sse); |
282 return *sse; | 330 return *sse; |
283 } | 331 } |
284 | 332 |
285 #if CONFIG_SUPERBLOCKS | 333 unsigned int vp9_sub_pixel_mse32x32_c(const uint8_t *src_ptr, |
286 unsigned int vp9_sub_pixel_mse32x32_c(const unsigned char *src_ptr, | |
287 int src_pixels_per_line, | 334 int src_pixels_per_line, |
288 int xoffset, | 335 int xoffset, |
289 int yoffset, | 336 int yoffset, |
290 const unsigned char *dst_ptr, | 337 const uint8_t *dst_ptr, |
291 int dst_pixels_per_line, | 338 int dst_pixels_per_line, |
292 unsigned int *sse) { | 339 unsigned int *sse) { |
293 vp9_sub_pixel_variance32x32_c(src_ptr, src_pixels_per_line, | 340 vp9_sub_pixel_variance32x32_c(src_ptr, src_pixels_per_line, |
294 xoffset, yoffset, dst_ptr, | 341 xoffset, yoffset, dst_ptr, |
295 dst_pixels_per_line, sse); | 342 dst_pixels_per_line, sse); |
296 return *sse; | 343 return *sse; |
297 } | 344 } |
298 #endif | |
299 | 345 |
300 unsigned int vp9_sub_pixel_variance16x8_c(const unsigned char *src_ptr, | 346 unsigned int vp9_sub_pixel_mse64x64_c(const uint8_t *src_ptr, |
| 347 int src_pixels_per_line, |
| 348 int xoffset, |
| 349 int yoffset, |
| 350 const uint8_t *dst_ptr, |
| 351 int dst_pixels_per_line, |
| 352 unsigned int *sse) { |
| 353 vp9_sub_pixel_variance64x64_c(src_ptr, src_pixels_per_line, |
| 354 xoffset, yoffset, dst_ptr, |
| 355 dst_pixels_per_line, sse); |
| 356 return *sse; |
| 357 } |
| 358 |
| 359 unsigned int vp9_sub_pixel_variance16x8_c(const uint8_t *src_ptr, |
301 int src_pixels_per_line, | 360 int src_pixels_per_line, |
302 int xoffset, | 361 int xoffset, |
303 int yoffset, | 362 int yoffset, |
304 const unsigned char *dst_ptr, | 363 const uint8_t *dst_ptr, |
305 int dst_pixels_per_line, | 364 int dst_pixels_per_line, |
306 unsigned int *sse) { | 365 unsigned int *sse) { |
307 unsigned short FData3[16 * 9]; // Temp data bufffer used in filtering | 366 uint16_t FData3[16 * 9]; // Temp data bufffer used in filtering |
308 unsigned char temp2[20 * 16]; | 367 uint8_t temp2[20 * 16]; |
309 const short *HFilter, *VFilter; | 368 const int16_t *HFilter, *VFilter; |
310 | 369 |
311 HFilter = vp9_bilinear_filters[xoffset]; | 370 HFilter = vp9_bilinear_filters[xoffset]; |
312 VFilter = vp9_bilinear_filters[yoffset]; | 371 VFilter = vp9_bilinear_filters[yoffset]; |
313 | 372 |
314 var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 9,
16, HFilter); | 373 var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 9,
16, HFilter); |
315 var_filter_block2d_bil_second_pass(FData3, temp2, 16, 16, 8, 16, VFilter); | 374 var_filter_block2d_bil_second_pass(FData3, temp2, 16, 16, 8, 16, VFilter); |
316 | 375 |
317 return vp9_variance16x8_c(temp2, 16, dst_ptr, dst_pixels_per_line, sse); | 376 return vp9_variance16x8_c(temp2, 16, dst_ptr, dst_pixels_per_line, sse); |
318 } | 377 } |
319 | 378 |
320 unsigned int vp9_sub_pixel_variance8x16_c(const unsigned char *src_ptr, | 379 unsigned int vp9_sub_pixel_variance8x16_c(const uint8_t *src_ptr, |
321 int src_pixels_per_line, | 380 int src_pixels_per_line, |
322 int xoffset, | 381 int xoffset, |
323 int yoffset, | 382 int yoffset, |
324 const unsigned char *dst_ptr, | 383 const uint8_t *dst_ptr, |
325 int dst_pixels_per_line, | 384 int dst_pixels_per_line, |
326 unsigned int *sse) { | 385 unsigned int *sse) { |
327 unsigned short FData3[9 * 16]; // Temp data bufffer used in filtering | 386 uint16_t FData3[9 * 16]; // Temp data bufffer used in filtering |
328 unsigned char temp2[20 * 16]; | 387 uint8_t temp2[20 * 16]; |
329 const short *HFilter, *VFilter; | 388 const int16_t *HFilter, *VFilter; |
330 | 389 |
331 HFilter = vp9_bilinear_filters[xoffset]; | 390 HFilter = vp9_bilinear_filters[xoffset]; |
332 VFilter = vp9_bilinear_filters[yoffset]; | 391 VFilter = vp9_bilinear_filters[yoffset]; |
333 | 392 |
334 var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, | 393 var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, |
335 1, 17, 8, HFilter); | 394 1, 17, 8, HFilter); |
336 var_filter_block2d_bil_second_pass(FData3, temp2, 8, 8, 16, 8, VFilter); | 395 var_filter_block2d_bil_second_pass(FData3, temp2, 8, 8, 16, 8, VFilter); |
337 | 396 |
338 return vp9_variance8x16_c(temp2, 8, dst_ptr, dst_pixels_per_line, sse); | 397 return vp9_variance8x16_c(temp2, 8, dst_ptr, dst_pixels_per_line, sse); |
339 } | 398 } |
340 | 399 |
OLD | NEW |