From 0fe1c50e505125cf2b026d810458bc5cbc242792 Mon Sep 17 00:00:00 2001 From: Ganesh Ajjanagadde Date: Wed, 16 Sep 2015 14:48:16 -0400 Subject: all: do standards compliant absdiff computation This resolves implementation defined behavior, and also silences -Wabsolute-value in clang 3.5+. Moreover, the generated asm is identical to before modulo nop padding. Signed-off-by: Ganesh Ajjanagadde Signed-off-by: Michael Niedermayer --- libavfilter/vf_hqx.c | 8 +++++--- libavfilter/vf_xbr.c | 7 ++++--- 2 files changed, 9 insertions(+), 6 deletions(-) (limited to 'libavfilter') diff --git a/libavfilter/vf_hqx.c b/libavfilter/vf_hqx.c index fa15d9c5c8..d1e360f95a 100644 --- a/libavfilter/vf_hqx.c +++ b/libavfilter/vf_hqx.c @@ -65,9 +65,11 @@ static av_always_inline int yuv_diff(uint32_t yuv1, uint32_t yuv2) #define YMASK 0xff0000 #define UMASK 0x00ff00 #define VMASK 0x0000ff - return abs((yuv1 & YMASK) - (yuv2 & YMASK)) > (48 << 16) || - abs((yuv1 & UMASK) - (yuv2 & UMASK)) > ( 7 << 8) || - abs((yuv1 & VMASK) - (yuv2 & VMASK)) > ( 6 << 0); +#define ABSDIFF(a,b) (abs((int)(a)-(int)(b))) + + return ABSDIFF(yuv1 & YMASK, yuv2 & YMASK) > (48 << 16) || + ABSDIFF(yuv1 & UMASK, yuv2 & UMASK) > ( 7 << 8) || + ABSDIFF(yuv1 & VMASK, yuv2 & VMASK) > ( 6 << 0); } /* (c1*w1 + c2*w2) >> s */ diff --git a/libavfilter/vf_xbr.c b/libavfilter/vf_xbr.c index 858660873c..c92e9a8230 100644 --- a/libavfilter/vf_xbr.c +++ b/libavfilter/vf_xbr.c @@ -65,13 +65,14 @@ static uint32_t pixel_diff(uint32_t x, uint32_t y, const uint32_t *r2y) #define YMASK 0xff0000 #define UMASK 0x00ff00 #define VMASK 0x0000ff +#define ABSDIFF(a,b) (abs((int)(a)-(int)(b))) uint32_t yuv1 = r2y[x & 0xffffff]; uint32_t yuv2 = r2y[y & 0xffffff]; - return (abs((yuv1 & YMASK) - (yuv2 & YMASK)) >> 16) + - (abs((yuv1 & UMASK) - (yuv2 & UMASK)) >> 8) + - abs((yuv1 & VMASK) - (yuv2 & VMASK)); + return (ABSDIFF(yuv1 & YMASK, yuv2 & YMASK) >> 16) + + (ABSDIFF(yuv1 & UMASK, yuv2 & UMASK) >> 8) + + ABSDIFF(yuv1 & VMASK, yuv2 & VMASK); } #define ALPHA_BLEND_128_W(a, b) ((((a) & LB_MASK) >> 1) + (((b) & LB_MASK) >> 1)) -- cgit v1.2.3