mirror of https://git.ffmpeg.org/ffmpeg.git
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:
|
||||
return set_string_sample_fmt(obj, o, val, dst);
|
||||
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;
|
||||
} 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:
|
||||
return set_string_color(obj, o, val, dst);
|
||||
case AV_OPT_TYPE_CHANNEL_LAYOUT:
|
||||
|
|
Loading…
Reference in New Issue