Line data Source code
1 : /*
2 : * Copyright (c) 2016, Alliance for Open Media. All rights reserved
3 : *
4 : * This source code is subject to the terms of the BSD 2 Clause License and
5 : * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6 : * was not distributed with this source code in the LICENSE file, you can
7 : * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8 : * Media Patent License 1.0 was not distributed with this source code in the
9 : * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10 : */
11 : #ifndef AV1_COMMON_CDEF_SIMD_H_
12 : #define AV1_COMMON_CDEF_SIMD_H_
13 :
14 : #include "aom_dsp/aom_simd.h"
15 :
16 : // sign(a-b) * min(abs(a-b), max(0, threshold - (abs(a-b) >> adjdamp)))
17 : SIMD_INLINE v128 constrain16(v128 a, v128 b, unsigned int threshold,
18 : unsigned int adjdamp) {
19 0 : v128 diff = v128_sub_16(a, b);
20 0 : const v128 sign = v128_shr_n_s16(diff, 15);
21 0 : diff = v128_abs_s16(diff);
22 0 : const v128 s =
23 0 : v128_ssub_u16(v128_dup_16(threshold), v128_shr_u16(diff, adjdamp));
24 0 : return v128_xor(v128_add_16(sign, v128_min_s16(diff, s)), sign);
25 : }
26 :
27 : #endif // AV1_COMMON_CDEF_SIMD_H_
|