Browse Source

optimizing av_log2

Originally committed as revision 1515 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.5
Michael Niedermayer 23 years ago
parent
commit
c81f034988
2 changed files with 29 additions and 11 deletions
  1. +11
    -0
      libavcodec/common.c
  2. +18
    -11
      libavcodec/common.h

+ 11
- 0
libavcodec/common.c View File

@@ -27,6 +27,17 @@ const UINT8 ff_sqrt_tab[128]={
9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11
};

const uint8_t ff_log2_tab[256]={
0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
};

void init_put_bits(PutBitContext *s,
UINT8 *buffer, int buffer_size,
void *opaque,


+ 18
- 11
libavcodec/common.h View File

@@ -804,6 +804,7 @@ void print_stats(void);
#endif

/* misc math functions */
extern const uint8_t ff_log2_tab[256];

static inline int av_log2(unsigned int v)
{
@@ -818,20 +819,26 @@ static inline int av_log2(unsigned int v)
v >>= 8;
n += 8;
}
if (v & 0xf0) {
v >>= 4;
n += 4;
}
if (v & 0xc) {
v >>= 2;
n += 2;
}
if (v & 0x2) {
n++;
n += ff_log2_tab[v];

return n;
}

static inline int av_log2_16bit(unsigned int v)
{
int n;

n = 0;
if (v & 0xff00) {
v >>= 8;
n += 8;
}
n += ff_log2_tab[v];

return n;
}


/* median of 3 */
static inline int mid_pred(int a, int b, int c)
{
@@ -861,7 +868,7 @@ static inline int clip(int a, int amin, int amax)
}

/* math */
extern const UINT8 ff_sqrt_tab[128];
extern const uint8_t ff_sqrt_tab[128];

int ff_gcd(int a, int b);



Loading…
Cancel
Save