sad.c 16.5 KB
Newer Older
John Koleszar's avatar
John Koleszar committed
1
/*
Yaowu Xu's avatar
Yaowu Xu committed
2
 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
John Koleszar's avatar
John Koleszar committed
3
 *
Yaowu Xu's avatar
Yaowu Xu committed
4 5 6 7 8 9
 * This source code is subject to the terms of the BSD 2 Clause License and
 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
 * was not distributed with this source code in the LICENSE file, you can
 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
 * Media Patent License 1.0 was not distributed with this source code in the
 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
John Koleszar's avatar
John Koleszar committed
10 11 12
 */

#include <stdlib.h>
13

Yaowu Xu's avatar
Yaowu Xu committed
14 15
#include "./aom_config.h"
#include "./aom_dsp_rtcd.h"
16

Yaowu Xu's avatar
Yaowu Xu committed
17
#include "aom/aom_integer.h"
18
#include "aom_ports/mem.h"
19
#include "aom_dsp/blend.h"
20

Johann's avatar
Johann committed
21
/* Sum the difference between every corresponding element of the buffers. */
clang-format's avatar
clang-format committed
22 23
static INLINE unsigned int sad(const uint8_t *a, int a_stride, const uint8_t *b,
                               int b_stride, int width, int height) {
24 25 26 27
  int y, x;
  unsigned int sad = 0;

  for (y = 0; y < height; y++) {
clang-format's avatar
clang-format committed
28
    for (x = 0; x < width; x++) sad += abs(a[x] - b[x]);
29 30 31 32 33 34

    a += a_stride;
    b += b_stride;
  }
  return sad;
}
John Koleszar's avatar
John Koleszar committed
35

clang-format's avatar
clang-format committed
36
#define sadMxN(m, n)                                                        \
Yaowu Xu's avatar
Yaowu Xu committed
37
  unsigned int aom_sad##m##x##n##_c(const uint8_t *src, int src_stride,     \
clang-format's avatar
clang-format committed
38 39 40
                                    const uint8_t *ref, int ref_stride) {   \
    return sad(src, src_stride, ref, ref_stride, m, n);                     \
  }                                                                         \
Yaowu Xu's avatar
Yaowu Xu committed
41
  unsigned int aom_sad##m##x##n##_avg_c(const uint8_t *src, int src_stride, \
clang-format's avatar
clang-format committed
42 43 44
                                        const uint8_t *ref, int ref_stride, \
                                        const uint8_t *second_pred) {       \
    uint8_t comp_pred[m * n];                                               \
Yaowu Xu's avatar
Yaowu Xu committed
45
    aom_comp_avg_pred_c(comp_pred, second_pred, m, n, ref, ref_stride);     \
clang-format's avatar
clang-format committed
46 47
    return sad(src, src_stride, comp_pred, m, m, n);                        \
  }
48

Johann's avatar
Johann committed
49 50
// depending on call sites, pass **ref_array to avoid & in subsequent call and
// de-dup with 4D below.
clang-format's avatar
clang-format committed
51
#define sadMxNxK(m, n, k)                                                   \
Yaowu Xu's avatar
Yaowu Xu committed
52
  void aom_sad##m##x##n##x##k##_c(const uint8_t *src, int src_stride,       \
clang-format's avatar
clang-format committed
53 54 55 56 57
                                  const uint8_t *ref_array, int ref_stride, \
                                  uint32_t *sad_array) {                    \
    int i;                                                                  \
    for (i = 0; i < k; ++i)                                                 \
      sad_array[i] =                                                        \
Yaowu Xu's avatar
Yaowu Xu committed
58
          aom_sad##m##x##n##_c(src, src_stride, &ref_array[i], ref_stride); \
clang-format's avatar
clang-format committed
59
  }
60

Johann's avatar
Johann committed
61
// This appears to be equivalent to the above when k == 4 and refs is const
clang-format's avatar
clang-format committed
62
#define sadMxNx4D(m, n)                                                    \
Yaowu Xu's avatar
Yaowu Xu committed
63
  void aom_sad##m##x##n##x4d_c(const uint8_t *src, int src_stride,         \
