[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