---
libavutil/log.h | 7 +++++++
libavutil/opt.c | 18 ++++++++++++++++++
libavutil/opt.h | 20 ++++++++++++++++++++
3 files changed, 45 insertions(+), 0 deletions(-)
diff --git a/libavutil/log.h b/libavutil/log.h
index 1cd9269..67682a2 100644
--- a/libavutil/log.h
+++ b/libavutil/log.h
@@ -70,6 +70,13 @@ typedef struct {
* can be NULL of course
*/
int parent_log_context_offset;
+
+ /**
+ * A function for extended searching. E.g. scanning possible
+ * children objects.
+ */
+ const struct AVOption* (*opt_find)(void *obj, const char *name, const char
*unit,
+ int opt_flags, int search_flags);
} AVClass;
/* av_log API */
diff --git a/libavutil/opt.c b/libavutil/opt.c
index e7f7780..a1fd13f 100644
--- a/libavutil/opt.c
+++ b/libavutil/opt.c
@@ -541,6 +541,24 @@ int avopt_process(void *obj, AVMetadata **options)
return ret;
}
+const AVOption *avopt_find(void *obj, const char *name, const char *unit,
+ int opt_flags, int search_flags)
+{
+ AVClass *c = *(AVClass**)obj;
+ const AVOption *o = NULL;
+
+ if (c->opt_find && search_flags & AVOPT_SEARCH_CHILDREN &&
+ (o = c->opt_find(obj, name, unit, opt_flags, search_flags)))
+ return o;
+
+ while ((o = av_next_option(obj, o))) {
+ if (!strcmp(o->name, name) && (!unit || (o->unit && !strcmp(o->unit,
unit))) &&
+ (o->flags & opt_flags) == opt_flags)
+ return o;
+ }
+ return NULL;
+}
+
#ifdef TEST
#undef printf
diff --git a/libavutil/opt.h b/libavutil/opt.h
index 5424d86..e3157ba 100644
--- a/libavutil/opt.h
+++ b/libavutil/opt.h
@@ -189,4 +189,24 @@ int av_set_options_string(void *ctx, const char *opts,
*/
int avopt_process(void *obj, struct AVMetadata **options);
+#define AVOPT_SEARCH_CHILDREN 0x0001 /**< Search also in possible children
of the given object. */
+
+/**
+ * Look for an option in obj. Look only for the options which
+ * have the specified flags set.
+ *
+ * @param[in] obj A pointer to a struct whose first element is a
+ * pointer to an AVClass.
+ * @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.
+ * @param opt_flags Find only options with those flags set (AV_OPT_FLAG).
+ * @param search_flags A combination of AVOPT_SEARCH_*.
+ *
+ * @return A pointer to the option found, or NULL if no option
+ * has been found.
+ */
+const AVOption *avopt_find(void *obj, const char *name, const char *unit,
+ int opt_flags, int search_flags);
+
#endif /* AVUTIL_OPT_H */
--
1.7.5.1
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel