diff options
author | Ganesh Ajjanagadde <gajjanagadde@gmail.com> | 2015-09-16 14:48:16 -0400 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2015-09-18 22:42:38 +0200 |
commit | 0fe1c50e505125cf2b026d810458bc5cbc242792 (patch) | |
tree | 50569c6d05c686c15aca5415cda7587da77ce296 /libavfilter/vf_hqx.c | |
parent | e47564828b9b351f874f24d66306294b7741b768 (diff) | |
download | ffmpeg-0fe1c50e505125cf2b026d810458bc5cbc242792.tar.gz |
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 <gajjanagadde@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavfilter/vf_hqx.c')
-rw-r--r-- | libavfilter/vf_hqx.c | 8 |
1 files changed, 5 insertions, 3 deletions
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 */ |