OLD | NEW |
(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 #include <stdlib.h> |
| 12 |
| 13 #include "./vp9_rtcd.h" |
| 14 #include "./vpx_config.h" |
| 15 |
| 16 #include "vpx/vpx_integer.h" |
| 17 #include "vp9/encoder/vp9_variance.h" |
| 18 |
| 19 static INLINE unsigned int sad(const uint8_t *a, int a_stride, |
| 20 const uint8_t *b, int b_stride, |
| 21 int width, int height) { |
| 22 int y, x; |
| 23 unsigned int sad = 0; |
| 24 |
| 25 for (y = 0; y < height; y++) { |
| 26 for (x = 0; x < width; x++) |
| 27 sad += abs(a[x] - b[x]); |
| 28 |
| 29 a += a_stride; |
| 30 b += b_stride; |
| 31 } |
| 32 |
| 33 return sad; |
| 34 } |
| 35 |
| 36 #define sad_mxn_func(m, n) \ |
| 37 unsigned int vp9_sad##m##x##n##_c(const uint8_t *src_ptr, int src_stride, \ |
| 38 const uint8_t *ref_ptr, int ref_stride, \ |
| 39 unsigned int max_sad) { \ |
| 40 return sad(src_ptr, src_stride, ref_ptr, ref_stride, m, n); \ |
| 41 } \ |
| 42 unsigned int vp9_sad##m##x##n##_avg_c(const uint8_t *src_ptr, int src_stride, \ |
| 43 const uint8_t *ref_ptr, int ref_stride, \ |
| 44 const uint8_t *second_pred, \ |
| 45 unsigned int max_sad) { \ |
| 46 uint8_t comp_pred[m * n]; \ |
| 47 comp_avg_pred(comp_pred, second_pred, m, n, ref_ptr, ref_stride); \ |
| 48 return sad(src_ptr, src_stride, comp_pred, m, m, n); \ |
| 49 } |
| 50 |
| 51 sad_mxn_func(64, 64) |
| 52 sad_mxn_func(64, 32) |
| 53 sad_mxn_func(32, 64) |
| 54 sad_mxn_func(32, 32) |
| 55 sad_mxn_func(32, 16) |
| 56 sad_mxn_func(16, 32) |
| 57 sad_mxn_func(16, 16) |
| 58 sad_mxn_func(16, 8) |
| 59 sad_mxn_func(8, 16) |
| 60 sad_mxn_func(8, 8) |
| 61 sad_mxn_func(8, 4) |
| 62 sad_mxn_func(4, 8) |
| 63 sad_mxn_func(4, 4) |
| 64 |
| 65 void vp9_sad64x32x4d_c(const uint8_t *src_ptr, int src_stride, |
| 66 const uint8_t* const ref_ptr[], int ref_stride, |
| 67 unsigned int *sad_array) { |
| 68 int i; |
| 69 for (i = 0; i < 4; ++i) |
| 70 sad_array[i] = vp9_sad64x32(src_ptr, src_stride, ref_ptr[i], ref_stride, |
| 71 0x7fffffff); |
| 72 } |
| 73 |
| 74 void vp9_sad32x64x4d_c(const uint8_t *src_ptr, int src_stride, |
| 75 const uint8_t* const ref_ptr[], int ref_stride, |
| 76 unsigned int *sad_array) { |
| 77 int i; |
| 78 for (i = 0; i < 4; ++i) |
| 79 sad_array[i] = vp9_sad32x64(src_ptr, src_stride, ref_ptr[i], ref_stride, |
| 80 0x7fffffff); |
| 81 } |
| 82 |
| 83 void vp9_sad32x16x4d_c(const uint8_t *src_ptr, int src_stride, |
| 84 const uint8_t* const ref_ptr[], int ref_stride, |
| 85 unsigned int *sad_array) { |
| 86 int i; |
| 87 for (i = 0; i < 4; ++i) |
| 88 sad_array[i] = vp9_sad32x16(src_ptr, src_stride, ref_ptr[i], ref_stride, |
| 89 0x7fffffff); |
| 90 } |
| 91 |
| 92 void vp9_sad16x32x4d_c(const uint8_t *src_ptr, int src_stride, |
| 93 const uint8_t* const ref_ptr[], int ref_stride, |
| 94 unsigned int *sad_array) { |
| 95 int i; |
| 96 for (i = 0; i < 4; ++i) |
| 97 sad_array[i] = vp9_sad16x32(src_ptr, src_stride, ref_ptr[i], ref_stride, |
| 98 0x7fffffff); |
| 99 } |
| 100 |
| 101 void vp9_sad64x64x3_c(const uint8_t *src_ptr, int src_stride, |
| 102 const uint8_t *ref_ptr, int ref_stride, |
| 103 unsigned int *sad_array) { |
| 104 int i; |
| 105 for (i = 0; i < 3; ++i) |
| 106 sad_array[i] = vp9_sad64x64(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 107 0x7fffffff); |
| 108 } |
| 109 |
| 110 void vp9_sad32x32x3_c(const uint8_t *src_ptr, int src_stride, |
| 111 const uint8_t *ref_ptr, int ref_stride, |
| 112 unsigned int *sad_array) { |
| 113 int i; |
| 114 for (i = 0; i < 3; ++i) |
| 115 sad_array[i] = vp9_sad32x32(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 116 0x7fffffff); |
| 117 } |
| 118 |
| 119 void vp9_sad64x64x8_c(const uint8_t *src_ptr, int src_stride, |
| 120 const uint8_t *ref_ptr, int ref_stride, |
| 121 unsigned int *sad_array) { |
| 122 int i; |
| 123 for (i = 0; i < 8; ++i) |
| 124 sad_array[i] = vp9_sad64x64(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 125 0x7fffffff); |
| 126 } |
| 127 |
| 128 void vp9_sad32x32x8_c(const uint8_t *src_ptr, int src_stride, |
| 129 const uint8_t *ref_ptr, int ref_stride, |
| 130 unsigned int *sad_array) { |
| 131 int i; |
| 132 for (i = 0; i < 8; ++i) |
| 133 sad_array[i] = vp9_sad32x32(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 134 0x7fffffff); |
| 135 } |
| 136 |
| 137 void vp9_sad16x16x3_c(const uint8_t *src_ptr, int src_stride, |
| 138 const uint8_t *ref_ptr, int ref_stride, |
| 139 unsigned int *sad_array) { |
| 140 int i; |
| 141 for (i = 0; i < 3; ++i) |
| 142 sad_array[i] = vp9_sad16x16(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 143 0x7fffffff); |
| 144 } |
| 145 |
| 146 void vp9_sad16x16x8_c(const uint8_t *src_ptr, int src_stride, |
| 147 const uint8_t *ref_ptr, int ref_stride, |
| 148 uint32_t *sad_array) { |
| 149 int i; |
| 150 for (i = 0; i < 8; ++i) |
| 151 sad_array[i] = vp9_sad16x16(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 152 0x7fffffff); |
| 153 } |
| 154 |
| 155 void vp9_sad16x8x3_c(const uint8_t *src_ptr, int src_stride, |
| 156 const uint8_t *ref_ptr, int ref_stride, |
| 157 unsigned int *sad_array) { |
| 158 int i; |
| 159 for (i = 0; i < 3; ++i) |
| 160 sad_array[i] = vp9_sad16x8(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 161 0x7fffffff); |
| 162 } |
| 163 |
| 164 void vp9_sad16x8x8_c(const uint8_t *src_ptr, int src_stride, |
| 165 const uint8_t *ref_ptr, int ref_stride, |
| 166 uint32_t *sad_array) { |
| 167 int i; |
| 168 for (i = 0; i < 8; ++i) |
| 169 sad_array[i] = vp9_sad16x8(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 170 0x7fffffff); |
| 171 } |
| 172 |
| 173 void vp9_sad8x8x3_c(const uint8_t *src_ptr, int src_stride, |
| 174 const uint8_t *ref_ptr, int ref_stride, |
| 175 unsigned int *sad_array) { |
| 176 int i; |
| 177 for (i = 0; i < 3; ++i) |
| 178 sad_array[i] = vp9_sad8x8(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 179 0x7fffffff); |
| 180 } |
| 181 |
| 182 void vp9_sad8x8x8_c(const uint8_t *src_ptr, int src_stride, |
| 183 const uint8_t *ref_ptr, int ref_stride, |
| 184 uint32_t *sad_array) { |
| 185 int i; |
| 186 for (i = 0; i < 8; ++i) |
| 187 sad_array[i] = vp9_sad8x8(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 188 0x7fffffff); |
| 189 } |
| 190 |
| 191 void vp9_sad8x16x3_c(const uint8_t *src_ptr, int src_stride, |
| 192 const uint8_t *ref_ptr, int ref_stride, |
| 193 unsigned int *sad_array) { |
| 194 int i; |
| 195 for (i = 0; i < 3; ++i) |
| 196 sad_array[i] = vp9_sad8x16(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 197 0x7fffffff); |
| 198 } |
| 199 |
| 200 void vp9_sad8x16x8_c(const uint8_t *src_ptr, int src_stride, |
| 201 const uint8_t *ref_ptr, int ref_stride, |
| 202 uint32_t *sad_array) { |
| 203 int i; |
| 204 for (i = 0; i < 8; ++i) |
| 205 sad_array[i] = vp9_sad8x16(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 206 0x7fffffff); |
| 207 } |
| 208 |
| 209 void vp9_sad4x4x3_c(const uint8_t *src_ptr, int src_stride, |
| 210 const uint8_t *ref_ptr, int ref_stride, |
| 211 unsigned int *sad_array) { |
| 212 int i; |
| 213 for (i = 0; i < 3; ++i) |
| 214 sad_array[i] = vp9_sad4x4(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 215 0x7fffffff); |
| 216 } |
| 217 |
| 218 void vp9_sad4x4x8_c(const uint8_t *src_ptr, int src_stride, |
| 219 const uint8_t *ref_ptr, int ref_stride, |
| 220 uint32_t *sad_array) { |
| 221 int i; |
| 222 for (i = 0; i < 8; ++i) |
| 223 sad_array[i] = vp9_sad4x4(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 224 0x7fffffff); |
| 225 } |
| 226 |
| 227 void vp9_sad64x64x4d_c(const uint8_t *src_ptr, int src_stride, |
| 228 const uint8_t* const ref_ptr[], int ref_stride, |
| 229 unsigned int *sad_array) { |
| 230 int i; |
| 231 for (i = 0; i < 4; ++i) |
| 232 sad_array[i] = vp9_sad64x64(src_ptr, src_stride, ref_ptr[i], ref_stride, |
| 233 0x7fffffff); |
| 234 } |
| 235 |
| 236 void vp9_sad32x32x4d_c(const uint8_t *src_ptr, int src_stride, |
| 237 const uint8_t* const ref_ptr[], int ref_stride, |
| 238 unsigned int *sad_array) { |
| 239 int i; |
| 240 for (i = 0; i < 4; ++i) |
| 241 sad_array[i] = vp9_sad32x32(src_ptr, src_stride, ref_ptr[i], ref_stride, |
| 242 0x7fffffff); |
| 243 } |
| 244 |
| 245 void vp9_sad16x16x4d_c(const uint8_t *src_ptr, int src_stride, |
| 246 const uint8_t* const ref_ptr[], int ref_stride, |
| 247 unsigned int *sad_array) { |
| 248 int i; |
| 249 for (i = 0; i < 4; ++i) |
| 250 sad_array[i] = vp9_sad16x16(src_ptr, src_stride, ref_ptr[i], ref_stride, |
| 251 0x7fffffff); |
| 252 } |
| 253 |
| 254 void vp9_sad16x8x4d_c(const uint8_t *src_ptr, int src_stride, |
| 255 const uint8_t* const ref_ptr[], int ref_stride, |
| 256 unsigned int *sad_array) { |
| 257 int i; |
| 258 for (i = 0; i < 4; ++i) |
| 259 sad_array[i] = vp9_sad16x8(src_ptr, src_stride, ref_ptr[i], ref_stride, |
| 260 0x7fffffff); |
| 261 } |
| 262 |
| 263 void vp9_sad8x8x4d_c(const uint8_t *src_ptr, int src_stride, |
| 264 const uint8_t* const ref_ptr[], int ref_stride, |
| 265 unsigned int *sad_array) { |
| 266 int i; |
| 267 for (i = 0; i < 4; ++i) |
| 268 sad_array[i] = vp9_sad8x8(src_ptr, src_stride, ref_ptr[i], ref_stride, |
| 269 0x7fffffff); |
| 270 } |
| 271 |
| 272 void vp9_sad8x16x4d_c(const uint8_t *src_ptr, int src_stride, |
| 273 const uint8_t* const ref_ptr[], int ref_stride, |
| 274 unsigned int *sad_array) { |
| 275 int i; |
| 276 for (i = 0; i < 4; ++i) |
| 277 sad_array[i] = vp9_sad8x16(src_ptr, src_stride, ref_ptr[i], ref_stride, |
| 278 0x7fffffff); |
| 279 } |
| 280 |
| 281 void vp9_sad8x4x4d_c(const uint8_t *src_ptr, int src_stride, |
| 282 const uint8_t* const ref_ptr[], int ref_stride, |
| 283 unsigned int *sad_array) { |
| 284 int i; |
| 285 for (i = 0; i < 4; ++i) |
| 286 sad_array[i] = vp9_sad8x4(src_ptr, src_stride, ref_ptr[i], ref_stride, |
| 287 0x7fffffff); |
| 288 } |
| 289 |
| 290 void vp9_sad8x4x8_c(const uint8_t *src_ptr, int src_stride, |
| 291 const uint8_t *ref_ptr, int ref_stride, |
| 292 uint32_t *sad_array) { |
| 293 int i; |
| 294 for (i = 0; i < 8; ++i) |
| 295 sad_array[i] = vp9_sad8x4(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 296 0x7fffffff); |
| 297 } |
| 298 |
| 299 void vp9_sad4x8x4d_c(const uint8_t *src_ptr, int src_stride, |
| 300 const uint8_t* const ref_ptr[], int ref_stride, |
| 301 unsigned int *sad_array) { |
| 302 int i; |
| 303 for (i = 0; i < 4; ++i) |
| 304 sad_array[i] = vp9_sad4x8(src_ptr, src_stride, ref_ptr[i], ref_stride, |
| 305 0x7fffffff); |
| 306 } |
| 307 |
| 308 void vp9_sad4x8x8_c(const uint8_t *src_ptr, int src_stride, |
| 309 const uint8_t *ref_ptr, int ref_stride, |
| 310 uint32_t *sad_array) { |
| 311 int i; |
| 312 for (i = 0; i < 8; ++i) |
| 313 sad_array[i] = vp9_sad4x8(src_ptr, src_stride, ref_ptr + i, ref_stride, |
| 314 0x7fffffff); |
| 315 } |
| 316 |
| 317 void vp9_sad4x4x4d_c(const uint8_t *src_ptr, int src_stride, |
| 318 const uint8_t* const ref_ptr[], int ref_stride, |
| 319 unsigned int *sad_array) { |
| 320 int i; |
| 321 for (i = 0; i < 4; ++i) |
| 322 sad_array[i] = vp9_sad4x4(src_ptr, src_stride, ref_ptr[i], ref_stride, |
| 323 0x7fffffff); |
| 324 } |
OLD | NEW |