diff --git a/libavfilter/formats.c b/libavfilter/formats.c index 3534d64ca7..5564d03249 100644 --- a/libavfilter/formats.c +++ b/libavfilter/formats.c @@ -21,6 +21,7 @@ #include "libavutil/eval.h" #include "libavutil/pixdesc.h" +#include "libavutil/parseutils.h" #include "libavutil/audioconvert.h" #include "avfilter.h" #include "internal.h" @@ -493,6 +494,17 @@ int ff_parse_sample_format(int *ret, const char *arg, void *log_ctx) return 0; } +int ff_parse_time_base(AVRational *ret, const char *arg, void *log_ctx) +{ + AVRational r; + if(av_parse_ratio(&r, arg, INT_MAX, 0, log_ctx) < 0 ||r.num<=0 ||r.den<=0) { + av_log(log_ctx, AV_LOG_ERROR, "Invalid time base '%s'\n", arg); + return AVERROR(EINVAL); + } + *ret = r; + return 0; +} + int ff_parse_sample_rate(int *ret, const char *arg, void *log_ctx) { char *tail; diff --git a/libavfilter/internal.h b/libavfilter/internal.h index f06151f90c..bb45274e27 100644 --- a/libavfilter/internal.h +++ b/libavfilter/internal.h @@ -111,6 +111,16 @@ int ff_parse_pixel_format(enum PixelFormat *ret, const char *arg, void *log_ctx) */ int ff_parse_sample_rate(int *ret, const char *arg, void *log_ctx); +/** + * Parse a time base. + * + * @param ret unsigned AVRational pointer to where the value should be written + * @param arg string to parse + * @param log_ctx log context + * @return 0 in case of success, a negative AVERROR code on error + */ +int ff_parse_time_base(AVRational *ret, const char *arg, void *log_ctx); + /** * Parse a sample format name or a corresponding integer representation. *