This removes inline av_log2 and av_log2_16bit from the public API, instead exporting them as regular functions. In-tree code still gets the inline and otherwise optimised variants. Signed-off-by: Mans Rullgard <mans@mansr.com>tags/n1.1
| @@ -69,6 +69,7 @@ OBJS = adler32.o \ | |||
| lfg.o \ | |||
| lls.o \ | |||
| log.o \ | |||
| log2.o \ | |||
| log2_tab.o \ | |||
| lzo.o \ | |||
| mathematics.o \ | |||
| @@ -62,40 +62,11 @@ | |||
| #define FFALIGN(x, a) (((x)+(a)-1)&~((a)-1)) | |||
| /* misc math functions */ | |||
| extern const uint8_t ff_log2_tab[256]; | |||
| #if FF_API_AV_REVERSE | |||
| extern attribute_deprecated const uint8_t av_reverse[256]; | |||
| #endif | |||
| static av_always_inline av_const int av_log2_c(unsigned int v) | |||
| { | |||
| int n = 0; | |||
| if (v & 0xffff0000) { | |||
| v >>= 16; | |||
| n += 16; | |||
| } | |||
| if (v & 0xff00) { | |||
| v >>= 8; | |||
| n += 8; | |||
| } | |||
| n += ff_log2_tab[v]; | |||
| return n; | |||
| } | |||
| static av_always_inline av_const int av_log2_16bit_c(unsigned int v) | |||
| { | |||
| int n = 0; | |||
| if (v & 0xff00) { | |||
| v >>= 8; | |||
| n += 8; | |||
| } | |||
| n += ff_log2_tab[v]; | |||
| return n; | |||
| } | |||
| #ifdef HAVE_AV_CONFIG_H | |||
| # include "config.h" | |||
| # include "intmath.h" | |||
| @@ -104,6 +75,14 @@ static av_always_inline av_const int av_log2_16bit_c(unsigned int v) | |||
| /* Pull in unguarded fallback defines at the end of this file. */ | |||
| #include "common.h" | |||
| #ifndef av_log2 | |||
| av_const int av_log2(unsigned v); | |||
| #endif | |||
| #ifndef av_log2_16bit | |||
| av_const int av_log2_16bit(unsigned v); | |||
| #endif | |||
| /** | |||
| * Clip a signed integer value into the amin-amax range. | |||
| * @param a value to clip | |||
| @@ -385,12 +364,6 @@ static av_always_inline av_const int av_popcount64_c(uint64_t x) | |||
| * to ensure they are immediately available in intmath.h. | |||
| */ | |||
| #ifndef av_log2 | |||
| # define av_log2 av_log2_c | |||
| #endif | |||
| #ifndef av_log2_16bit | |||
| # define av_log2_16bit av_log2_16bit_c | |||
| #endif | |||
| #ifndef av_ceil_log2 | |||
| # define av_ceil_log2 av_ceil_log2_c | |||
| #endif | |||
| @@ -21,6 +21,8 @@ | |||
| #ifndef AVUTIL_INTMATH_H | |||
| #define AVUTIL_INTMATH_H | |||
| #include <stdint.h> | |||
| #include "config.h" | |||
| #include "attributes.h" | |||
| @@ -31,15 +33,54 @@ | |||
| #if HAVE_FAST_CLZ && AV_GCC_VERSION_AT_LEAST(3,4) | |||
| #ifndef av_log2 | |||
| # define av_log2(x) (31 - __builtin_clz((x)|1)) | |||
| # ifndef av_log2_16bit | |||
| # define av_log2_16bit av_log2 | |||
| #ifndef ff_log2 | |||
| # define ff_log2(x) (31 - __builtin_clz((x)|1)) | |||
| # ifndef ff_log2_16bit | |||
| # define ff_log2_16bit av_log2 | |||
| # endif | |||
| #endif /* av_log2 */ | |||
| #endif /* ff_log2 */ | |||
| #endif /* AV_GCC_VERSION_AT_LEAST(3,4) */ | |||
| extern const uint8_t ff_log2_tab[256]; | |||
| #ifndef ff_log2 | |||
| #define ff_log2 ff_log2_c | |||
| static av_always_inline av_const int ff_log2_c(unsigned int v) | |||
| { | |||
| int n = 0; | |||
| if (v & 0xffff0000) { | |||
| v >>= 16; | |||
| n += 16; | |||
| } | |||
| if (v & 0xff00) { | |||
| v >>= 8; | |||
| n += 8; | |||
| } | |||
| n += ff_log2_tab[v]; | |||
| return n; | |||
| } | |||
| #endif | |||
| #ifndef ff_log2_16bit | |||
| #define ff_log2_16bit ff_log2_16bit_c | |||
| static av_always_inline av_const int ff_log2_16bit_c(unsigned int v) | |||
| { | |||
| int n = 0; | |||
| if (v & 0xff00) { | |||
| v >>= 8; | |||
| n += 8; | |||
| } | |||
| n += ff_log2_tab[v]; | |||
| return n; | |||
| } | |||
| #endif | |||
| #define av_log2 ff_log2 | |||
| #define av_log2_16bit ff_log2_16bit | |||
| /** | |||
| * @} | |||
| */ | |||
| @@ -0,0 +1,34 @@ | |||
| /* | |||
| * This file is part of Libav. | |||
| * | |||
| * Libav is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU Lesser General Public | |||
| * License as published by the Free Software Foundation; either | |||
| * version 2.1 of the License, or (at your option) any later version. | |||
| * | |||
| * Libav is distributed in the hope that it will be useful, | |||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
| * Lesser General Public License for more details. | |||
| * | |||
| * You should have received a copy of the GNU Lesser General Public | |||
| * License along with Libav; if not, write to the Free Software | |||
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||
| */ | |||
| #include "intmath.h" | |||
| /* undef these to get the function prototypes from common.h */ | |||
| #undef av_log2 | |||
| #undef av_log2_16bit | |||
| #include "common.h" | |||
| int av_log2(unsigned v) | |||
| { | |||
| return ff_log2(v); | |||
| } | |||
| int av_log2_16bit(unsigned v) | |||
| { | |||
| return ff_log2_16bit(v); | |||
| } | |||