clang-format's avatar
clang-format committed
64 65 66 67 68
                               const uint8_t *const ref_array[],           \
                               int ref_stride, uint32_t *sad_array) {      \
    int i;                                                                 \
    for (i = 0; i < 4; ++i)                                                \
      sad_array[i] =                                                       \
Yaowu Xu's avatar
Yaowu Xu committed
69
          aom_sad##m##x##n##_c(src, src_stride, ref_array[i], ref_stride); \
clang-format's avatar
clang-format committed
70
  }
71

clang-format's avatar
clang-format committed
72
/* clang-format off */
Yaowu Xu's avatar
Yaowu Xu committed
73
#if CONFIG_AV1 && CONFIG_EXT_PARTITION
74 75 76 77 78 79 80 81 82 83 84 85 86
// 128x128
sadMxN(128, 128)
sadMxNxK(128, 128, 3)
sadMxNxK(128, 128, 8)
sadMxNx4D(128, 128)

// 128x64
sadMxN(128, 64)
sadMxNx4D(128, 64)

// 64x128
sadMxN(64, 128)
sadMxNx4D(64, 128)
Yaowu Xu's avatar
Yaowu Xu committed
87
#endif  // CONFIG_AV1 && CONFIG_EXT_PARTITION
88

89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
// 64x64
sadMxN(64, 64)
sadMxNxK(64, 64, 3)
sadMxNxK(64, 64, 8)
sadMxNx4D(64, 64)

// 64x32
sadMxN(64, 32)
sadMxNx4D(64, 32)

// 32x64
sadMxN(32, 64)
sadMxNx4D(32, 64)

// 32x32
sadMxN(32, 32)
sadMxNxK(32, 32, 3)
sadMxNxK(32, 32, 8)
sadMxNx4D(32, 32)

// 32x16
sadMxN(32, 16)
sadMxNx4D(32, 16)

// 16x32
sadMxN(16, 32)
sadMxNx4D(16, 32)

// 16x16
sadMxN(16, 16)
sadMxNxK(16, 16, 3)
sadMxNxK(16, 16, 8)
sadMxNx4D(16, 16)

// 16x8
sadMxN(16, 8)
sadMxNxK(16, 8, 3)
sadMxNxK(16, 8, 8)
sadMxNx4D(16, 8)

// 8x16
sadMxN(8, 16)
sadMxNxK(8, 16, 3)
sadMxNxK(8, 16, 8)
sadMxNx4D(8, 16)

// 8x8
sadMxN(8, 8)
sadMxNxK(8, 8, 3)
sadMxNxK(8, 8, 8)
sadMxNx4D(8, 8)

// 8x4
sadMxN(8, 4)
sadMxNxK(8, 4, 8)
sadMxNx4D(8, 4)

// 4x8
sadMxN(4, 8)
sadMxNxK(4, 8, 8)
sadMxNx4D(4, 8)

// 4x4
sadMxN(4, 4)
sadMxNxK(4, 4, 3)
sadMxNxK(4, 4, 8)
sadMxNx4D(4, 4)
clang-format's avatar
clang-format committed
156
/* clang-format on */
157

158
#if CONFIG_HIGHBITDEPTH
clang-format's avatar
clang-format committed
159 160 161
        static INLINE
    unsigned int highbd_sad(const uint8_t *a8, int a_stride, const uint8_t *b8,
                            int b_stride, int width, int height) {
162 163 164 165 166
  int y, x;
  unsigned int sad = 0;
  const uint16_t *a = CONVERT_TO_SHORTPTR(a8);
  const uint16_t *b = CONVERT_TO_SHORTPTR(b8);
  for (y = 0; y < height; y++) {
clang-format's avatar
clang-format committed
167
    for (x = 0; x < width; x++) sad += abs(a[x] - b[x]);
168 169 170 171 172 173 174

    a += a_stride;
    b += b_stride;
  }
  return sad;
}

175 176 177
static INLINE unsigned int highbd_sadb(const uint8_t *a8, int a_stride,
                                       const uint16_t *b, int b_stride,
                                       int width, int height) {
178 179 180 181
  int y, x;
  unsigned int sad = 0;
  const uint16_t *a = CONVERT_TO_SHORTPTR(a8);
  for (y = 0; y < height; y++) {
clang-format's avatar
clang-format committed
182
    for (x = 0; x < width; x++) sad += abs(a[x] - b[x]);
183 184 185 186 187 188 189

    a += a_stride;
    b += b_stride;
  }
  return sad;
}

