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 \ | lfg.o \ | ||||
| lls.o \ | lls.o \ | ||||
| log.o \ | log.o \ | ||||
| log2.o \ | |||||
| log2_tab.o \ | log2_tab.o \ | ||||
| lzo.o \ | lzo.o \ | ||||
| mathematics.o \ | mathematics.o \ | ||||
| @@ -62,40 +62,11 @@ | |||||
| #define FFALIGN(x, a) (((x)+(a)-1)&~((a)-1)) | #define FFALIGN(x, a) (((x)+(a)-1)&~((a)-1)) | ||||
| /* misc math functions */ | /* misc math functions */ | ||||
| extern const uint8_t ff_log2_tab[256]; | |||||
| #if FF_API_AV_REVERSE | #if FF_API_AV_REVERSE | ||||
| extern attribute_deprecated const uint8_t av_reverse[256]; | extern attribute_deprecated const uint8_t av_reverse[256]; | ||||
| #endif | #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 | #ifdef HAVE_AV_CONFIG_H | ||||
| # include "config.h" | # include "config.h" | ||||
| # include "intmath.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. */ | /* Pull in unguarded fallback defines at the end of this file. */ | ||||
| #include "common.h" | #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. | * Clip a signed integer value into the amin-amax range. | ||||
| * @param a value to clip | * @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. | * 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 | #ifndef av_ceil_log2 | ||||
| # define av_ceil_log2 av_ceil_log2_c | # define av_ceil_log2 av_ceil_log2_c | ||||
| #endif | #endif | ||||
| @@ -21,6 +21,8 @@ | |||||
| #ifndef AVUTIL_INTMATH_H | #ifndef AVUTIL_INTMATH_H | ||||
| #define AVUTIL_INTMATH_H | #define AVUTIL_INTMATH_H | ||||
| #include <stdint.h> | |||||
| #include "config.h" | #include "config.h" | ||||
| #include "attributes.h" | #include "attributes.h" | ||||
| @@ -31,15 +33,54 @@ | |||||
| #if HAVE_FAST_CLZ && AV_GCC_VERSION_AT_LEAST(3,4) | #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 | ||||
| #endif /* av_log2 */ | |||||
| #endif /* ff_log2 */ | |||||
| #endif /* AV_GCC_VERSION_AT_LEAST(3,4) */ | #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); | |||||
| } | |||||