diff --git a/libavcore/avcore.h b/libavcore/avcore.h index d73572e274..a77bab84f1 100644 --- a/libavcore/avcore.h +++ b/libavcore/avcore.h @@ -28,7 +28,7 @@ #define LIBAVCORE_VERSION_MAJOR 0 #define LIBAVCORE_VERSION_MINOR 9 -#define LIBAVCORE_VERSION_MICRO 0 +#define LIBAVCORE_VERSION_MICRO 1 #define LIBAVCORE_VERSION_INT AV_VERSION_INT(LIBAVCORE_VERSION_MAJOR, \ LIBAVCORE_VERSION_MINOR, \ diff --git a/libavcore/parseutils.c b/libavcore/parseutils.c index b59b8190f1..f78949807d 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;