| 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 |