clang-format's avatar
clang-format committed
190
#define highbd_sadMxN(m, n)                                                    \
Yaowu Xu's avatar
Yaowu Xu committed
191
  unsigned int aom_highbd_sad##m##x##n##_c(const uint8_t *src, int src_stride, \
clang-format's avatar
clang-format committed
192 193 194 195
                                           const uint8_t *ref,                 \
                                           int ref_stride) {                   \
    return highbd_sad(src, src_stride, ref, ref_stride, m, n);                 \
  }                                                                            \
Yaowu Xu's avatar
Yaowu Xu committed
196
  unsigned int aom_highbd_sad##m##x##n##_avg_c(                                \
clang-format's avatar
clang-format committed
197 198 199
      const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride,  \
      const uint8_t *second_pred) {                                            \
    uint16_t comp_pred[m * n];                                                 \
Yaowu Xu's avatar
Yaowu Xu committed
200
    aom_highbd_comp_avg_pred_c(comp_pred, second_pred, m, n, ref, ref_stride); \
clang-format's avatar
clang-format committed
201 202
    return highbd_sadb(src, src_stride, comp_pred, m, m, n);                   \
  }
203

clang-format's avatar
clang-format committed
204
#define highbd_sadMxNxK(m, n, k)                                             \
Yaowu Xu's avatar
Yaowu Xu committed
205
  void aom_highbd_sad##m##x##n##x##k##_c(                                    \
clang-format's avatar
clang-format committed
206 207 208 209
      const uint8_t *src, int src_stride, const uint8_t *ref_array,          \
      int ref_stride, uint32_t *sad_array) {                                 \
    int i;                                                                   \
    for (i = 0; i < k; ++i) {                                                \
Yaowu Xu's avatar
Yaowu Xu committed
210
      sad_array[i] = aom_highbd_sad##m##x##n##_c(src, src_stride,            \
clang-format's avatar
clang-format committed
211 212 213
                                                 &ref_array[i], ref_stride); \
    }                                                                        \
  }
214

clang-format's avatar
clang-format committed
215
#define highbd_sadMxNx4D(m, n)                                               \
Yaowu Xu's avatar
Yaowu Xu committed
216
  void aom_highbd_sad##m##x##n##x4d_c(const uint8_t *src, int src_stride,    \
clang-format's avatar
clang-format committed
217 218 219 220
                                      const uint8_t *const ref_array[],      \
                                      int ref_stride, uint32_t *sad_array) { \
    int i;                                                                   \
    for (i = 0; i < 4; ++i) {                                                \
Yaowu Xu's avatar
Yaowu Xu committed
221
      sad_array[i] = aom_highbd_sad##m##x##n##_c(src, src_stride,            \
clang-format's avatar
clang-format committed
222 223 224
                                                 ref_array[i], ref_stride);  \
    }                                                                        \
  }
225

clang-format's avatar
clang-format committed
226
/* clang-format off */
Yaowu Xu's avatar
Yaowu Xu committed
227
#if CONFIG_AV1 && CONFIG_EXT_PARTITION
228 229 230 231 232 233 234 235 236 237 238 239 240
// 128x128
highbd_sadMxN(128, 128)
highbd_sadMxNxK(128, 128, 3)
highbd_sadMxNxK(128, 128, 8)
highbd_sadMxNx4D(128, 128)

// 128x64
highbd_sadMxN(128, 64)
highbd_sadMxNx4D(128, 64)

// 64x128
highbd_sadMxN(64, 128)
highbd_sadMxNx4D(64, 128)
Yaowu Xu's avatar
Yaowu Xu committed
241
#endif  // CONFIG_AV1 && CONFIG_EXT_PARTITION
242

243
// 64x64
244 245 246 247
highbd_sadMxN(64, 64)
highbd_sadMxNxK(64, 64, 3)
highbd_sadMxNxK(64, 64, 8)
highbd_sadMxNx4D(64, 64)
248 249

// 64x32
250 251
highbd_sadMxN(64, 32)
highbd_sadMxNx4D(64, 32)
252 253

// 32x64
254 255
highbd_sadMxN(32, 64)
highbd_sadMxNx4D(32, 64)
256 257

// 32x32
258 259 260 261
highbd_sadMxN(32, 32)
highbd_sadMxNxK(32, 32, 3)
highbd_sadMxNxK(32, 32, 8)
highbd_sadMxNx4D(32, 32)
262 263

