[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