summaryrefslogtreecommitdiff
path: root/libavfilter/avfilter.c
diff options
context:
space:
mode:
authorStefano Sabatini <stefasab@gmail.com>2012-08-09 14:59:10 +0200
committerStefano Sabatini <stefasab@gmail.com>2012-08-13 00:04:06 +0200
commit5c0d8bc4cea23cfe85c082a03871cf73190813fb (patch)
treed9020fdf476174054217f51a6996e01fe497fc35 /libavfilter/avfilter.c
parenta25346e65cc2f46e3a9ec1a12312a09cd9b132ed (diff)
lavfi: add avfilter_get_class() and iteration callbacks
Allow iteration over filter options.
Diffstat (limited to 'libavfilter/avfilter.c')
-rw-r--r--libavfilter/avfilter.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index c698d8aa57..e87a78abe9 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -432,13 +432,48 @@ static const char *default_filter_name(void *filter_ctx)
return ctx->name ? ctx->name : ctx->filter->name;
}
+static void *filter_child_next(void *obj, void *prev)
+{
+ AVFilterContext *ctx = obj;
+ if (!prev && ctx->filter && ctx->filter->priv_class)
+ return ctx->priv;
+ return NULL;
+}
+
+static const AVClass *filter_child_class_next(const AVClass *prev)
+{
+ AVFilter **filter_ptr = NULL;
+
+ /* find the filter that corresponds to prev */
+ while (prev && *(filter_ptr = av_filter_next(filter_ptr)))
+ if ((*filter_ptr)->priv_class == prev)
+ break;
+
+ /* could not find filter corresponding to prev */
+ if (prev && !(*filter_ptr))
+ return NULL;
+
+ /* find next filter with specific options */
+ while (*(filter_ptr = av_filter_next(filter_ptr)))
+ if ((*filter_ptr)->priv_class)
+ return (*filter_ptr)->priv_class;
+ return NULL;
+}
+
static const AVClass avfilter_class = {
.class_name = "AVFilter",
.item_name = default_filter_name,
.version = LIBAVUTIL_VERSION_INT,
.category = AV_CLASS_CATEGORY_FILTER,
+ .child_next = filter_child_next,
+ .child_class_next = filter_child_class_next,
};
+const AVClass *avfilter_get_class(void)
+{
+ return &avfilter_class;
+}
+
int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *inst_name)
{
AVFilterContext *ret;