diff options
author | Stefano Sabatini <stefano.sabatini-lala@poste.it> | 2010-10-04 13:41:04 +0000 |
---|---|---|
committer | Stefano Sabatini <stefano.sabatini-lala@poste.it> | 2010-10-04 13:41:04 +0000 |
commit | bc12b3b11bc814f6e3f788d38de29f743d31f644 (patch) | |
tree | dc22d6b62c540718cc07e700502d5daf1d760ddc /libavcore/parseutils.c | |
parent | 6b4ed22f7512056f47bc7f39cd16bbbb83b2781d (diff) | |
download | ffmpeg-streaming-bc12b3b11bc814f6e3f788d38de29f743d31f644.zip ffmpeg-streaming-bc12b3b11bc814f6e3f788d38de29f743d31f644.tar.gz |
Use av_parse_and_eval_expr() in av_parse_video_rate(), simplify.
Originally committed as revision 25333 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcore/parseutils.c')
-rw-r--r-- | libavcore/parseutils.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/libavcore/parseutils.c b/libavcore/parseutils.c index b59b819..f789498 100644 --- a/libavcore/parseutils.c +++ b/libavcore/parseutils.c @@ -23,6 +23,7 @@ #include "parseutils.h" #include "libavutil/avutil.h" +#include "libavutil/eval.h" typedef struct { const char *abbr; @@ -115,9 +116,9 @@ int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str) int av_parse_video_rate(AVRational *rate, const char *arg) { - int i; + int i, ret; int n = FF_ARRAY_ELEMS(video_rate_abbrs); - char *cp; + double res; /* First, we check our abbreviation table */ for (i = 0; i < n; ++i) @@ -127,20 +128,10 @@ int av_parse_video_rate(AVRational *rate, const char *arg) } /* Then, we try to parse it as fraction */ - cp = strchr(arg, '/'); - if (!cp) - cp = strchr(arg, ':'); - if (cp) { - char *cpp; - rate->num = strtol(arg, &cpp, 10); - if (cpp != arg || cpp == cp) - rate->den = strtol(cp+1, &cpp, 10); - else - rate->num = 0; - } else { - /* Finally we give up and parse it as double */ - *rate = av_d2q(strtod(arg, 0), 1001000); - } + if ((ret = av_parse_and_eval_expr(&res, arg, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, 0, NULL)) < 0) + return ret; + *rate = av_d2q(res, 1001000); if (rate->num <= 0 || rate->den <= 0) return AVERROR(EINVAL); return 0; |