changeset 609:153a7ffd289b libavcodec

faster ff_sqrt()
author michaelni
date Thu, 22 Aug 2002 19:41:39 +0000
parents 98e39397636b
children 015b33f3e750
files common.c common.h
diffstat 2 files changed, 12 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/common.c	Thu Aug 22 19:41:06 2002 +0000
+++ b/common.c	Thu Aug 22 19:41:39 2002 +0000
@@ -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,
--- a/common.h	Thu Aug 22 19:41:06 2002 +0000
+++ b/common.h	Thu Aug 22 19:41:39 2002 +0000
@@ -901,6 +901,8 @@
 }
 
 /* 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 @@
     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){