Mercurial > libavcodec.hg
comparison utils.c @ 2800:bf5c4e9dc75a libavcodec
portable IEEE float/double read/write functions
| author | michael |
|---|---|
| date | Tue, 19 Jul 2005 13:29:13 +0000 |
| parents | f191093dc8fe |
| children | af3a36e20010 |
comparison
equal
deleted
inserted
replaced
| 2799:924c7e66ced8 | 2800:bf5c4e9dc75a |
|---|---|
| 990 int64_t ff_gcd(int64_t a, int64_t b){ | 990 int64_t ff_gcd(int64_t a, int64_t b){ |
| 991 if(b) return ff_gcd(b, a%b); | 991 if(b) return ff_gcd(b, a%b); |
| 992 else return a; | 992 else return a; |
| 993 } | 993 } |
| 994 | 994 |
| 995 double av_int2dbl(int64_t v){ | |
| 996 if(v+v > 0xFFELLU<<52) | |
| 997 return 0.0/0.0; | |
| 998 return ldexp(((v&(1LL<<52)-1) + (1LL<<52)) * (v>>63|1), (v>>52&0x7FF)-1075); | |
| 999 } | |
| 1000 | |
| 1001 float av_int2flt(int32_t v){ | |
| 1002 if(v+v > 0xFF000000U) | |
| 1003 return 0.0/0.0; | |
| 1004 return ldexp(((v&0x7FFFFF) + (1<<23)) * (v>>31|1), (v>>23&0xFF)-150); | |
| 1005 } | |
| 1006 | |
| 1007 int64_t av_dbl2int(double d){ | |
| 1008 int e; | |
| 1009 if ( !d) return 0; | |
| 1010 else if(d-d) return 0x7FF0000000000000LL + ((int64_t)(d<0)<<63) + (d!=d); | |
| 1011 d= frexp(d, &e); | |
| 1012 return (int64_t)(d<0)<<63 | (e+1022LL)<<52 | (int64_t)((fabs(d)-0.5)*(1LL<<53)); | |
| 1013 } | |
| 1014 | |
| 1015 int32_t av_flt2int(float d){ | |
| 1016 int e; | |
| 1017 if ( !d) return 0; | |
| 1018 else if(d-d) return 0x7F800000 + ((d<0)<<31) + (d!=d); | |
| 1019 d= frexp(d, &e); | |
| 1020 return (d<0)<<31 | (e+126)<<23 | (int64_t)((fabs(d)-0.5)*(1<<24)); | |
| 1021 } | |
| 1022 | |
| 995 /* av_log API */ | 1023 /* av_log API */ |
| 996 | 1024 |
| 997 static int av_log_level = AV_LOG_INFO; | 1025 static int av_log_level = AV_LOG_INFO; |
| 998 | 1026 |
| 999 static void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) | 1027 static void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) |
