[FFmpeg-devel] [PATCH] lavu/common: Fix AV_CEIL_RSHIFT for unsigned LHS

Frank Plowman post at frankplowman.com
Mon Oct 14 23:27:21 EEST 2024


Ping

Here is a demo of the issue: https://godbolt.org/z/hYnYvbcjE

On 05/10/2024 23:38, Frank Plowman wrote:
> The first branch of this ternary expression was intended to avoid
> having two shift operations in the case the RHS is not known at
> compile time.  It only works if the LHS has a signed type however,
> otherwise the result is invalid.
> 
> We could alternatively have different versions of AV_CEIL_RSHIFT for
> different sizes of operand, then cast the LHS to the relevant signed
> type.
> 
> Signed-off-by: Frank Plowman <post at frankplowman.com>
> ---
>  libavutil/common.h | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/libavutil/common.h b/libavutil/common.h
> index 3b830daf30..ec38752b64 100644
> --- a/libavutil/common.h
> +++ b/libavutil/common.h
> @@ -57,8 +57,7 @@
>  /* assume b>0 */
>  #define ROUNDED_DIV(a,b) (((a)>=0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b))
>  /* Fast a/(1<<b) rounded toward +inf. Assume a>=0 and b>=0 */
> -#define AV_CEIL_RSHIFT(a,b) (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) \
> -                                                       : ((a) + (1<<(b)) - 1) >> (b))
> +#define AV_CEIL_RSHIFT(a,b) (((a) + (1<<(b)) - 1) >> (b))
>  /* Backwards compat. */
>  #define FF_CEIL_RSHIFT AV_CEIL_RSHIFT
>  



More information about the ffmpeg-devel mailing list