[FFmpeg-devel] [PATCH] Make LOCAL_ALIGNED macro fully C99 compatible

Janne Grunau janne-ffmpeg
Sat Jan 22 18:12:15 CET 2011


On Fri, Jan 21, 2011 at 06:54:55PM +0000, Mans Rullgard wrote:
> C99 variadic macros require more arguments than there are named
> parameters in the definition.  This means we must use an extra
> indirection to avoid having two different macros for arrays with
> one resp more than one dimension.
> 
> Signed-off-by: Mans Rullgard <mans at mansr.com>
> ---
>  libavcodec/dsputil.h |   18 +++++++++++-------
>  1 files changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h
> index 0efbad9..e223776 100644
> --- a/libavcodec/dsputil.h
> +++ b/libavcodec/dsputil.h
> @@ -663,20 +663,24 @@ static inline void emms(void)
>  #   define STRIDE_ALIGN 8
>  #endif
>  
> -#define LOCAL_ALIGNED(a, t, v, s, ...)                          \
> -    uint8_t la_##v[sizeof(t s __VA_ARGS__) + (a)];              \
> -    t (*v) __VA_ARGS__ = (void *)FFALIGN((uintptr_t)la_##v, a)
> +#define LOCAL_ALIGNED_A(a, t, v, s, o, ...)             \
> +    uint8_t la_##v[sizeof(t s o) + (a)];                \
> +    t (*v) o = (void *)FFALIGN((uintptr_t)la_##v, a)
> +
> +#define LOCAL_ALIGNED_D(a, t, v, s, o, ...) DECLARE_ALIGNED(a, t, v) s o
> +
> +#define LOCAL_ALIGNED(a, t, v, ...) LOCAL_ALIGNED_A(a, t, v, __VA_ARGS__,,)
>  
>  #if HAVE_LOCAL_ALIGNED_8
> -#   define LOCAL_ALIGNED_8(t, v, s, ...) DECLARE_ALIGNED(8, t, v) s __VA_ARGS__
> +#   define LOCAL_ALIGNED_8(t, v, ...) LOCAL_ALIGNED_D(8, t, v, __VA_ARGS__,,)
>  #else
> -#   define LOCAL_ALIGNED_8(t, v, s, ...) LOCAL_ALIGNED(8, t, v, s, __VA_ARGS__)
> +#   define LOCAL_ALIGNED_8(t, v, ...) LOCAL_ALIGNED(8, t, v, __VA_ARGS__)
>  #endif
>  
>  #if HAVE_LOCAL_ALIGNED_16
> -#   define LOCAL_ALIGNED_16(t, v, s, ...) DECLARE_ALIGNED(16, t, v) s __VA_ARGS__
> +#   define LOCAL_ALIGNED_16(t, v, ...) LOCAL_ALIGNED_D(16, t, v, __VA_ARGS__,,)
>  #else
> -#   define LOCAL_ALIGNED_16(t, v, s, ...) LOCAL_ALIGNED(16, t, v, s, __VA_ARGS__)
> +#   define LOCAL_ALIGNED_16(t, v, ...) LOCAL_ALIGNED(16, t, v, __VA_ARGS__)
>  #endif
>  
>  /* PSNR */

ok

Janne



More information about the ffmpeg-devel mailing list