aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2002-08-22 19:41:39 +0000
committerMichael Niedermayer <michaelni@gmx.at>2002-08-22 19:41:39 +0000
commitf36db5dfd3c3cfd5d2e9feb0462c18431183cff5 (patch)
treedd74494896ac8b73d360250d263229b5f3a8e573 /libavcodec
parent1fb4890b5195db4de31733a234abb946f9399f3e (diff)
downloadffmpeg-f36db5dfd3c3cfd5d2e9feb0462c18431183cff5.tar.gz
faster ff_sqrt()
Originally committed as revision 859 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/common.c7
-rw-r--r--libavcodec/common.h6
2 files changed, 12 insertions, 1 deletions
diff --git a/libavcodec/common.c b/libavcodec/common.c
index 63d17b6c2b..fde12d9270 100644
--- a/libavcodec/common.c
+++ b/libavcodec/common.c
@@ -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,
diff --git a/libavcodec/common.h b/libavcodec/common.h
index bacc6470e1..c3010896e9 100644
--- a/libavcodec/common.h
+++ b/libavcodec/common.h
@@ -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){