// 32x16
264 265
highbd_sadMxN(32, 16)
highbd_sadMxNx4D(32, 16)
266 267

// 16x32
268 269
highbd_sadMxN(16, 32)
highbd_sadMxNx4D(16, 32)
270 271

// 16x16
272 273 274 275
highbd_sadMxN(16, 16)
highbd_sadMxNxK(16, 16, 3)
highbd_sadMxNxK(16, 16, 8)
highbd_sadMxNx4D(16, 16)
276 277

// 16x8
278 279 280 281
highbd_sadMxN(16, 8)
highbd_sadMxNxK(16, 8, 3)
highbd_sadMxNxK(16, 8, 8)
highbd_sadMxNx4D(16, 8)
282 283

// 8x16
284 285 286 287
highbd_sadMxN(8, 16)
highbd_sadMxNxK(8, 16, 3)
highbd_sadMxNxK(8, 16, 8)
highbd_sadMxNx4D(8, 16)
288 289

// 8x8
290 291 292 293
highbd_sadMxN(8, 8)
highbd_sadMxNxK(8, 8, 3)
highbd_sadMxNxK(8, 8, 8)
highbd_sadMxNx4D(8, 8)
294 295

// 8x4
296 297 298
highbd_sadMxN(8, 4)
highbd_sadMxNxK(8, 4, 8)
highbd_sadMxNx4D(8, 4)
299 300

// 4x8
301 302 303
highbd_sadMxN(4, 8)
highbd_sadMxNxK(4, 8, 8)
highbd_sadMxNx4D(4, 8)
304 305

// 4x4
306 307 308 309
highbd_sadMxN(4, 4)
highbd_sadMxNxK(4, 4, 3)
highbd_sadMxNxK(4, 4, 8)
highbd_sadMxNx4D(4, 4)
clang-format's avatar
clang-format committed
310
/* clang-format on */
311
#endif  // CONFIG_HIGHBITDEPTH
312

Yaowu Xu's avatar
Yaowu Xu committed
313
#if CONFIG_AV1 && CONFIG_EXT_INTER
clang-format's avatar
clang-format committed
314
            static INLINE
David Barker's avatar
David Barker committed
315 316 317 318 319
    unsigned int masked_compound_sad(const uint8_t *src, int src_stride,
                                     const uint8_t *a, int a_stride,
                                     const uint8_t *b, int b_stride,
                                     const uint8_t *m, int m_stride, int width,
                                     int height) {
320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338
  int y, x;
  unsigned int sad = 0;

  for (y = 0; y < height; y++) {
    for (x = 0; x < width; x++) {
      const uint8_t pred = AOM_BLEND_A64(m[x], a[x], b[x]);
      sad += abs(pred - src[x]);
    }

    src += src_stride;
    a += a_stride;
    b += b_stride;
    m += m_stride;
  }
  sad = (sad + 31) >> 6;

  return sad;
}

clang-format's avatar
clang-format committed
339
#define MASKSADMxN(m, n)                                                      \
340 341 342 343 344 345 346 347 348 349
  unsigned int aom_masked_compound_sad##m##x##n##_c(                          \
      const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, \
      const uint8_t *second_pred, const uint8_t *msk, int msk_stride,         \
      int invert_mask) {                                                      \
    if (!invert_mask)                                                         \
      return masked_compound_sad(src, src_stride, ref, ref_stride,            \
                                 second_pred, m, msk, msk_stride, m, n);      \
    else                                                                      \
      return masked_compound_sad(src, src_stride, second_pred, m, ref,        \
                                 ref_stride, msk, msk_stride, m, n);          \
clang-format's avatar
clang-format committed
350
  }
351

clang-format's avatar
clang-format committed
352
/* clang-format off */
353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370
#if CONFIG_EXT_PARTITION
MASKSADMxN(128, 128)
MASKSADMxN(128, 64)
MASKSADMxN(64, 128)
#endif  // CONFIG_EXT_PARTITION
MASKSADMxN(64, 64)
MASKSADMxN(64, 32)
MASKSADMxN(32, 64)
MASKSADMxN(32, 32)
MASKSADMxN(32, 16)
MASKSADMxN(16, 32)
MASKSADMxN(16, 16)
MASKSADMxN(16, 8)
MASKSADMxN(8, 16)
MASKSADMxN(8, 8)
MASKSADMxN(8, 4)
MASKSADMxN(4, 8)
MASKSADMxN(4, 4)
clang-format's avatar
clang-format committed
371
/* clang-format on */
372

