mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-18 21:30:55 +00:00
faster ff_sqrt()
Originally committed as revision 859 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
1fb4890b51
commit
f36db5dfd3
@ -20,6 +20,13 @@
|
|||||||
*/
|
*/
|
||||||
#include "avcodec.h"
|
#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,
|
void init_put_bits(PutBitContext *s,
|
||||||
UINT8 *buffer, int buffer_size,
|
UINT8 *buffer, int buffer_size,
|
||||||
void *opaque,
|
void *opaque,
|
||||||
|
@ -901,6 +901,8 @@ static inline int clip(int a, int amin, int amax)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* math */
|
/* math */
|
||||||
|
extern const UINT8 ff_sqrt_tab[128];
|
||||||
|
|
||||||
int ff_gcd(int a, int b);
|
int ff_gcd(int a, int b);
|
||||||
|
|
||||||
static inline int ff_sqrt(int a)
|
static inline int ff_sqrt(int a)
|
||||||
@ -908,7 +910,9 @@ static inline int ff_sqrt(int a)
|
|||||||
int ret=0;
|
int ret=0;
|
||||||
int s;
|
int s;
|
||||||
int ret_sq=0;
|
int ret_sq=0;
|
||||||
|
|
||||||
|
if(a<128) return ff_sqrt_tab[a];
|
||||||
|
|
||||||
for(s=15; s>=0; s--){
|
for(s=15; s>=0; s--){
|
||||||
int b= ret_sq + (1<<(s*2)) + (ret<<s)*2;
|
int b= ret_sq + (1<<(s*2)) + (ret<<s)*2;
|
||||||
if(b<=a){
|
if(b<=a){
|
||||||
|
Loading…
Reference in New Issue
Block a user