mirror of
https://github.com/librempeg/librempeg
synced 2024-11-23 03:28:27 +00:00
avutil/opt: Implement av_opt_set_defaults* in O(N) instead of O(N²) time
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
0aedf90e62
commit
e8ac905dae
@ -1101,6 +1101,7 @@ void av_opt_set_defaults2(void *s, int mask, int flags)
|
|||||||
const AVClass *class = *(AVClass **)s;
|
const AVClass *class = *(AVClass **)s;
|
||||||
const AVOption *opt = NULL;
|
const AVOption *opt = NULL;
|
||||||
while ((opt = av_opt_next(s, opt)) != NULL) {
|
while ((opt = av_opt_next(s, opt)) != NULL) {
|
||||||
|
void *dst = ((uint8_t*)s) + opt->offset;
|
||||||
#if FF_API_OLD_AVOPTIONS
|
#if FF_API_OLD_AVOPTIONS
|
||||||
if ((opt->flags & mask) != flags)
|
if ((opt->flags & mask) != flags)
|
||||||
continue;
|
continue;
|
||||||
@ -1114,26 +1115,32 @@ void av_opt_set_defaults2(void *s, int mask, int flags)
|
|||||||
case AV_OPT_TYPE_INT64:
|
case AV_OPT_TYPE_INT64:
|
||||||
case AV_OPT_TYPE_DURATION:
|
case AV_OPT_TYPE_DURATION:
|
||||||
case AV_OPT_TYPE_CHANNEL_LAYOUT:
|
case AV_OPT_TYPE_CHANNEL_LAYOUT:
|
||||||
av_opt_set_int(s, opt->name, opt->default_val.i64, 0);
|
write_number(s, opt, dst, 1, 1, opt->default_val.i64);
|
||||||
break;
|
break;
|
||||||
case AV_OPT_TYPE_DOUBLE:
|
case AV_OPT_TYPE_DOUBLE:
|
||||||
case AV_OPT_TYPE_FLOAT: {
|
case AV_OPT_TYPE_FLOAT: {
|
||||||
double val;
|
double val;
|
||||||
val = opt->default_val.dbl;
|
val = opt->default_val.dbl;
|
||||||
av_opt_set_double(s, opt->name, val, 0);
|
write_number(s, opt, dst, val, 1, 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case AV_OPT_TYPE_RATIONAL: {
|
case AV_OPT_TYPE_RATIONAL: {
|
||||||
AVRational val;
|
AVRational val;
|
||||||
val = av_d2q(opt->default_val.dbl, INT_MAX);
|
val = av_d2q(opt->default_val.dbl, INT_MAX);
|
||||||
av_opt_set_q(s, opt->name, val, 0);
|
write_number(s, opt, dst, 1, val.den, val.num);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case AV_OPT_TYPE_COLOR:
|
case AV_OPT_TYPE_COLOR:
|
||||||
|
set_string_color(s, opt, opt->default_val.str, dst);
|
||||||
|
break;
|
||||||
case AV_OPT_TYPE_STRING:
|
case AV_OPT_TYPE_STRING:
|
||||||
|
set_string(s, opt, opt->default_val.str, dst);
|
||||||
|
break;
|
||||||
case AV_OPT_TYPE_IMAGE_SIZE:
|
case AV_OPT_TYPE_IMAGE_SIZE:
|
||||||
|
set_string_image_size(s, opt, opt->default_val.str, dst);
|
||||||
|
break;
|
||||||
case AV_OPT_TYPE_VIDEO_RATE:
|
case AV_OPT_TYPE_VIDEO_RATE:
|
||||||
av_opt_set(s, opt->name, opt->default_val.str, 0);
|
set_string_video_rate(s, opt, opt->default_val.str, dst);
|
||||||
break;
|
break;
|
||||||
case AV_OPT_TYPE_PIXEL_FMT:
|
case AV_OPT_TYPE_PIXEL_FMT:
|
||||||
#if LIBAVUTIL_VERSION_MAJOR < 53
|
#if LIBAVUTIL_VERSION_MAJOR < 53
|
||||||
@ -1141,7 +1148,7 @@ void av_opt_set_defaults2(void *s, int mask, int flags)
|
|||||||
av_opt_set(s, opt->name, opt->default_val.str, 0);
|
av_opt_set(s, opt->name, opt->default_val.str, 0);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
av_opt_set_pixel_fmt(s, opt->name, opt->default_val.i64, 0);
|
write_number(s, opt, dst, 1, 1, opt->default_val.i64);
|
||||||
break;
|
break;
|
||||||
case AV_OPT_TYPE_SAMPLE_FMT:
|
case AV_OPT_TYPE_SAMPLE_FMT:
|
||||||
#if LIBAVUTIL_VERSION_MAJOR < 53
|
#if LIBAVUTIL_VERSION_MAJOR < 53
|
||||||
@ -1149,7 +1156,7 @@ void av_opt_set_defaults2(void *s, int mask, int flags)
|
|||||||
av_opt_set(s, opt->name, opt->default_val.str, 0);
|
av_opt_set(s, opt->name, opt->default_val.str, 0);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
av_opt_set_sample_fmt(s, opt->name, opt->default_val.i64, 0);
|
write_number(s, opt, dst, 1, 1, opt->default_val.i64);
|
||||||
break;
|
break;
|
||||||
case AV_OPT_TYPE_BINARY:
|
case AV_OPT_TYPE_BINARY:
|
||||||
/* Cannot set default for binary */
|
/* Cannot set default for binary */
|
||||||
|
Loading…
Reference in New Issue
Block a user