373
#if CONFIG_HIGHBITDEPTH
clang-format's avatar
clang-format committed
374
                    static INLINE
David Barker's avatar
David Barker committed
375 376 377 378 379
    unsigned int highbd_masked_compound_sad(const uint8_t *src8, int src_stride,
                                            const uint8_t *a8, int a_stride,
                                            const uint8_t *b8, int b_stride,
                                            const uint8_t *m, int m_stride,
                                            int width, int height) {
380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401
  int y, x;
  unsigned int sad = 0;
  const uint16_t *src = CONVERT_TO_SHORTPTR(src8);
  const uint16_t *a = CONVERT_TO_SHORTPTR(a8);
  const uint16_t *b = CONVERT_TO_SHORTPTR(b8);

  for (y = 0; y < height; y++) {
    for (x = 0; x < width; x++) {
      const uint16_t pred = AOM_BLEND_A64(m[x], a[x], b[x]);
      sad += abs(pred - src[x]);
    }

    src += src_stride;
    a += a_stride;
    b += b_stride;
    m += m_stride;
  }
  sad = (sad + 31) >> 6;

  return sad;
}

clang-format's avatar
clang-format committed
402
#define HIGHBD_MASKSADMXN(m, n)                                               \
403 404 405 406 407 408 409 410 411 412 413 414
  unsigned int aom_highbd_masked_compound_sad##m##x##n##_c(                   \
      const uint8_t *src8, int src_stride, const uint8_t *ref8,               \
      int ref_stride, const uint8_t *second_pred8, const uint8_t *msk,        \
      int msk_stride, int invert_mask) {                                      \
    if (!invert_mask)                                                         \
      return highbd_masked_compound_sad(src8, src_stride, ref8, ref_stride,   \
                                        second_pred8, m, msk, msk_stride, m,  \
                                        n);                                   \
    else                                                                      \
      return highbd_masked_compound_sad(src8, src_stride, second_pred8, m,    \
                                        ref8, ref_stride, msk, msk_stride, m, \
                                        n);                                   \
clang-format's avatar
clang-format committed
415
  }
416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434

#if CONFIG_EXT_PARTITION
HIGHBD_MASKSADMXN(128, 128)
HIGHBD_MASKSADMXN(128, 64)
HIGHBD_MASKSADMXN(64, 128)
#endif  // CONFIG_EXT_PARTITION
HIGHBD_MASKSADMXN(64, 64)
HIGHBD_MASKSADMXN(64, 32)
HIGHBD_MASKSADMXN(32, 64)
HIGHBD_MASKSADMXN(32, 32)
HIGHBD_MASKSADMXN(32, 16)
HIGHBD_MASKSADMXN(16, 32)
HIGHBD_MASKSADMXN(16, 16)
HIGHBD_MASKSADMXN(16, 8)
HIGHBD_MASKSADMXN(8, 16)
HIGHBD_MASKSADMXN(8, 8)
HIGHBD_MASKSADMXN(8, 4)
HIGHBD_MASKSADMXN(4, 8)
HIGHBD_MASKSADMXN(4, 4)
435
#endif  // CONFIG_HIGHBITDEPTH
Yaowu Xu's avatar
Yaowu Xu committed
436
#endif  // CONFIG_AV1 && CONFIG_EXT_INTER
437

Yue Chen's avatar
Yue Chen committed
438
#if CONFIG_AV1 && CONFIG_MOTION_VAR
439 440 441 442
// pre: predictor being evaluated
// wsrc: target weighted prediction (has been *4096 to keep precision)
// mask: 2d weights (scaled by 4096)
static INLINE unsigned int obmc_sad(const uint8_t *pre, int pre_stride,
clang-format's avatar
clang-format committed
443
                                    const int32_t *wsrc, const int32_t *mask,
444 445 446 447 448
                                    int width, int height) {
  int y, x;
  unsigned int sad = 0;

  for (y = 0; y < height; y++) {
449
    for (x = 0; x < width; x++)
450
      sad += ROUND_POWER_OF_TWO(abs(wsrc[x] - pre[x] * mask[x]), 12);
451

452 453 454
    pre += pre_stride;
    wsrc += width;
    mask += width;
455 456 457 458 459
  }

  return sad;
}

