From: Mans Rullgard Date: Thu, 20 Jan 2011 02:04:54 +0000 (+0000) Subject: Make LOCAL_ALIGNED macro fully C99 compatible X-Git-Tag: v0.7b1~864 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=96aad41e8157b7c6b577803054e20a0771857424;p=platform%2Fupstream%2Flibav.git Make LOCAL_ALIGNED macro fully C99 compatible 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 --- diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h index c619b78..842d727 100644 --- a/libavcodec/dsputil.h +++ b/libavcodec/dsputil.h @@ -661,20 +661,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 */