Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1345)

Side by Side Diff: source/libvpx/vp9/encoder/vp9_variance_c.c

Issue 11555023: libvpx: Add VP9 decoder. (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
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
12 #include "vp9/encoder/vp9_variance.h"
13 #include "vp9/common/vp9_filter.h"
14 #include "vp9/common/vp9_subpelvar.h"
15 #include "vpx/vpx_integer.h"
16
17 unsigned int vp9_get_mb_ss_c(const short *src_ptr) {
18 unsigned int i, sum = 0;
19
20 for (i = 0; i < 256; i++) {
21 sum += (src_ptr[i] * src_ptr[i]);
22 }
23
24 return sum;
25 }
26
27
28
29 #if CONFIG_SUPERBLOCKS
30 unsigned int vp9_variance32x32_c(const unsigned char *src_ptr,
31 int source_stride,
32 const unsigned char *ref_ptr,
33 int recon_stride,
34 unsigned int *sse) {
35 unsigned int var;
36 int avg;
37
38 variance(src_ptr, source_stride, ref_ptr, recon_stride, 32, 32, &var, &avg);
39 *sse = var;
40 return (var - (((int64_t)avg * avg) >> 10));
41 }
42 #endif
43
44 unsigned int vp9_variance16x16_c(const unsigned char *src_ptr,
45 int source_stride,
46 const unsigned char *ref_ptr,
47 int recon_stride,
48 unsigned int *sse) {
49 unsigned int var;
50 int avg;
51
52 variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 16, &var, &avg);
53 *sse = var;
54 return (var - (((unsigned int)avg * avg) >> 8));
55 }
56
57 unsigned int vp9_variance8x16_c(const unsigned char *src_ptr,
58 int source_stride,
59 const unsigned char *ref_ptr,
60 int recon_stride,
61 unsigned int *sse) {
62 unsigned int var;
63 int avg;
64
65 variance(src_ptr, source_stride, ref_ptr, recon_stride, 8, 16, &var, &avg);
66 *sse = var;
67 return (var - (((unsigned int)avg * avg) >> 7));
68 }
69
70 unsigned int vp9_variance16x8_c(const unsigned char *src_ptr,
71 int source_stride,
72 const unsigned char *ref_ptr,
73 int recon_stride,
74 unsigned int *sse) {
75 unsigned int var;
76 int avg;
77
78 variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 8, &var, &avg);
79 *sse = var;
80 return (var - (((unsigned int)avg * avg) >> 7));
81 }
82
83
84 unsigned int vp9_variance8x8_c(const unsigned char *src_ptr,
85 int source_stride,
86 const unsigned char *ref_ptr,
87 int recon_stride,
88 unsigned int *sse) {
89 unsigned int var;
90 int avg;
91
92 variance(src_ptr, source_stride, ref_ptr, recon_stride, 8, 8, &var, &avg);
93 *sse = var;
94 return (var - (((unsigned int)avg * avg) >> 6));
95 }
96
97 unsigned int vp9_variance4x4_c(const unsigned char *src_ptr,
98 int source_stride,
99 const unsigned char *ref_ptr,
100 int recon_stride,
101 unsigned int *sse) {
102 unsigned int var;
103 int avg;
104
105 variance(src_ptr, source_stride, ref_ptr, recon_stride, 4, 4, &var, &avg);
106 *sse = var;
107 return (var - (((unsigned int)avg * avg) >> 4));
108 }
109
110
111 unsigned int vp9_mse16x16_c(const unsigned char *src_ptr,
112 int source_stride,
113 const unsigned char *ref_ptr,
114 int recon_stride,
115 unsigned int *sse) {
116 unsigned int var;
117 int avg;
118
119 variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 16, &var, &avg);
120 *sse = var;
121 return var;
122 }
123
124
125 unsigned int vp9_sub_pixel_variance4x4_c(const unsigned char *src_ptr,
126 int src_pixels_per_line,
127 int xoffset,
128 int yoffset,
129 const unsigned char *dst_ptr,
130 int dst_pixels_per_line,
131 unsigned int *sse) {
132 unsigned char temp2[20 * 16];
133 const short *HFilter, *VFilter;
134 unsigned short FData3[5 * 4]; // Temp data bufffer used in filtering
135
136 HFilter = vp9_bilinear_filters[xoffset];
137 VFilter = vp9_bilinear_filters[yoffset];
138
139 // First filter 1d Horizontal
140 var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 5, 4, HFilter);
141
142 // Now filter Verticaly
143 var_filter_block2d_bil_second_pass(FData3, temp2, 4, 4, 4, 4, VFilter);
144
145 return vp9_variance4x4_c(temp2, 4, dst_ptr, dst_pixels_per_line, sse);
146 }
147
148
149 unsigned int vp9_sub_pixel_variance8x8_c(const unsigned char *src_ptr,
150 int src_pixels_per_line,
151 int xoffset,
152 int yoffset,
153 const unsigned char *dst_ptr,
154 int dst_pixels_per_line,
155 unsigned int *sse) {
156 unsigned short FData3[9 * 8]; // Temp data bufffer used in filtering
157 unsigned char temp2[20 * 16];
158 const short *HFilter, *VFilter;
159
160 HFilter = vp9_bilinear_filters[xoffset];
161 VFilter = vp9_bilinear_filters[yoffset];
162
163 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);
165
166 return vp9_variance8x8_c(temp2, 8, dst_ptr, dst_pixels_per_line, sse);
167 }
168
169 unsigned int vp9_sub_pixel_variance16x16_c(const unsigned char *src_ptr,
170 int src_pixels_per_line,
171 int xoffset,
172 int yoffset,
173 const unsigned char *dst_ptr,
174 int dst_pixels_per_line,
175 unsigned int *sse) {
176 unsigned short FData3[17 * 16]; // Temp data bufffer used in filtering
177 unsigned char temp2[20 * 16];
178 const short *HFilter, *VFilter;
179
180 HFilter = vp9_bilinear_filters[xoffset];
181 VFilter = vp9_bilinear_filters[yoffset];
182
183 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);
185
186 return vp9_variance16x16_c(temp2, 16, dst_ptr, dst_pixels_per_line, sse);
187 }
188
189 #if CONFIG_SUPERBLOCKS
190 unsigned int vp9_sub_pixel_variance32x32_c(const unsigned char *src_ptr,
191 int src_pixels_per_line,
192 int xoffset,
193 int yoffset,
194 const unsigned char *dst_ptr,
195 int dst_pixels_per_line,
196 unsigned int *sse) {
197 unsigned short FData3[33 * 32]; // Temp data bufffer used in filtering
198 unsigned char temp2[36 * 32];
199 const short *HFilter, *VFilter;
200
201 HFilter = vp9_bilinear_filters[xoffset];
202 VFilter = vp9_bilinear_filters[yoffset];
203
204 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);
206
207 return vp9_variance32x32_c(temp2, 32, dst_ptr, dst_pixels_per_line, sse);
208 }
209 #endif
210
211 unsigned int vp9_variance_halfpixvar16x16_h_c(const unsigned char *src_ptr,
212 int source_stride,
213 const unsigned char *ref_ptr,
214 int recon_stride,
215 unsigned int *sse) {
216 return vp9_sub_pixel_variance16x16_c(src_ptr, source_stride, 8, 0,
217 ref_ptr, recon_stride, sse);
218 }
219
220 #if CONFIG_SUPERBLOCKS
221 unsigned int vp9_variance_halfpixvar32x32_h_c(const unsigned char *src_ptr,
222 int source_stride,
223 const unsigned char *ref_ptr,
224 int recon_stride,
225 unsigned int *sse) {
226 return vp9_sub_pixel_variance32x32_c(src_ptr, source_stride, 8, 0,
227 ref_ptr, recon_stride, sse);
228 }
229 #endif
230
231
232 unsigned int vp9_variance_halfpixvar16x16_v_c(const unsigned char *src_ptr,
233 int source_stride,
234 const unsigned char *ref_ptr,
235 int recon_stride,
236 unsigned int *sse) {
237 return vp9_sub_pixel_variance16x16_c(src_ptr, source_stride, 0, 8,
238 ref_ptr, recon_stride, sse);
239 }
240
241 #if CONFIG_SUPERBLOCKS
242 unsigned int vp9_variance_halfpixvar32x32_v_c(const unsigned char *src_ptr,
243 int source_stride,
244 const unsigned char *ref_ptr,
245 int recon_stride,
246 unsigned int *sse) {
247 return vp9_sub_pixel_variance32x32_c(src_ptr, source_stride, 0, 8,
248 ref_ptr, recon_stride, sse);
249 }
250 #endif
251
252 unsigned int vp9_variance_halfpixvar16x16_hv_c(const unsigned char *src_ptr,
253 int source_stride,
254 const unsigned char *ref_ptr,
255 int recon_stride,
256 unsigned int *sse) {
257 return vp9_sub_pixel_variance16x16_c(src_ptr, source_stride, 8, 8,
258 ref_ptr, recon_stride, sse);
259 }
260
261 #if CONFIG_SUPERBLOCKS
262 unsigned int vp9_variance_halfpixvar32x32_hv_c(const unsigned char *src_ptr,
263 int source_stride,
264 const unsigned char *ref_ptr,
265 int recon_stride,
266 unsigned int *sse) {
267 return vp9_sub_pixel_variance32x32_c(src_ptr, source_stride, 8, 8,
268 ref_ptr, recon_stride, sse);
269 }
270 #endif
271
272 unsigned int vp9_sub_pixel_mse16x16_c(const unsigned char *src_ptr,
273 int src_pixels_per_line,
274 int xoffset,
275 int yoffset,
276 const unsigned char *dst_ptr,
277 int dst_pixels_per_line,
278 unsigned int *sse) {
279 vp9_sub_pixel_variance16x16_c(src_ptr, src_pixels_per_line,
280 xoffset, yoffset, dst_ptr,
281 dst_pixels_per_line, sse);
282 return *sse;
283 }
284
285 #if CONFIG_SUPERBLOCKS
286 unsigned int vp9_sub_pixel_mse32x32_c(const unsigned char *src_ptr,
287 int src_pixels_per_line,
288 int xoffset,
289 int yoffset,
290 const unsigned char *dst_ptr,
291 int dst_pixels_per_line,
292 unsigned int *sse) {
293 vp9_sub_pixel_variance32x32_c(src_ptr, src_pixels_per_line,
294 xoffset, yoffset, dst_ptr,
295 dst_pixels_per_line, sse);
296 return *sse;
297 }
298 #endif
299
300 unsigned int vp9_sub_pixel_variance16x8_c(const unsigned char *src_ptr,
301 int src_pixels_per_line,
302 int xoffset,
303 int yoffset,
304 const unsigned char *dst_ptr,
305 int dst_pixels_per_line,
306 unsigned int *sse) {
307 unsigned short FData3[16 * 9]; // Temp data bufffer used in filtering
308 unsigned char temp2[20 * 16];
309 const short *HFilter, *VFilter;
310
311 HFilter = vp9_bilinear_filters[xoffset];
312 VFilter = vp9_bilinear_filters[yoffset];
313
314 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);
316
317 return vp9_variance16x8_c(temp2, 16, dst_ptr, dst_pixels_per_line, sse);
318 }
319
320 unsigned int vp9_sub_pixel_variance8x16_c(const unsigned char *src_ptr,
321 int src_pixels_per_line,
322 int xoffset,
323 int yoffset,
324 const unsigned char *dst_ptr,
325 int dst_pixels_per_line,
326 unsigned int *sse) {
327 unsigned short FData3[9 * 16]; // Temp data bufffer used in filtering
328 unsigned char temp2[20 * 16];
329 const short *HFilter, *VFilter;
330
331 HFilter = vp9_bilinear_filters[xoffset];
332 VFilter = vp9_bilinear_filters[yoffset];
333
334 var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line,
335 1, 17, 8, HFilter);
336 var_filter_block2d_bil_second_pass(FData3, temp2, 8, 8, 16, 8, VFilter);
337
338 return vp9_variance8x16_c(temp2, 8, dst_ptr, dst_pixels_per_line, sse);
339 }
340
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698