From a41e9d6899b7fc81cbf9a3dd7a047d8758d6c6c7 Mon Sep 17 00:00:00 2001
From: Panagiotis Issaris <takis.issaris@uhasselt.be>
Date: Thu, 14 Sep 2006 11:23:41 +0000
Subject: Allow parameter values (AVOptions) to use the 'k', 'M', 'G' and 'B'
 postfixes.

Originally committed as revision 6249 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavcodec/opt.c | 31 +++++++++++++++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)

(limited to 'libavcodec')

diff --git a/libavcodec/opt.c b/libavcodec/opt.c
index a17e7ba757..63728f8e0c 100644
--- a/libavcodec/opt.c
+++ b/libavcodec/opt.c
@@ -27,11 +27,38 @@
 #include "avcodec.h"
 #include "opt.h"
 
-static double av_parse_num(const char *name, char **tail){
+/**
+ * strtod() function extended with 'k', 'M' and 'B' postfixes.
+ * This allows using kB, MB, k, M and B as a postfix. This function
+ * assumes that the unit of numbers is bits not bytes.
+ */
+static double av_strtod(const char *name, char **tail) {
     double d;
     d= strtod(name, tail);
+    if(*tail>name && (**tail=='k')) {
+        d*=1000;
+        (*tail)++;
+    }
+    else if(*tail && (**tail=='M')) {
+        d*=1000000;
+        (*tail)++;
+    }
+    else if(*tail && (**tail=='G')) {
+        d*=1000000000;
+        (*tail)++;
+    }
+    if(*tail && (**tail=='B')) {
+        d*=8;
+        (*tail)++;
+    }
+    return d;
+}
+
+static double av_parse_num(const char *name, char **tail){
+    double d;
+    d= av_strtod(name, tail);
     if(*tail>name && (**tail=='/' || **tail==':'))
-        d/=strtod((*tail)+1, tail);
+        d/=av_strtod((*tail)+1, tail);
     return d;
 }
 
-- 
cgit v1.2.3