[FFmpeg-devel] [PATCH 4/4] avutil/common: Move everything inside inclusion guards

Andreas Rheinhardt andreas.rheinhardt at gmail.com
Mon Feb 8 13:56:37 EET 2021


Andreas Rheinhardt:
> libavutil/common.h is a public header that provides generic math
> functions whereas libavutil/intmath.h is a private header that contains
> plattform-specific optimized versions of said math functions. common.h
> includes intmath.h (when building the FFmpeg libraries) so that the
> optimized versions are used for them.
> 
> This interdependency sometimes causes trouble: intmath.h once contained
> an inlined ff_sqrt function that relied upon av_log2_16bit. In case there
> was no optimized logarithm available on this plattform, intmath.h needed
> to include common.h to get the generic implementation and this has been
> done after the optimized versions (if any) have been provided so that
> common.h used the optimized versions; it also needed to be done before
> ff_sqrt. Yet when intmath.h was included from common.h and if an ordinary
> inclusion guard was used by common.h, the #include "common.h" in intmath.h
> was a no-op and therefore av_log2_16bit was still unknown at the end of
> intmath.h (and also in ff_sqrt) if no optimized version was available.
> 
> Before a955b5965825631986ba854d007d4e934e466c7d this was solved by
> duplicating the #ifndef av_log2_16bit check after the inclusion of
> common.h in intmath.h; said commit instead moved these checks to the
> end of common.h, outside the inclusion guards and made common.h include
> itself to get these unguarded defines. This is still the current
> state of affairs.
> 
> Yet this is unnecessary since 9734b8ba56d05e970c353dfd5baafa43fdb08024
> as said commit removed ff_sqrt as well as the #include "common.h" from
> intmath.h. Therefore this commit moves everything inside the inclusion
> guards and makes common.h not include itself.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
>  libavutil/common.h | 140 +++++++++++++++++++++------------------------
>  1 file changed, 66 insertions(+), 74 deletions(-)
> 
> diff --git a/libavutil/common.h b/libavutil/common.h
> index a60a558b1d..fde90182ee 100644
> --- a/libavutil/common.h
> +++ b/libavutil/common.h
> @@ -114,8 +114,72 @@
>  #   include "intmath.h"
>  #endif
>  
> -/* Pull in unguarded fallback defines at the end of this file. */
> -#include "common.h"
> +#ifndef av_ceil_log2
> +#   define av_ceil_log2     av_ceil_log2_c
> +#endif
> +#ifndef av_clip
> +#   define av_clip          av_clip_c
> +#endif
> +#ifndef av_clip64
> +#   define av_clip64        av_clip64_c
> +#endif
> +#ifndef av_clip_uint8
> +#   define av_clip_uint8    av_clip_uint8_c
> +#endif
> +#ifndef av_clip_int8
> +#   define av_clip_int8     av_clip_int8_c
> +#endif
> +#ifndef av_clip_uint16
> +#   define av_clip_uint16   av_clip_uint16_c
> +#endif
> +#ifndef av_clip_int16
> +#   define av_clip_int16    av_clip_int16_c
> +#endif
> +#ifndef av_clipl_int32
> +#   define av_clipl_int32   av_clipl_int32_c
> +#endif
> +#ifndef av_clip_intp2
> +#   define av_clip_intp2    av_clip_intp2_c
> +#endif
> +#ifndef av_clip_uintp2
> +#   define av_clip_uintp2   av_clip_uintp2_c
> +#endif
> +#ifndef av_mod_uintp2
> +#   define av_mod_uintp2    av_mod_uintp2_c
> +#endif
> +#ifndef av_sat_add32
> +#   define av_sat_add32     av_sat_add32_c
> +#endif
> +#ifndef av_sat_dadd32
> +#   define av_sat_dadd32    av_sat_dadd32_c
> +#endif
> +#ifndef av_sat_sub32
> +#   define av_sat_sub32     av_sat_sub32_c
> +#endif
> +#ifndef av_sat_dsub32
> +#   define av_sat_dsub32    av_sat_dsub32_c
> +#endif
> +#ifndef av_sat_add64
> +#   define av_sat_add64     av_sat_add64_c
> +#endif
> +#ifndef av_sat_sub64
> +#   define av_sat_sub64     av_sat_sub64_c
> +#endif
> +#ifndef av_clipf
> +#   define av_clipf         av_clipf_c
> +#endif
> +#ifndef av_clipd
> +#   define av_clipd         av_clipd_c
> +#endif
> +#ifndef av_popcount
> +#   define av_popcount      av_popcount_c
> +#endif
> +#ifndef av_popcount64
> +#   define av_popcount64    av_popcount64_c
> +#endif
> +#ifndef av_parity
> +#   define av_parity        av_parity_c
> +#endif
>  
>  #ifndef av_log2
>  av_const int av_log2(unsigned v);
> @@ -541,75 +605,3 @@ static av_always_inline av_const int av_parity_c(uint32_t v)
>  #endif /* HAVE_AV_CONFIG_H */
>  
>  #endif /* AVUTIL_COMMON_H */
> -
> -/*
> - * The following definitions are outside the multiple inclusion guard
> - * to ensure they are immediately available in intmath.h.
> - */
> -
> -#ifndef av_ceil_log2
> -#   define av_ceil_log2     av_ceil_log2_c
> -#endif
> -#ifndef av_clip
> -#   define av_clip          av_clip_c
> -#endif
> -#ifndef av_clip64
> -#   define av_clip64        av_clip64_c
> -#endif
> -#ifndef av_clip_uint8
> -#   define av_clip_uint8    av_clip_uint8_c
> -#endif
> -#ifndef av_clip_int8
> -#   define av_clip_int8     av_clip_int8_c
> -#endif
> -#ifndef av_clip_uint16
> -#   define av_clip_uint16   av_clip_uint16_c
> -#endif
> -#ifndef av_clip_int16
> -#   define av_clip_int16    av_clip_int16_c
> -#endif
> -#ifndef av_clipl_int32
> -#   define av_clipl_int32   av_clipl_int32_c
> -#endif
> -#ifndef av_clip_intp2
> -#   define av_clip_intp2    av_clip_intp2_c
> -#endif
> -#ifndef av_clip_uintp2
> -#   define av_clip_uintp2   av_clip_uintp2_c
> -#endif
> -#ifndef av_mod_uintp2
> -#   define av_mod_uintp2    av_mod_uintp2_c
> -#endif
> -#ifndef av_sat_add32
> -#   define av_sat_add32     av_sat_add32_c
> -#endif
> -#ifndef av_sat_dadd32
> -#   define av_sat_dadd32    av_sat_dadd32_c
> -#endif
> -#ifndef av_sat_sub32
> -#   define av_sat_sub32     av_sat_sub32_c
> -#endif
> -#ifndef av_sat_dsub32
> -#   define av_sat_dsub32    av_sat_dsub32_c
> -#endif
> -#ifndef av_sat_add64
> -#   define av_sat_add64     av_sat_add64_c
> -#endif
> -#ifndef av_sat_sub64
> -#   define av_sat_sub64     av_sat_sub64_c
> -#endif
> -#ifndef av_clipf
> -#   define av_clipf         av_clipf_c
> -#endif
> -#ifndef av_clipd
> -#   define av_clipd         av_clipd_c
> -#endif
> -#ifndef av_popcount
> -#   define av_popcount      av_popcount_c
> -#endif
> -#ifndef av_popcount64
> -#   define av_popcount64    av_popcount64_c
> -#endif
> -#ifndef av_parity
> -#   define av_parity        av_parity_c
> -#endif
> 
Will apply this patchset tomorrow unless there are objections.

- Andreas


More information about the ffmpeg-devel mailing list