summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavcodec/opt.c37
-rw-r--r--libavcodec/opt.h1
-rw-r--r--libavcodec/utils.c3
-rw-r--r--libavformat/utils.c4
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;
}