diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2006-09-17 08:52:41 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2006-09-17 08:52:41 +0000 |
commit | e66477afbe0d3d48852b513c95497809a2fc2739 (patch) | |
tree | 607cecea26eb160f965381ad554b63d8e8ede091 | |
parent | 99f6278e31d7efa02e84b10fecfcb4f65a78ab7f (diff) | |
download | ffmpeg-e66477afbe0d3d48852b513c95497809a2fc2739.tar.gz |
support SI and some non SI prefixes
Originally committed as revision 6284 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/eval.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/libavcodec/eval.c b/libavcodec/eval.c index 5b0e51d627..cf1b8c7409 100644 --- a/libavcodec/eval.c +++ b/libavcodec/eval.c @@ -64,6 +64,28 @@ static int strmatch(const char *s, const char *prefix){ return 1; } +static int8_t si_prefixes['z' - 'E' + 1]={ + ['y'-'E']= -24, + ['z'-'E']= -21, + ['a'-'E']= -18, + ['f'-'E']= -15, + ['p'-'E']= -12, + ['n'-'E']= - 9, + ['u'-'E']= - 6, + ['m'-'E']= - 3, + ['c'-'E']= - 2, + ['d'-'E']= - 1, + ['h'-'E']= 2, + ['k'-'E']= 3, + ['M'-'E']= 6, + ['G'-'E']= 9, + ['T'-'E']= 12, + ['P'-'E']= 15, + ['E'-'E']= 18, + ['Z'-'E']= 21, + ['Y'-'E']= 24, +}; + static double evalPrimary(Parser *p){ double d, d2=NAN; char *next= p->s; @@ -72,6 +94,18 @@ static double evalPrimary(Parser *p){ /* number */ d= strtod(p->s, &next); if(next != p->s){ + if(*next >= 'E' && *next <= 'z'){ + int e= si_prefixes[*next - 'E']; + if(e){ + if(next[1] == 'i'){ + d*= pow( 2, e/0.3); + next+=2; + }else{ + d*= pow(10, e); + next++; + } + } + } p->s= next; return d; } |