diff mbox

[FFmpeg-devel] lavfi/fspp: Add a cast to silence a clang warning

Message ID CAB0OVGqHb8tt375wDRAG7md0wis-t3m83q_uQ_vjEKOCNQ3_hw@mail.gmail.com
State Superseded
Headers show

Commit Message

Carl Eugen Hoyos April 15, 2019, 10:55 p.m. UTC
2019-04-14 1:02 GMT+02:00, Michael Niedermayer <michael@niedermayer.cc>:
> On Sat, Apr 13, 2019 at 07:25:54PM -0300, James Almer wrote:
>> On 4/13/2019 7:04 PM, Carl Eugen Hoyos wrote:
>> > Hi!
>> >
>> > Attached patch silences two warnings shown when compiling with clang:
>> > libavfilter/vf_fspp.h:51:42: warning: implicit conversion from 'int'
>> > to 'int16_t' (aka 'short') changes value from 44130 to -21406
>> >
>> > Please comment, Carl Eugen
>> >
>> >
>> > 0001-lavfi-vf_fspp-Use-the-intended-cast-to-int16_t.patch
>> >
>> > From d731e523d9c5854183d20d37fe921f49fb048498 Mon Sep 17 00:00:00 2001
>> > From: Carl Eugen Hoyos <ceffmpeg@gmail.com>
>> > Date: Sat, 13 Apr 2019 23:05:44 +0200
>> > Subject: [PATCH] lavfi/fspp: Add two casts to int16_t.
>> >
>> > Silences a warning with clang:
>> > warning: implicit conversion from 'int' to 'int16_t' (aka 'short')
>> > changes value from 44130 to -21406
>> > ---
>> >  libavfilter/vf_fspp.h |    2 +-
>> >  1 file changed, 1 insertion(+), 1 deletion(-)
>> >
>> > diff --git a/libavfilter/vf_fspp.h b/libavfilter/vf_fspp.h
>> > index 74a3447..e346439 100644
>> > --- a/libavfilter/vf_fspp.h
>> > +++ b/libavfilter/vf_fspp.h
>> > @@ -31,7 +31,7 @@
>> >  #define DCTSIZE 8
>> >  #define DCTSIZE_S "8"
>> >
>> > -#define FIX(x,s)  ((int) ((x) * (1 << s) + 0.5) & 0xffff)
>> > +#define FIX(x,s)  ((int16_t)((x) * (1 << s) + 0.5) & (int16_t)0xffff)
>>
>> The "& 0xffff" is turning -21406 into 44130 since it zeroes all the high
>> bits, and then that value gets converted back to -21406 when stored into
>> an int16_t variable.
>>
>> Change the int cast into int16_t if you want since it doesn't hurt (all
>> the values are safely within the int16_t range anyway), but remove the
>> "& 0xffff" altogether instead of casting it, to get rid of this warning.
>>
>> >  #define C64(x)    ((uint64_t)((x) | (x) << 16)) <<32 | (uint64_t)(x) |
>> > (uint64_t)(x) << 16
>> >  #define FIX64(x,s)  C64(FIX(x,s))
>
> i think the C64 / FIX64 macros depend on the & 0xFFFF. They are maybe
> unused
> and just referenced in comments but having them not give correct values
> could still be confusing. The 0xFFFF if its removed should be added to the
> code / comments that refer to it in a way that needs it

New patch attached.
Not sure if / where to add comments.

Please comment, Carl Eugen

Comments

