Browse Source

faster ff_sqrt()

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

+ 7
- 0
libavcodec/common.c View File

@@ -20,6 +20,13 @@
*/
#include "avcodec.h"

const UINT8 ff_sqrt_tab[128]={
0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 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,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
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
};

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


+ 5
- 1
libavcodec/common.h View File

@@ -901,6 +901,8 @@ static inline int clip(int a, int amin, int amax)
}

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

int ff_gcd(int a, int b);

static inline int ff_sqrt(int a)
@@ -908,7 +910,9 @@ static inline int ff_sqrt(int a)
int ret=0;
int s;
int ret_sq=0;

if(a<128) return ff_sqrt_tab[a];
for(s=15; s>=0; s--){
int b= ret_sq + (1<<(s*2)) + (ret<<s)*2;
if(b<=a){


Loading…
Cancel
Save