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