avutil/opt: check for minimum and maximum values when setting AV_OPT_TYPE_DURATION fields
Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
3bfd409e59
commit
d40dc64173
@ -496,15 +496,22 @@ int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
|
|||||||
case AV_OPT_TYPE_SAMPLE_FMT:
|
case AV_OPT_TYPE_SAMPLE_FMT:
|
||||||
return set_string_sample_fmt(obj, o, val, dst);
|
return set_string_sample_fmt(obj, o, val, dst);
|
||||||
case AV_OPT_TYPE_DURATION:
|
case AV_OPT_TYPE_DURATION:
|
||||||
if (!val) {
|
{
|
||||||
*(int64_t *)dst = 0;
|
int64_t usecs = 0;
|
||||||
|
if (val) {
|
||||||
|
if ((ret = av_parse_time(&usecs, val, 1)) < 0) {
|
||||||
|
av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as duration\n", val);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (usecs < o->min || usecs > o->max) {
|
||||||
|
av_log(obj, AV_LOG_ERROR, "Value %f for parameter '%s' out of range [%g - %g]\n",
|
||||||
|
usecs / 1000000.0, o->name, o->min / 1000000.0, o->max / 1000000.0);
|
||||||
|
return AVERROR(ERANGE);
|
||||||
|
}
|
||||||
|
*(int64_t *)dst = usecs;
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
|
||||||
if ((ret = av_parse_time(dst, val, 1)) < 0)
|
|
||||||
av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as duration\n", val);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case AV_OPT_TYPE_COLOR:
|
case AV_OPT_TYPE_COLOR:
|
||||||
return set_string_color(obj, o, val, dst);
|
return set_string_color(obj, o, val, dst);
|
||||||
case AV_OPT_TYPE_CHANNEL_LAYOUT:
|
case AV_OPT_TYPE_CHANNEL_LAYOUT:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user