Michael Niedermayer April 18, 2019, 10:16 a.m. UTC | #1
On Tue, Apr 16, 2019 at 12:55:03AM +0200, Carl Eugen Hoyos wrote:
> 2019-04-14 1:02 GMT+02:00, Michael Niedermayer <michael@niedermayer.cc>:
> > On Sat, Apr 13, 2019 at 07:25:54PM -0300, James Almer wrote:
> >> On 4/13/2019 7:04 PM, Carl Eugen Hoyos wrote:
> >> > Hi!
> >> >
> >> > Attached patch silences two warnings shown when compiling with clang:
> >> > libavfilter/vf_fspp.h:51:42: warning: implicit conversion from 'int'
> >> > to 'int16_t' (aka 'short') changes value from 44130 to -21406
> >> >
> >> > Please comment, Carl Eugen
> >> >
> >> >
> >> > 0001-lavfi-vf_fspp-Use-the-intended-cast-to-int16_t.patch
> >> >
> >> > From d731e523d9c5854183d20d37fe921f49fb048498 Mon Sep 17 00:00:00 2001
> >> > From: Carl Eugen Hoyos <ceffmpeg@gmail.com>
> >> > Date: Sat, 13 Apr 2019 23:05:44 +0200
> >> > Subject: [PATCH] lavfi/fspp: Add two casts to int16_t.
> >> >
> >> > Silences a warning with clang:
> >> > warning: implicit conversion from 'int' to 'int16_t' (aka 'short')
> >> > changes value from 44130 to -21406
> >> > ---
> >> >  libavfilter/vf_fspp.h |    2 +-
> >> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >> >
> >> > diff --git a/libavfilter/vf_fspp.h b/libavfilter/vf_fspp.h
> >> > index 74a3447..e346439 100644
> >> > --- a/libavfilter/vf_fspp.h
> >> > +++ b/libavfilter/vf_fspp.h
> >> > @@ -31,7 +31,7 @@
> >> >  #define DCTSIZE 8
> >> >  #define DCTSIZE_S "8"
> >> >
> >> > -#define FIX(x,s)  ((int) ((x) * (1 << s) + 0.5) & 0xffff)
> >> > +#define FIX(x,s)  ((int16_t)((x) * (1 << s) + 0.5) & (int16_t)0xffff)
> >>
> >> The "& 0xffff" is turning -21406 into 44130 since it zeroes all the high
> >> bits, and then that value gets converted back to -21406 when stored into
> >> an int16_t variable.
> >>
> >> Change the int cast into int16_t if you want since it doesn't hurt (all
> >> the values are safely within the int16_t range anyway), but remove the
> >> "& 0xffff" altogether instead of casting it, to get rid of this warning.
> >>
> >> >  #define C64(x)    ((uint64_t)((x) | (x) << 16)) <<32 | (uint64_t)(x) |
> >> > (uint64_t)(x) << 16
> >> >  #define FIX64(x,s)  C64(FIX(x,s))
> >
> > i think the C64 / FIX64 macros depend on the & 0xFFFF. They are maybe
> > unused
> > and just referenced in comments but having them not give correct values
> > could still be confusing. The 0xFFFF if its removed should be added to the
> > code / comments that refer to it in a way that needs it
> 
> New patch attached.
> Not sure if / where to add comments.
> 
> Please comment, Carl Eugen

>  vf_fspp.h |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 17e468ee43988ef39d3ce882774dc3e2d625c9e6  0001-lavfi-fspp-Cast-float-values-to-int16_t-instead-of-i.patch
> From dfda9d8a6714649015f252e0e0bf5e3e52ce1b5c Mon Sep 17 00:00:00 2001
> From: Carl Eugen Hoyos <ceffmpeg@gmail.com>
> Date: Tue, 16 Apr 2019 00:50:50 +0200
> Subject: [PATCH] lavfi/fspp: Cast float values to int16_t instead of int.
> 
> Silences a warning with clang:
> warning: implicit conversion from 'int' to 'int16_t' (aka 'short') changes value from 44130 to -21406
> ---
>  libavfilter/vf_fspp.h |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/libavfilter/vf_fspp.h b/libavfilter/vf_fspp.h
> index 802db14..bdafe8e 100644
> --- a/libavfilter/vf_fspp.h
> +++ b/libavfilter/vf_fspp.h
> @@ -31,7 +31,7 @@
>  #define DCTSIZE 8
>  #define DCTSIZE_S "8"
>  
> -#define FIX(x,s)  ((int) ((x) * (1 << s) + 0.5) & 0xffff)
> +#define FIX(x,s)  ((int16_t)((x) * (1 << s) + 0.5))

does it need the cast at all to avoid the warning ?

[...]
diff mbox

Patch

From dfda9d8a6714649015f252e0e0bf5e3e52ce1b5c Mon Sep 17 00:00:00 2001
From: Carl Eugen Hoyos <ceffmpeg@gmail.com>
Date: Tue, 16 Apr 2019 00:50:50 +0200
Subject: [PATCH] lavfi/fspp: Cast float values to int16_t instead of int.

Silences a warning with clang:
warning: implicit conversion from 'int' to 'int16_t' (aka 'short') changes value from 44130 to -21406
---
 libavfilter/vf_fspp.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavfilter/vf_fspp.h b/libavfilter/vf_fspp.h
index 802db14..bdafe8e 100644
--- a/libavfilter/vf_fspp.h
+++ b/libavfilter/vf_fspp.h
@@ -31,7 +31,7 @@ 
 #define DCTSIZE 8
 #define DCTSIZE_S "8"
 
-#define FIX(x,s)  ((int) ((x) * (1 << s) + 0.5) & 0xffff)
+#define FIX(x,s)  ((int16_t)((x) * (1 << s) + 0.5))
 
 #define MULTIPLY16H(x,k)   (((x) * (k)) >> 16)
 #define THRESHOLD(r,x,t)                         \
-- 
1.7.10.4