diff options
author | Panagiotis Issaris <takis.issaris@uhasselt.be> | 2006-09-10 20:21:40 +0000 |
---|---|---|
committer | Guillaume Poirier <gpoirier@mplayerhq.hu> | 2006-09-10 20:21:40 +0000 |
commit | 73a8ceaa17e364dd5bb800de1492a4f2368da644 (patch) | |
tree | ad7cef8b5abd12ed7578a623ac9fd1f2db2c6043 | |
parent | b7cff9ce7c4beb181daa0284ad3ad8fd575e4c8d (diff) | |
download | ffmpeg-73a8ceaa17e364dd5bb800de1492a4f2368da644.tar.gz |
make AVOptions default value field work.
Patch by Panagiotis Issaris % takis P issaris A uhasselt P be %
Original thread:
Date: Sep 8, 2006 3:22 PM
Subject: [Ffmpeg-devel] [PATCH 1/2] Enable usage of AVOption default value
Originally committed as revision 6224 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/opt.c | 37 | ||||
-rw-r--r-- | libavcodec/opt.h | 1 | ||||
-rw-r--r-- | libavcodec/utils.c | 3 | ||||
-rw-r--r-- | libavformat/utils.c | 4 |
4 files changed, 45 insertions, 0 deletions
diff --git a/libavcodec/opt.c b/libavcodec/opt.c index 0bdef5c984..84ea19117d 100644 --- a/libavcodec/opt.c +++ b/libavcodec/opt.c @@ -299,3 +299,40 @@ int av_opt_show(void *obj, void *av_log_obj){ } return 0; } + +void av_opt_set_defaults(void *s) +{ + AVOption *opt = NULL; + while ((opt = av_next_option(s, opt)) != NULL) { + switch(opt->type) { + case FF_OPT_TYPE_CONST: + /* Nothing to be done here */ + break; + case FF_OPT_TYPE_FLAGS: + case FF_OPT_TYPE_INT: { + int val; + val = opt->default_val; + av_set_int(s, opt->name, val); + } + break; + case FF_OPT_TYPE_FLOAT: { + double val; + val = opt->default_val; + av_set_double(s, opt->name, val); + } + break; + case FF_OPT_TYPE_RATIONAL: { + AVRational val; + val = av_d2q(opt->default_val, INT_MAX); + av_set_q(s, opt->name, val); + } + break; + case FF_OPT_TYPE_STRING: + /* Cannot set default for string as default_val is of type * double */ + break; + default: + av_log(s, AV_LOG_DEBUG, "AVOption type %d of option %s not implemented yet\n", opt->type, opt->name); + } + } +} + diff --git a/libavcodec/opt.h b/libavcodec/opt.h index 92a4535ecf..e7be7b54f4 100644 --- a/libavcodec/opt.h +++ b/libavcodec/opt.h @@ -76,5 +76,6 @@ int64_t av_get_int(void *obj, const char *name, AVOption **o_out); const char *av_get_string(void *obj, const char *name, AVOption **o_out, char *buf, int buf_len); AVOption *av_next_option(void *obj, AVOption *last); int av_opt_show(void *obj, void *av_log_obj); +void av_opt_set_defaults(void *s); #endif diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 0e59852eae..5aba3dac8a 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -765,6 +765,9 @@ void avcodec_get_context_defaults(AVCodecContext *s){ memset(s, 0, sizeof(AVCodecContext)); s->av_class= &av_codec_context_class; + + av_opt_set_defaults(s); + s->bit_rate= 800*1000; s->bit_rate_tolerance= s->bit_rate*10; s->qmin= 2; diff --git a/libavformat/utils.c b/libavformat/utils.c index d9b57897dc..a9adb2b3f4 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -486,6 +486,10 @@ static void avformat_get_context_defaults(AVFormatContext *s){ memset(s, 0, sizeof(AVFormatContext)); + s->av_class = &av_format_context_class; + + av_opt_set_defaults(s); + /* from mpegts.c: 1.0 second at 24Mbit/s */ s->probesize=32000; } |