aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2011-08-23 07:11:26 +0200
committerAnton Khirnov <anton@khirnov.net>2011-09-03 20:52:21 +0200
commitc11fb8288d282da430f598bb029deccbacb31591 (patch)
tree22a1048ae72d776fd0681f063f391208d80171f7
parent5938e02185430ca711106aaec9b5622dbf588af3 (diff)
downloadffmpeg-c11fb8288d282da430f598bb029deccbacb31591.tar.gz
AVOptions: add AV_OPT_SEARCH_FAKE_OBJ flag for av_opt_find().
It allows to search for options only with AVClass, without allocating the corresponding context.
-rw-r--r--doc/APIchanges3
-rw-r--r--libavcodec/options.c2
-rw-r--r--libavformat/options.c2
-rw-r--r--libavutil/avutil.h2
-rw-r--r--libavutil/opt.h9
5 files changed, 15 insertions, 3 deletions
diff --git a/doc/APIchanges b/doc/APIchanges
index a31268195f..240e613dda 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -13,6 +13,9 @@ libavutil: 2011-04-18
API changes, most recent first:
+2011-08-xx - xxxxxxx - lavu 51.10.0
+ Add AV_OPT_SEARCH_FAKE_OBJ flag for av_opt_find() function.
+
2011-08-xx - xxxxxx - lavu 51.9.0
Add av_fifo_peek2(), deprecate av_fifo_peek().
diff --git a/libavcodec/options.c b/libavcodec/options.c
index a715dfafcb..97525634d8 100644
--- a/libavcodec/options.c
+++ b/libavcodec/options.c
@@ -44,7 +44,7 @@ static const AVOption *opt_find(void *obj, const char *name, const char *unit, i
AVCodecContext *s = obj;
AVCodec *c = NULL;
- if (s->priv_data) {
+ if (!(search_flags & AV_OPT_SEARCH_FAKE_OBJ) && s->priv_data) {
if (s->codec->priv_class)
return av_opt_find(s->priv_data, name, unit, opt_flags, search_flags);
return NULL;
diff --git a/libavformat/options.c b/libavformat/options.c
index 3ca8c83480..5ea0b181cb 100644
--- a/libavformat/options.c
+++ b/libavformat/options.c
@@ -38,7 +38,7 @@ static const AVOption *opt_find(void *obj, const char *name, const char *unit, i
AVFormatContext *s = obj;
AVInputFormat *ifmt = NULL;
AVOutputFormat *ofmt = NULL;
- if (s->priv_data) {
+ if (!(search_flags & AV_OPT_SEARCH_FAKE_OBJ) && s->priv_data) {
if ((s->iformat && !s->iformat->priv_class) ||
(s->oformat && !s->oformat->priv_class))
return NULL;
diff --git a/libavutil/avutil.h b/libavutil/avutil.h
index 484659a58b..24594107bc 100644
--- a/libavutil/avutil.h
+++ b/libavutil/avutil.h
@@ -40,7 +40,7 @@
#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
#define LIBAVUTIL_VERSION_MAJOR 51
-#define LIBAVUTIL_VERSION_MINOR 9
+#define LIBAVUTIL_VERSION_MINOR 10
#define LIBAVUTIL_VERSION_MICRO 0
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
diff --git a/libavutil/opt.h b/libavutil/opt.h
index 30aa54f5b6..21dac7c569 100644
--- a/libavutil/opt.h
+++ b/libavutil/opt.h
@@ -215,6 +215,13 @@ int av_opt_set_dict(void *obj, struct AVDictionary **options);
#define AV_OPT_SEARCH_CHILDREN 0x0001 /**< Search in possible children of the
given object first. */
+/**
+ * The obj passed to av_opt_find() is fake -- only a double pointer to AVClass
+ * instead of a required pointer to a struct containing AVClass. This is
+ * useful for searching for options without needing to allocate the corresponding
+ * object.
+ */
+#define AV_OPT_SEARCH_FAKE_OBJ 0x0002
/**
* Look for an option in an object. Consider only options which
@@ -222,6 +229,8 @@ int av_opt_set_dict(void *obj, struct AVDictionary **options);
*
* @param[in] obj A pointer to a struct whose first element is a
* pointer to an AVClass.
+ * Alternatively a double pointer to an AVClass, if
+ * AV_OPT_SEARCH_FAKE_OBJ search flag is set.
* @param[in] name The name of the option to look for.
* @param[in] unit When searching for named constants, name of the unit
* it belongs to.