[FFmpeg-devel] [PATCH] all: silence clang -Wabsolute-value for unsigned subtractions
Ganesh Ajjanagadde
gajjanagadde at gmail.com
Sat Aug 22 16:11:06 CEST 2015
Recent clang (3.5 onwards):
http://llvm.org/releases/3.5.0/tools/clang/docs/ReleaseNotes.html,
http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20141006/116174.html
introduces a new warning -Wabsolute-value.
This patch shuts it up when we do safe unsigned subtractions with no overflow issues.
Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
---
libavcodec/flashsv2enc.c | 7 ++++---
libavfilter/vf_hqx.c | 7 ++++---
libavfilter/vf_xbr.c | 7 ++++---
3 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/libavcodec/flashsv2enc.c b/libavcodec/flashsv2enc.c
index c2c00f4..42f2062 100644
--- a/libavcodec/flashsv2enc.c
+++ b/libavcodec/flashsv2enc.c
@@ -415,9 +415,10 @@ static inline unsigned int chroma_diff(unsigned int c1, unsigned int c2)
unsigned int t1 = (c1 & 0x000000ff) + ((c1 & 0x0000ff00) >> 8) + ((c1 & 0x00ff0000) >> 16);
unsigned int t2 = (c2 & 0x000000ff) + ((c2 & 0x0000ff00) >> 8) + ((c2 & 0x00ff0000) >> 16);
- return abs(t1 - t2) + abs((c1 & 0x000000ff) - (c2 & 0x000000ff)) +
- abs(((c1 & 0x0000ff00) >> 8) - ((c2 & 0x0000ff00) >> 8)) +
- abs(((c1 & 0x00ff0000) >> 16) - ((c2 & 0x00ff0000) >> 16));
+ /* cast for -Wabsolute-value in clang 3.5+ */
+ return abs((int) (t1 - t2)) + abs((int) ((c1 & 0x000000ff) - (c2 & 0x000000ff))) +
+ abs((int) (((c1 & 0x0000ff00) >> 8) - ((c2 & 0x0000ff00) >> 8))) +
+ abs((int) (((c1 & 0x00ff0000) >> 16) - ((c2 & 0x00ff0000) >> 16)));
}
static inline int pixel_color7_fast(Palette * palette, unsigned c15)
diff --git a/libavfilter/vf_hqx.c b/libavfilter/vf_hqx.c
index fa15d9c..75f6181 100644
--- a/libavfilter/vf_hqx.c
+++ b/libavfilter/vf_hqx.c
@@ -65,9 +65,10 @@ 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);
+ /* cast for -Wabsolute-value in clang 3.5+ */
+ return abs((int) ((yuv1 & YMASK) - (yuv2 & YMASK))) > (48 << 16) ||
+ abs((int) ((yuv1 & UMASK) - (yuv2 & UMASK))) > ( 7 << 8) ||
+ abs((int) ((yuv1 & VMASK) - (yuv2 & VMASK))) > ( 6 << 0);
}
/* (c1*w1 + c2*w2) >> s */
diff --git a/libavfilter/vf_xbr.c b/libavfilter/vf_xbr.c
index 38c3b70..8180115 100644
--- a/libavfilter/vf_xbr.c
+++ b/libavfilter/vf_xbr.c
@@ -69,9 +69,10 @@ static uint32_t pixel_diff(uint32_t x, uint32_t y, const uint32_t *r2y)
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));
+ /* cast for -Wabsolute-value in clang 3.5+ */
+ return (abs((int) ((yuv1 & YMASK) - (yuv2 & YMASK))) >> 16) +
+ (abs((int) ((yuv1 & UMASK) - (yuv2 & UMASK))) >> 8) +
+ abs((int) ((yuv1 & VMASK) - (yuv2 & VMASK)));
}
#define ALPHA_BLEND_128_W(a, b) ((((a) & LB_MASK) >> 1) + (((b) & LB_MASK) >> 1))
--
2.5.0
More information about the ffmpeg-devel
mailing list