clang-format's avatar
clang-format committed
460
#define OBMCSADMxN(m, n)                                                     \
Yaowu Xu's avatar
Yaowu Xu committed
461
  unsigned int aom_obmc_sad##m##x##n##_c(const uint8_t *ref, int ref_stride, \
clang-format's avatar
clang-format committed
462 463 464 465
                                         const int32_t *wsrc,                \
                                         const int32_t *mask) {              \
    return obmc_sad(ref, ref_stride, wsrc, mask, m, n);                      \
  }
466

clang-format's avatar
clang-format committed
467
/* clang-format off */
468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485
#if CONFIG_EXT_PARTITION
OBMCSADMxN(128, 128)
OBMCSADMxN(128, 64)
OBMCSADMxN(64, 128)
#endif  // CONFIG_EXT_PARTITION
OBMCSADMxN(64, 64)
OBMCSADMxN(64, 32)
OBMCSADMxN(32, 64)
OBMCSADMxN(32, 32)
OBMCSADMxN(32, 16)
OBMCSADMxN(16, 32)
OBMCSADMxN(16, 16)
OBMCSADMxN(16, 8)
OBMCSADMxN(8, 16)
OBMCSADMxN(8, 8)
OBMCSADMxN(8, 4)
OBMCSADMxN(4, 8)
OBMCSADMxN(4, 4)
clang-format's avatar
clang-format committed
486
/* clang-format on */
487

488
#if CONFIG_HIGHBITDEPTH
clang-format's avatar
clang-format committed
489 490 491 492
                    static INLINE
    unsigned int highbd_obmc_sad(const uint8_t *pre8, int pre_stride,
                                 const int32_t *wsrc, const int32_t *mask,
                                 int width, int height) {
493 494
  int y, x;
  unsigned int sad = 0;
495
  const uint16_t *pre = CONVERT_TO_SHORTPTR(pre8);
496 497

  for (y = 0; y < height; y++) {
498
    for (x = 0; x < width; x++)
499
      sad += ROUND_POWER_OF_TWO(abs(wsrc[x] - pre[x] * mask[x]), 12);
500

501 502 503
    pre += pre_stride;
    wsrc += width;
    mask += width;
504 505 506 507 508
  }

  return sad;
}

clang-format's avatar
clang-format committed
509
#define HIGHBD_OBMCSADMXN(m, n)                                \
Yaowu Xu's avatar
Yaowu Xu committed
510
  unsigned int aom_highbd_obmc_sad##m##x##n##_c(               \
clang-format's avatar
clang-format committed
511 512 513 514
      const uint8_t *ref, int ref_stride, const int32_t *wsrc, \
      const int32_t *mask) {                                   \
    return highbd_obmc_sad(ref, ref_stride, wsrc, mask, m, n); \
  }
515

clang-format's avatar
clang-format committed
516
/* clang-format off */
517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534
#if CONFIG_EXT_PARTITION
HIGHBD_OBMCSADMXN(128, 128)
HIGHBD_OBMCSADMXN(128, 64)
HIGHBD_OBMCSADMXN(64, 128)
#endif  // CONFIG_EXT_PARTITION
HIGHBD_OBMCSADMXN(64, 64)
HIGHBD_OBMCSADMXN(64, 32)
HIGHBD_OBMCSADMXN(32, 64)
HIGHBD_OBMCSADMXN(32, 32)
HIGHBD_OBMCSADMXN(32, 16)
HIGHBD_OBMCSADMXN(16, 32)
HIGHBD_OBMCSADMXN(16, 16)
HIGHBD_OBMCSADMXN(16, 8)
HIGHBD_OBMCSADMXN(8, 16)
HIGHBD_OBMCSADMXN(8, 8)
HIGHBD_OBMCSADMXN(8, 4)
HIGHBD_OBMCSADMXN(4, 8)
HIGHBD_OBMCSADMXN(4, 4)
clang-format's avatar
clang-format committed
535
/* clang-format on */
536
#endif  // CONFIG_HIGHBITDEPTH
Yue Chen's avatar
Yue Chen committed
537
#endif  // CONFIG_AV1 && CONFIG_MOTION_VAR