[FFmpeg-devel] [PATCH] lavu/intmath: add faster clz support

Ganesh Ajjanagadde gajjanagadde at gmail.com
Thu Dec 17 17:53:41 CET 2015


On Thu, Dec 17, 2015 at 8:33 AM, Ganesh Ajjanagadde
<gajjanagadde at gmail.com> wrote:
> This should be useful for the sofalizer filter.
>
> Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
> ---
>  libavutil/intmath.h | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
>
> diff --git a/libavutil/intmath.h b/libavutil/intmath.h
> index 2016723..2bb0b62 100644
> --- a/libavutil/intmath.h
> +++ b/libavutil/intmath.h
> @@ -96,6 +96,9 @@ static av_always_inline av_const int ff_log2_16bit_c(unsigned int v)
>  #ifndef ff_ctzll
>  #define ff_ctzll(v) __builtin_ctzll(v)
>  #endif
> +#ifndef ff_clz
> +#define ff_clz(v) __builtin_clz(v)
> +#endif
>  #endif
>  #endif
>
> @@ -135,6 +138,21 @@ static av_always_inline av_const int ff_ctzll_c(long long v)
>  }
>  #endif
>
> +#ifndef ff_clz
> +#define ff_clz ff_clz_c
> +static av_always_inline av_const unsigned ff_clz_c(unsigned v)
> +{
> +    unsigned i = sizeof(x) * 8;
> +
> +    while (x) {
> +        x >>= 1;
> +        i--;
> +    }
> +
> +    return i;
> +}
> +#endif
> +
>  /**
>   * @}
>   */
> --
> 2.6.4
>

BTW, there is one very important thing to keep in mind: behavior of
__builtin_clz is undefined for input 0.
I assumed the undefined behavior is ok wrt sofalizer for instance, as
based on a cursory examination, I doubt 0 is intended to be passed
into clz.

Also, I missed the right type signature, return is an int; though I
doubt this actually matters in practice here.


More information about the ffmpeg-devel mailing list