lavu: add av_ctz() for trailing zero bit count

This commit is contained in:
Justin Ruggles 2012-10-26 14:48:40 -04:00
parent 6a744d2619
commit dfde8a34e5
5 changed files with 65 additions and 2 deletions

View File

@ -13,6 +13,9 @@ libavutil: 2012-10-22
API changes, most recent first:
2012-xx-xx - xxxxxxx - lavu 52.1.0 - intmath.h
Add av_ctz() for trailing zero bit count
2012-10-18 - xxxxxxx - lavu 51.45.0 - error.h
Add AVERROR_EXPERIMENTAL

View File

@ -67,10 +67,10 @@ OBJS = adler32.o \
float_dsp.o \
imgutils.o \
intfloat_readwrite.o \
intmath.o \
lfg.o \
lls.o \
log.o \
log2.o \
log2_tab.o \
mathematics.o \
md5.o \

View File

@ -32,3 +32,8 @@ int av_log2_16bit(unsigned v)
{
return ff_log2_16bit(v);
}
int av_ctz(int v)
{
return ff_ctz(v);
}

View File

@ -85,6 +85,61 @@ static av_always_inline av_const int ff_log2_16bit_c(unsigned int v)
#define av_log2 ff_log2
#define av_log2_16bit ff_log2_16bit
/**
* @}
*/
/**
* @addtogroup lavu_math
* @{
*/
#if HAVE_FAST_CLZ && AV_GCC_VERSION_AT_LEAST(3,4)
#ifndef ff_ctz
#define ff_ctz(v) __builtin_ctz(v)
#endif
#endif
#ifndef ff_ctz
#define ff_ctz ff_ctz_c
static av_always_inline av_const int ff_ctz_c(int v)
{
int c;
if (v & 0x1)
return 0;
c = 1;
if (!(v & 0xffff)) {
v >>= 16;
c += 16;
}
if (!(v & 0xff)) {
v >>= 8;
c += 8;
}
if (!(v & 0xf)) {
v >>= 4;
c += 4;
}
if (!(v & 0x3)) {
v >>= 2;
c += 2;
}
c -= v & 0x1;
return c;
}
#endif
/**
* Trailing zero bit count.
*
* @param v input value. If v is 0, the result is undefined.
* @return the number of trailing 0-bits
*/
int av_ctz(int v);
/**
* @}
*/

View File

@ -37,7 +37,7 @@
*/
#define LIBAVUTIL_VERSION_MAJOR 52
#define LIBAVUTIL_VERSION_MINOR 0
#define LIBAVUTIL_VERSION_MINOR 1
#define LIBAVUTIL_VERSION_MICRO 0
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \