summaryrefslogtreecommitdiff
path: root/libavcodec/eval.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2006-09-17 08:52:41 +0000
committerMichael Niedermayer <michaelni@gmx.at>2006-09-17 08:52:41 +0000
commite66477afbe0d3d48852b513c95497809a2fc2739 (patch)
tree607cecea26eb160f965381ad554b63d8e8ede091 /libavcodec/eval.c
parent99f6278e31d7efa02e84b10fecfcb4f65a78ab7f (diff)
support SI and some non SI prefixes
Originally committed as revision 6284 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/eval.c')
-rw-r--r--libavcodec/eval.c34
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;
}