From e8ac905daea47572abf90c873cd184dbfbbf34a7 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sat, 7 Dec 2013 12:41:09 +0100 Subject: [PATCH] =?UTF-8?q?avutil/opt:=20Implement=20av=5Fopt=5Fset=5Fdefa?= =?UTF-8?q?ults*=20in=20O(N)=20instead=20of=20O(N=C2=B2)=20time?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michael Niedermayer --- libavutil/opt.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/libavutil/opt.c b/libavutil/opt.c index 76959fa20b..f6aa496b8c 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -1101,6 +1101,7 @@ void av_opt_set_defaults2(void *s, int mask, int flags) const AVClass *class = *(AVClass **)s; const AVOption *opt = NULL; while ((opt = av_opt_next(s, opt)) != NULL) { + void *dst = ((uint8_t*)s) + opt->offset; #if FF_API_OLD_AVOPTIONS if ((opt->flags & mask) != flags) 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_DURATION: 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; case AV_OPT_TYPE_DOUBLE: case AV_OPT_TYPE_FLOAT: { double val; val = opt->default_val.dbl; - av_opt_set_double(s, opt->name, val, 0); + write_number(s, opt, dst, val, 1, 1); } break; case AV_OPT_TYPE_RATIONAL: { AVRational val; 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; case AV_OPT_TYPE_COLOR: + set_string_color(s, opt, opt->default_val.str, dst); + break; case AV_OPT_TYPE_STRING: + set_string(s, opt, opt->default_val.str, dst); + break; case AV_OPT_TYPE_IMAGE_SIZE: + set_string_image_size(s, opt, opt->default_val.str, dst); + break; 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; case AV_OPT_TYPE_PIXEL_FMT: #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); else #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; case AV_OPT_TYPE_SAMPLE_FMT: #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); else #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; case AV_OPT_TYPE_BINARY: /* Cannot set default for binary */