diff options
author | Anton Khirnov <anton@khirnov.net> | 2011-06-08 08:27:53 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2011-07-10 17:10:49 +0200 |
commit | 84626b364babc27c5a3db454ebf6a02aeaa186fe (patch) | |
tree | 686ab526ca0ac930bc7bbcc0e4bb81591a83a0bf | |
parent | 71a861cf4010ab835fab383a250f27903eb61a34 (diff) | |
download | ffmpeg-84626b364babc27c5a3db454ebf6a02aeaa186fe.tar.gz |
lavc: add support for codec-specific defaults.
-rw-r--r-- | libavcodec/avcodec.h | 7 | ||||
-rw-r--r-- | libavcodec/internal.h | 5 | ||||
-rw-r--r-- | libavcodec/options.c | 11 |
3 files changed, 23 insertions, 0 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 3f016807ab..ba6342a09e 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -2860,6 +2860,8 @@ typedef struct AVProfile { const char *name; ///< short name for the profile } AVProfile; +typedef struct AVCodecDefault AVCodecDefault; + /** * AVCodec. */ @@ -2922,6 +2924,11 @@ typedef struct AVCodec { */ int (*update_thread_context)(AVCodecContext *dst, const AVCodecContext *src); /** @} */ + + /** + * Private codec-specific defaults. + */ + const AVCodecDefault *defaults; } AVCodec; /** diff --git a/libavcodec/internal.h b/libavcodec/internal.h index fe853ab87e..9a444fcae7 100644 --- a/libavcodec/internal.h +++ b/libavcodec/internal.h @@ -27,6 +27,11 @@ #include <stdint.h> #include "avcodec.h" +struct AVCodecDefault { + const uint8_t *key; + const uint8_t *value; +}; + /** * Determine whether pix_fmt is a hardware accelerated format. */ diff --git a/libavcodec/options.c b/libavcodec/options.c index 1e7fe522ea..4869046665 100644 --- a/libavcodec/options.c +++ b/libavcodec/options.c @@ -25,6 +25,8 @@ */ #include "avcodec.h" +#include "internal.h" +#include "libavutil/avassert.h" #include "libavutil/opt.h" #include <float.h> /* FLT_MIN, FLT_MAX */ @@ -524,6 +526,15 @@ int avcodec_get_context_defaults3(AVCodecContext *s, AVCodec *codec){ av_opt_set_defaults(s->priv_data); } } + if (codec && codec->defaults) { + int ret; + AVCodecDefault *d = codec->defaults; + while (d->key) { + ret = av_set_string3(s, d->key, d->value, 0, NULL); + av_assert0(ret >= 0); + d++; + } + } return 0; } |