From 301cc4f37050ed5c08aec8de6d4e22ede2ce9a9f Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Mon, 15 Dec 2008 22:48:10 +0000 Subject: Implement the av_set_number2() internal function, which makes possible to distinguish between a not found option failure and a not valid value failure. Originally committed as revision 16156 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/opt.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'libavcodec/opt.c') diff --git a/libavcodec/opt.c b/libavcodec/opt.c index 7932d5a84e..d42c0b9c42 100644 --- a/libavcodec/opt.c +++ b/libavcodec/opt.c @@ -47,15 +47,17 @@ const AVOption *av_next_option(void *obj, const AVOption *last){ else return (*(AVClass**)obj)->option; } -static const AVOption *av_set_number(void *obj, const char *name, double num, int den, int64_t intnum){ +static int av_set_number2(void *obj, const char *name, double num, int den, int64_t intnum, const AVOption **o_out){ const AVOption *o= av_find_opt(obj, name, NULL, 0, 0); void *dst; + if(o_out) + *o_out= o; if(!o || o->offset<=0) - return NULL; + return AVERROR(ENOENT); if(o->max*den < num*intnum || o->min*den > num*intnum) { av_log(NULL, AV_LOG_ERROR, "Value %lf for parameter '%s' out of range\n", num, name); - return NULL; + return AVERROR(ERANGE); } dst= ((uint8_t*)obj) + o->offset; @@ -71,9 +73,17 @@ static const AVOption *av_set_number(void *obj, const char *name, double num, in else *(AVRational*)dst= av_d2q(num*intnum/den, 1<<24); break; default: - return NULL; + return AVERROR(EINVAL); } - return o; + return 0; +} + +static const AVOption *av_set_number(void *obj, const char *name, double num, int den, int64_t intnum){ + const AVOption *o = NULL; + if (av_set_number2(obj, name, num, den, intnum, &o) < 0) + return NULL; + else + return o; } static const double const_values[]={ -- cgit v1.2.3