aboutsummaryrefslogtreecommitdiff
path: root/source/scale_common.cc
diff options
context:
space:
mode:
authorFrank Barchard <fbarchard@google.com>2016-06-24 16:07:49 -0700
committerFrank Barchard <fbarchard@google.com>2016-06-24 16:07:49 -0700
commitb8ddb5a2a789a3e062283fb509938b4eac5d41cc (patch)
tree53cab7dc09f7caa9b350de08a863d8810f572017 /source/scale_common.cc
parent1b3e4aee47ea51245119adf9f2b1c7675576c07b (diff)
downloadlibyuv-b8ddb5a2a789a3e062283fb509938b4eac5d41cc.tar.gz
rounding for arm filter
R=wangcheng@google.com, harryjin@google.com BUG=libyuv:607 Review URL: https://codereview.chromium.org/2093913004 .
Diffstat (limited to 'source/scale_common.cc')
-rw-r--r--source/scale_common.cc10
1 files changed, 4 insertions, 6 deletions
diff --git a/source/scale_common.cc b/source/scale_common.cc
index baed70b9..3507aa4d 100644
--- a/source/scale_common.cc
+++ b/source/scale_common.cc
@@ -417,11 +417,9 @@ void ScaleColsUp2_16_C(uint16* dst_ptr, const uint16* src_ptr,
}
// (1-f)a + fb can be replaced with a + f(b-a)
-#if defined(__arm__)
-// arm uses 16 bit math with truncation.
-// TODO(fbarchard): add rounding.
+#if defined(__arm__) || defined(__aarch64__)
#define BLENDER(a, b, f) (uint8)((int)(a) + \
- (((int)((f)) * ((int)(b) - (int)(a))) >> 16))
+ ((((int)((f)) * ((int)(b) - (int)(a))) + 0x8000) >> 16))
#else
// inteluses 7 bit math with rounding.
#define BLENDER(a, b, f) (uint8)((int)(a) + \
@@ -480,7 +478,7 @@ void ScaleFilterCols64_C(uint8* dst_ptr, const uint8* src_ptr,
// Same as 8 bit arm blender but return is cast to uint16
#define BLENDER(a, b, f) (uint16)((int)(a) + \
- (((int)((f)) * ((int)(b) - (int)(a))) >> 16))
+ ((((int)((f)) * ((int)(b) - (int)(a))) + 0x8000) >> 16))
void ScaleFilterCols_16_C(uint16* dst_ptr, const uint16* src_ptr,
int dst_width, int x, int dx) {
@@ -818,7 +816,7 @@ void ScaleARGBColsUp2_C(uint8* dst_argb, const uint8* src_argb,
}
}
-// TODO(fbarchard): Replace 0x7f ^ f with 128-f. bug=605.
+// TODO(fbarchard): Replace 0x7f ^ f with 128-f. bug=607.
// Mimics SSSE3 blender
#define BLENDER1(a, b, f) ((a) * (0x7f ^ f) + (b) * f) >> 7
#define BLENDERC(a, b, f, s) (uint32)( \